From 6e1fec1e635039a7060c369ca03e0f970f9e449c Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Tue, 14 Jun 2022 00:35:28 +0200 Subject: [PATCH] Update hidden read receipts MSC --- CMakeLists.txt | 2 +- io.github.NhekoReborn.Nheko.yaml | 2 +- src/Cache.cpp | 26 +++++++++++++++++++------- src/UserSettingsPage.cpp | 4 +++- 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88a4bde1..a6af90d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -576,7 +576,7 @@ if(USE_BUNDLED_MTXCLIENT) FetchContent_Declare( MatrixClient GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git - GIT_TAG 754800d226f71864d8b6925e47542d509333e998 + GIT_TAG a6ca9714490ad0bb0c032e00be4f7d7ebd683378 ) set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "") set(BUILD_LIB_TESTS OFF CACHE INTERNAL "") diff --git a/io.github.NhekoReborn.Nheko.yaml b/io.github.NhekoReborn.Nheko.yaml index 44350c6d..3d488000 100644 --- a/io.github.NhekoReborn.Nheko.yaml +++ b/io.github.NhekoReborn.Nheko.yaml @@ -203,7 +203,7 @@ modules: buildsystem: cmake-ninja name: mtxclient sources: - - commit: 754800d226f71864d8b6925e47542d509333e998 + - commit: a6ca9714490ad0bb0c032e00be4f7d7ebd683378 #tag: v0.7.0 type: git url: https://github.com/Nheko-Reborn/mtxclient.git diff --git a/src/Cache.cpp b/src/Cache.cpp index c651b61b..90c04e61 100644 --- a/src/Cache.cpp +++ b/src/Cache.cpp @@ -1728,8 +1728,17 @@ Cache::saveState(const mtx::responses::Sync &res) Receipts receipts; for (const auto &[event_id, userReceipts] : receiptsEv->content.receipts) { - for (const auto &[user_id, receipt] : userReceipts.users) { - receipts[event_id][user_id] = receipt.ts; + if (auto r = userReceipts.find(mtx::events::ephemeral::Receipt::Read); + r != userReceipts.end()) { + for (const auto &[user_id, receipt] : r->second.users) { + receipts[event_id][user_id] = receipt.ts; + } + } + if (userReceipts.count(mtx::events::ephemeral::Receipt::ReadPrivate)) { + auto ts = userReceipts.at(mtx::events::ephemeral::Receipt::ReadPrivate) + .users.at(local_user_id); + if (ts.ts != 0) + receipts[event_id][local_user_id] = ts.ts; } } updateReadReceipt(txn, room.first, receipts); @@ -1761,12 +1770,15 @@ Cache::saveState(const mtx::responses::Sync &res) std::vector receipts; for (const auto &[event_id, userReceipts] : receiptsEv->content.receipts) { - for (const auto &[user_id, receipt] : userReceipts.users) { - (void)receipt; + if (auto r = userReceipts.find(mtx::events::ephemeral::Receipt::Read); + r != userReceipts.end()) { + for (const auto &[user_id, receipt] : r->second.users) { + (void)receipt; - if (user_id != local_user_id) { - receipts.push_back(QString::fromStdString(event_id)); - break; + if (user_id != local_user_id) { + receipts.push_back(QString::fromStdString(event_id)); + break; + } } } } diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 932c3beb..025d6681 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -1172,7 +1172,9 @@ UserSettingsModel::data(const QModelIndex &index, int role) const "Show buttons to quickly reply, react or access additional options next to each " "message."); case ReadReceipts: - return tr("Show if your message was read.\nStatus is displayed next to timestamps."); + return tr( + "Show if your message was read.\nStatus is displayed next to timestamps.\nWarning: " + "If your homeserver does not support this, your rooms will never be marked as read!"); case DesktopNotifications: return tr("Notify about received messages when the client is not currently focused."); case AlertOnNotification: