summary refs log tree commit diff
path: root/src/ChatPage.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-03 18:05:49 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-01-03 18:06:29 +0200
commiteaf05748ff1fc2b1ced8fdb329661ff20d6b7b85 (patch)
tree4d2f190f9662581f7ff8a1e95b146ba225e0a8a6 /src/ChatPage.cc
parentAdd Alpine Linux installation instructions (#191) (diff)
downloadnheko-eaf05748ff1fc2b1ced8fdb329661ff20d6b7b85.tar.xz
Initial support for read receipts
Diffstat (limited to 'src/ChatPage.cc')
-rw-r--r--src/ChatPage.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ChatPage.cc b/src/ChatPage.cc

index 071fef71..3958e2c2 100644 --- a/src/ChatPage.cc +++ b/src/ChatPage.cc
@@ -39,11 +39,14 @@ #include "UserInfoWidget.h" #include "UserSettingsPage.h" +#include "dialogs/ReadReceipts.h" #include "timeline/TimelineViewManager.h" constexpr int MAX_INITIAL_SYNC_FAILURES = 5; constexpr int SYNC_RETRY_TIMEOUT = 10000; +ChatPage *ChatPage::instance_ = nullptr; + ChatPage::ChatPage(QSharedPointer<MatrixClient> client, QSharedPointer<UserSettings> userSettings, QWidget *parent) @@ -302,6 +305,8 @@ ChatPage::ChatPage(QSharedPointer<MatrixClient> client, }); AvatarProvider::init(client); + + instance_ = this; } void @@ -734,6 +739,12 @@ ChatPage::updateJoinedRooms(const std::map<std::string, mtx::responses::JoinedRo updateTypingUsers(roomid, it->second.ephemeral.typing); + if (it->second.ephemeral.receipts.size() > 0) + QtConcurrent::run(cache_.data(), + &Cache::updateReadReceipt, + it->first, + it->second.ephemeral.receipts); + const auto newStateEvents = it->second.state; const auto newTimelineEvents = it->second.timeline; @@ -809,4 +820,25 @@ ChatPage::generateMembershipDifference( return stateDiff; } +void +ChatPage::showReadReceipts(const QString &event_id) +{ + if (receiptsDialog_.isNull()) { + receiptsDialog_ = QSharedPointer<dialogs::ReadReceipts>( + new dialogs::ReadReceipts(this), + [=](dialogs::ReadReceipts *dialog) { dialog->deleteLater(); }); + } + + if (receiptsModal_.isNull()) { + receiptsModal_ = QSharedPointer<OverlayModal>( + new OverlayModal(MainWindow::instance(), receiptsDialog_.data()), + [=](OverlayModal *modal) { modal->deleteLater(); }); + receiptsModal_->setDuration(0); + receiptsModal_->setColor(QColor(30, 30, 30, 170)); + } + + receiptsDialog_->addUsers(cache_->readReceipts(event_id, current_room_)); + receiptsModal_->fadeIn(); +} + ChatPage::~ChatPage() {}