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<QString> receipts;
for (const auto &[event_id, userReceipts] : receiptsEv->content.receipts) {
- for (const auto &[user_id, receipt] : userReceipts.users) {
- (void)receipt;
-
- if (user_id != local_user_id) {
- receipts.push_back(QString::fromStdString(event_id));
- break;
+ 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;
+ }
}
}
}
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:
|