Allow replying with an image

This commit is contained in:
Nicolas Werner 2020-01-12 16:39:01 +01:00
parent 4727f1c2bb
commit 4ca8da9a89
7 changed files with 133 additions and 118 deletions

View file

@ -56,6 +56,7 @@ constexpr int RETRY_TIMEOUT = 5'000;
constexpr size_t MAX_ONETIME_KEYS = 50;
Q_DECLARE_METATYPE(std::optional<mtx::crypto::EncryptedFile>)
Q_DECLARE_METATYPE(std::optional<RelatedInfo>)
ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
: QWidget(parent)
@ -65,8 +66,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
{
setObjectName("chatPage");
qRegisterMetaType<std::optional<mtx::crypto::EncryptedFile>>(
"std::optional<mtx::crypto::EncryptedFile>");
qRegisterMetaType<std::optional<mtx::crypto::EncryptedFile>>();
qRegisterMetaType<std::optional<RelatedInfo>>();
topLayout_ = new QHBoxLayout(this);
topLayout_->setSpacing(0);
@ -287,19 +288,14 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
SLOT(showUnreadMessageNotification(int)));
connect(text_input_,
SIGNAL(sendTextMessage(const QString &)),
&TextInputWidget::sendTextMessage,
view_manager_,
SLOT(queueTextMessage(const QString &)));
&TimelineViewManager::queueTextMessage);
connect(text_input_,
SIGNAL(sendReplyMessage(const QString &, const RelatedInfo &)),
&TextInputWidget::sendEmoteMessage,
view_manager_,
SLOT(queueReplyMessage(const QString &, const RelatedInfo &)));
connect(text_input_,
SIGNAL(sendEmoteMessage(const QString &)),
view_manager_,
SLOT(queueEmoteMessage(const QString &)));
&TimelineViewManager::queueEmoteMessage);
connect(text_input_, &TextInputWidget::sendJoinRoomRequest, this, &ChatPage::joinRoom);
@ -307,7 +303,10 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
text_input_,
&TextInputWidget::uploadMedia,
this,
[this](QSharedPointer<QIODevice> dev, QString mimeClass, const QString &fn) {
[this](QSharedPointer<QIODevice> dev,
QString mimeClass,
const QString &fn,
const std::optional<RelatedInfo> &related) {
QMimeDatabase db;
QMimeType mime = db.mimeTypeForData(dev.data());
@ -341,7 +340,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
mimeClass,
mime = mime.name(),
size = payload.size(),
dimensions](const mtx::responses::ContentURI &res, mtx::http::RequestErr err) {
dimensions,
related](const mtx::responses::ContentURI &res, mtx::http::RequestErr err) {
if (err) {
emit uploadFailed(
tr("Failed to upload media. Please try again."));
@ -359,7 +359,8 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
mimeClass,
mime,
size,
dimensions);
dimensions,
related);
});
});
@ -367,35 +368,37 @@ ChatPage::ChatPage(QSharedPointer<UserSettings> userSettings, QWidget *parent)
text_input_->hideUploadSpinner();
emit showNotification(msg);
});
connect(this,
&ChatPage::mediaUploaded,
this,
[this](QString roomid,
QString filename,
std::optional<mtx::crypto::EncryptedFile> encryptedFile,
QString url,
QString mimeClass,
QString mime,
qint64 dsize,
QSize dimensions) {
text_input_->hideUploadSpinner();
connect(
this,
&ChatPage::mediaUploaded,
this,
[this](QString roomid,
QString filename,
std::optional<mtx::crypto::EncryptedFile> encryptedFile,
QString url,
QString mimeClass,
QString mime,
qint64 dsize,
QSize dimensions,
const std::optional<RelatedInfo> &related) {
text_input_->hideUploadSpinner();
if (encryptedFile)
encryptedFile->url = url.toStdString();
if (encryptedFile)
encryptedFile->url = url.toStdString();
if (mimeClass == "image")
view_manager_->queueImageMessage(
roomid, filename, encryptedFile, url, mime, dsize, dimensions);
else if (mimeClass == "audio")
view_manager_->queueAudioMessage(
roomid, filename, encryptedFile, url, mime, dsize);
else if (mimeClass == "video")
view_manager_->queueVideoMessage(
roomid, filename, encryptedFile, url, mime, dsize);
else
view_manager_->queueFileMessage(
roomid, filename, encryptedFile, url, mime, dsize);
});
if (mimeClass == "image")
view_manager_->queueImageMessage(
roomid, filename, encryptedFile, url, mime, dsize, dimensions, related);
else if (mimeClass == "audio")
view_manager_->queueAudioMessage(
roomid, filename, encryptedFile, url, mime, dsize, related);
else if (mimeClass == "video")
view_manager_->queueVideoMessage(
roomid, filename, encryptedFile, url, mime, dsize, related);
else
view_manager_->queueFileMessage(
roomid, filename, encryptedFile, url, mime, dsize, related);
});
connect(room_list_, &RoomList::roomAvatarChanged, this, &ChatPage::updateTopBarAvatar);