summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-30 13:19:34 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-11-30 13:19:34 +0200
commit5663c58dd92150422b8f881cf0720859173091b8 (patch)
treef9bab72660d2b62c25e8cdd4f4474dfee310e267 /src
parentdeb1a6e2925acb4ab339fc071e5ea58ab96b5bb4 (diff)
Use templates for the TimelineItem generation
Diffstat (limited to 'src')
-rw-r--r--src/TimelineView.cc141
1 files changed, 11 insertions, 130 deletions
diff --git a/src/TimelineView.cc b/src/TimelineView.cc
index e61307fa..7bbda051 100644
--- a/src/TimelineView.cc
+++ b/src/TimelineView.cc
@@ -16,7 +16,6 @@
*/
#include <QApplication>
-#include <QDebug>
#include <QFileInfo>
#include <QTimer>
@@ -229,140 +228,22 @@ TimelineView::parseMessageEvent(const QJsonObject &event, TimelineDirection dire
if (ty == events::EventType::RoomMessage) {
events::MessageEventType msg_type = events::extractMessageEventType(event);
- if (msg_type == events::MessageEventType::Text) {
- events::MessageEvent<msgs::Text> text;
-
- try {
- text.deserialize(event);
- } catch (const DeserializationException &e) {
- qWarning() << e.what() << event;
- return nullptr;
- }
-
- if (isDuplicate(text.eventId()))
- return nullptr;
-
- eventIds_[text.eventId()] = true;
-
- QString txnid = text.unsignedData().transactionId();
- if (!txnid.isEmpty() &&
- isPendingMessage(txnid, text.sender(), local_user_)) {
- removePendingMessage(txnid);
- return nullptr;
- }
+ using Emote = events::MessageEvent<msgs::Emote>;
+ using File = events::MessageEvent<msgs::File>;
+ using Image = events::MessageEvent<msgs::Image>;
+ using Notice = events::MessageEvent<msgs::Notice>;
+ using Text = events::MessageEvent<msgs::Text>;
- auto with_sender = isSenderRendered(text.sender(), direction);
-
- updateLastSender(text.sender(), direction);
-
- using Text = events::MessageEvent<msgs::Text>;
- return createTimelineItem<Text>(text, with_sender);
+ if (msg_type == events::MessageEventType::Text) {
+ return processMessageEvent<Text>(event, direction);
} else if (msg_type == events::MessageEventType::Notice) {
- events::MessageEvent<msgs::Notice> notice;
-
- try {
- notice.deserialize(event);
- } catch (const DeserializationException &e) {
- qWarning() << e.what() << event;
- return nullptr;
- }
-
- if (isDuplicate(notice.eventId()))
- return nullptr;
-
- eventIds_[notice.eventId()] = true;
-
- auto with_sender = isSenderRendered(notice.sender(), direction);
-
- updateLastSender(notice.sender(), direction);
-
- using Notice = events::MessageEvent<msgs::Notice>;
- return createTimelineItem<Notice>(notice, with_sender);
+ return processMessageEvent<Notice>(event, direction);
} else if (msg_type == events::MessageEventType::Image) {
- events::MessageEvent<msgs::Image> img;
-
- try {
- img.deserialize(event);
- } catch (const DeserializationException &e) {
- qWarning() << e.what() << event;
- return nullptr;
- }
-
- if (isDuplicate(img.eventId()))
- return nullptr;
-
- eventIds_[img.eventId()] = true;
-
- QString txnid = img.unsignedData().transactionId();
- if (!txnid.isEmpty() &&
- isPendingMessage(txnid, img.sender(), local_user_)) {
- removePendingMessage(txnid);
- return nullptr;
- }
-
- auto with_sender = isSenderRendered(img.sender(), direction);
-
- updateLastSender(img.sender(), direction);
-
- using Image = events::MessageEvent<msgs::Image>;
- return createTimelineItem<Image, ImageItem>(img, with_sender);
+ return processMessageEvent<Image, ImageItem>(event, direction);
} else if (msg_type == events::MessageEventType::Emote) {
- events::MessageEvent<msgs::Emote> emote;
-
- try {
- emote.deserialize(event);
- } catch (const DeserializationException &e) {
- qWarning() << e.what() << event;
- return nullptr;
- }
-
- if (isDuplicate(emote.eventId()))
- return nullptr;
-
- eventIds_[emote.eventId()] = true;
-
- QString txnid = emote.unsignedData().transactionId();
- if (!txnid.isEmpty() &&
- isPendingMessage(txnid, emote.sender(), local_user_)) {
- removePendingMessage(txnid);
- return nullptr;
- }
-
- auto with_sender = isSenderRendered(emote.sender(), direction);
-
- updateLastSender(emote.sender(), direction);
-
- using Emote = events::MessageEvent<msgs::Emote>;
- return createTimelineItem<Emote>(emote, with_sender);
+ return processMessageEvent<Emote>(event, direction);
} 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);
-
- using File = events::MessageEvent<msgs::File>;
- return createTimelineItem<File, FileItem>(file, withSender);
+ return processMessageEvent<File, FileItem>(event, direction);
} else if (msg_type == events::MessageEventType::Unknown) {
// TODO Handle redacted messages.
// Silenced for now.