summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-27 22:15:44 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-04-27 22:15:44 +0300
commit3f80725c33c3c491bb6c186a46f20272bb2dfc46 (patch)
tree00fc4206178bacb9c4a40f6a0521842f194d8d69 /src
parentAdd remove_if for maps (diff)
downloadnheko-3f80725c33c3c491bb6c186a46f20272bb2dfc46.tar.xz
Add support for displaying m.sticker events
fixes #291
Diffstat (limited to 'src')
-rw-r--r--src/RoomList.cc8
-rw-r--r--src/Utils.cc12
-rw-r--r--src/timeline/TimelineItem.cc14
-rw-r--r--src/timeline/TimelineView.cc3
-rw-r--r--src/timeline/widgets/ImageItem.cc7
5 files changed, 42 insertions, 2 deletions
diff --git a/src/RoomList.cc b/src/RoomList.cc

index 61b3e4bc..a3195196 100644 --- a/src/RoomList.cc +++ b/src/RoomList.cc
@@ -187,7 +187,13 @@ RoomList::cleanupInvites(const std::map<QString, bool> &invites) return; utils::erase_if(rooms_, [invites](auto &room) { - return room.second->isInvite() && (invites.find(room.first) == invites.end()); + auto room_id = room.first; + auto item = room.second; + + if (!item) + return false; + + return item->isInvite() && (invites.find(room_id) == invites.end()); }); } diff --git a/src/Utils.cc b/src/Utils.cc
index fd88d51c..0aca8303 100644 --- a/src/Utils.cc +++ b/src/Utils.cc
@@ -118,6 +118,18 @@ utils::getMessageDescription(const TimelineEvent &event, " sent a video clip", utils::descriptiveTime(ts), ts}; + } else if (mpark::holds_alternative<mtx::events::Sticker>(event)) { + const auto msg = mpark::get<mtx::events::Sticker>(event); + QString sender = QString::fromStdString(msg.sender); + + const auto username = Cache::displayName(room_id, sender); + const auto ts = QDateTime::fromMSecsSinceEpoch(msg.origin_server_ts); + + return DescInfo{sender == localUser ? "You" : username, + sender, + " sent a sticker", + utils::descriptiveTime(ts), + ts}; } return DescInfo{}; diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc
index cd1dac67..ce82ebd8 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc
@@ -210,6 +210,20 @@ TimelineItem::TimelineItem(ImageItem *image, addSaveImageAction(image); } +TimelineItem::TimelineItem(StickerItem *image, + const mtx::events::Sticker &event, + bool with_sender, + const QString &room_id, + QWidget *parent) + : QWidget(parent) + , room_id_{room_id} +{ + setupWidgetLayout<mtx::events::Sticker, StickerItem>( + image, event, " sent a sticker", with_sender); + + addSaveImageAction(image); +} + TimelineItem::TimelineItem(FileItem *file, const mtx::events::RoomEvent<mtx::events::msg::File> &event, bool with_sender, diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 679aa173..d7f674d4 100644 --- a/src/timeline/TimelineView.cc +++ b/src/timeline/TimelineView.cc
@@ -281,6 +281,9 @@ TimelineView::parseMessageEvent(const mtx::events::collections::TimelineEvents & } else if (mpark::holds_alternative<mtx::events::RoomEvent<msg::Video>>(event)) { auto video = mpark::get<mtx::events::RoomEvent<msg::Video>>(event); return processMessageEvent<VideoEvent, VideoItem>(video, direction); + } else if (mpark::holds_alternative<mtx::events::Sticker>(event)) { + return processMessageEvent<mtx::events::Sticker, StickerItem>( + mpark::get<mtx::events::Sticker>(event), direction); } return nullptr; diff --git a/src/timeline/widgets/ImageItem.cc b/src/timeline/widgets/ImageItem.cc
index 3aae63c8..03f9741b 100644 --- a/src/timeline/widgets/ImageItem.cc +++ b/src/timeline/widgets/ImageItem.cc
@@ -138,6 +138,11 @@ ImageItem::setImage(const QPixmap &image) void ImageItem::mousePressEvent(QMouseEvent *event) { + if (!isInteractive_) { + event->accept(); + return; + } + if (event->button() != Qt::LeftButton) return; @@ -204,7 +209,7 @@ ImageItem::paintEvent(QPaintEvent *event) painter.drawPath(path); // Bottom text section - if (underMouse()) { + if (isInteractive_ && underMouse()) { const int textBoxHeight = fontHeight / 2 + 6; textRegion_ = QRectF(0, height_ - textBoxHeight, width_, textBoxHeight);