summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-10 23:31:51 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-07-10 23:31:51 +0300
commit6f07ab433e252dd3615cc1633aee856d8ebd83ed (patch)
tree6d7338a67ec5175b2e9f67a47d137e6bee97ea2f /src/ChatPage.cc
parentLimit -Wshadow to non-gcc (#368) (diff)
downloadnheko-6f07ab433e252dd3615cc1633aee856d8ebd83ed.tar.xz
Send image dimensions in m.image event
fixes #215
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc91
1 files changed, 51 insertions, 40 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index a14c7a93..23469da5 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -16,6 +16,7 @@ */ #include <QApplication> +#include <QImageReader> #include <QSettings> #include <QtConcurrent> @@ -283,48 +284,52 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) connect(text_input_, &TextInputWidget::sendJoinRoomRequest, this, &ChatPage::joinRoom); - connect(text_input_, - &TextInputWidget::uploadImage, - this, - [this](QSharedPointer<QIODevice> dev, const QString &fn) { - QMimeDatabase db; - QMimeType mime = db.mimeTypeForData(dev.data()); + connect( + text_input_, + &TextInputWidget::uploadImage, + this, + [this](QSharedPointer<QIODevice> dev, const QString &fn) { + QMimeDatabase db; + QMimeType mime = db.mimeTypeForData(dev.data()); - if (!dev->open(QIODevice::ReadOnly)) { - emit uploadFailed( - QString("Error while reading media: %1").arg(dev->errorString())); - return; - } + if (!dev->open(QIODevice::ReadOnly)) { + emit uploadFailed( + QString("Error while reading media: %1").arg(dev->errorString())); + return; + } - auto bin = dev->readAll(); - auto payload = std::string(bin.data(), bin.size()); + auto bin = dev->peek(dev->size()); + auto payload = std::string(bin.data(), bin.size()); + auto dimensions = QImageReader(dev.get()).size(); - http::v2::client()->upload( - payload, - mime.name().toStdString(), - QFileInfo(fn).fileName().toStdString(), - [this, - room_id = current_room_, - filename = fn, - mime = mime.name(), - size = payload.size()](const mtx::responses::ContentURI &res, - mtx::http::RequestErr err) { - if (err) { - emit uploadFailed( - tr("Failed to upload image. Please try again.")); - nhlog::net()->warn("failed to upload image: {} ({})", - err->matrix_error.error, - static_cast<int>(err->status_code)); - return; - } + http::v2::client()->upload( + payload, + mime.name().toStdString(), + QFileInfo(fn).fileName().toStdString(), + [this, + room_id = current_room_, + filename = fn, + mime = mime.name(), + size = payload.size(), + dimensions](const mtx::responses::ContentURI &res, mtx::http::RequestErr err) { + if (err) { + emit uploadFailed( + tr("Failed to upload image. Please try again.")); + nhlog::net()->warn("failed to upload image: {} {} ({})", + err->matrix_error.error, + to_string(err->matrix_error.errcode), + static_cast<int>(err->status_code)); + return; + } - emit imageUploaded(room_id, - filename, - QString::fromStdString(res.content_uri), - mime, - size); - }); - }); + emit imageUploaded(room_id, + filename, + QString::fromStdString(res.content_uri), + mime, + size, + dimensions); + }); + }); connect(text_input_, &TextInputWidget::uploadFile, @@ -461,9 +466,15 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent) connect(this, &ChatPage::imageUploaded, this, - [this](QString roomid, QString filename, QString url, QString mime, qint64 dsize) { + [this](QString roomid, + QString filename, + QString url, + QString mime, + qint64 dsize, + QSize dimensions) { text_input_->hideUploadSpinner(); - view_manager_->queueImageMessage(roomid, filename, url, mime, dsize); + view_manager_->queueImageMessage( + roomid, filename, url, mime, dsize, dimensions); }); connect(this, &ChatPage::fileUploaded,