summary refs log tree commit diff
path: root/src/TimelineView.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-28 02:01:37 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-28 02:01:37 +0200
commitb21942a3e3db3e425155c58483a99bc2789de241 (patch)
tree860ffe40a5028b78df79de37a9b866a772885b1f /src/TimelineView.cc
parentRemove another /messages call (#139) (diff)
downloadnheko-b21942a3e3db3e425155c58483a99bc2789de241.tar.xz
Add read support for m.file messages (#24)
Diffstat (limited to 'src/TimelineView.cc')
-rw-r--r--src/TimelineView.cc38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/TimelineView.cc b/src/TimelineView.cc

index ed046fe1..bdc59af3 100644 --- a/src/TimelineView.cc +++ b/src/TimelineView.cc
@@ -21,6 +21,7 @@ #include <QSettings> #include <QTimer> +#include "FileItem.h" #include "FloatingButton.h" #include "ImageItem.h" #include "RoomMessages.h" @@ -331,6 +332,34 @@ TimelineView::parseMessageEvent(const QJsonObject &event, TimelineDirection dire updateLastSender(emote.sender(), direction); return createTimelineItem(emote, with_sender); + } else if (msg_type == events::MessageEventType::File) { + events::MessageEvent<msgs::File> file; + + try { + file.deserialize(event); + } catch (const DeserializationException &e) { + qWarning() << e.what() << event; + return nullptr; + } + + if (isDuplicate(file.eventId())) + return nullptr; + + eventIds_[file.eventId()] = true; + + QString txnid = file.unsignedData().transactionId(); + + if (!txnid.isEmpty() && + isPendingMessage(txnid, file.sender(), local_user_)) { + removePendingMessage(txnid); + return nullptr; + } + + auto withSender = isSenderRendered(file.sender(), direction); + + updateLastSender(file.sender(), direction); + + return createTimelineItem(file, withSender); } else if (msg_type == events::MessageEventType::Unknown) { // TODO Handle redacted messages. // Silenced for now. @@ -470,6 +499,15 @@ TimelineView::createTimelineItem(const events::MessageEvent<msgs::Image> &event, } TimelineItem * +TimelineView::createTimelineItem(const events::MessageEvent<msgs::File> &event, bool withSender) +{ + auto file = new FileItem(client_, event); + auto item = new TimelineItem(file, event, withSender, scroll_widget_); + + return item; +} + +TimelineItem * TimelineView::createTimelineItem(const events::MessageEvent<msgs::Notice> &event, bool with_sender) { TimelineItem *item = new TimelineItem(event, with_sender, scroll_widget_);