2 files changed, 19 insertions, 5 deletions
diff --git a/src/Cache.cpp b/src/Cache.cpp
index 016ba371..8cfc4b55 100644
--- a/src/Cache.cpp
+++ b/src/Cache.cpp
@@ -960,9 +960,15 @@ Cache::saveState(const mtx::responses::Sync &res)
for (const auto &room : res.rooms.join) {
if (!room.second.ephemeral.receipts.empty()) {
std::vector<QString> receipts;
- for (const auto &receipt : room.second.ephemeral.receipts)
- if (receipt.first != user_id)
- receipts.push_back(QString::fromStdString(receipt.first));
+ for (const auto &receipt : room.second.ephemeral.receipts) {
+ for (const auto &receiptUsersTs : receipt.second) {
+ if (receiptUsersTs.first != user_id) {
+ receipts.push_back(
+ QString::fromStdString(receipt.first));
+ break;
+ }
+ }
+ }
if (!receipts.empty())
emit newReadReceipts(QString::fromStdString(room.first), receipts);
}
diff --git a/src/timeline/TimelineModel.cpp b/src/timeline/TimelineModel.cpp
index 1c0abd17..df2051e6 100644
--- a/src/timeline/TimelineModel.cpp
+++ b/src/timeline/TimelineModel.cpp
@@ -321,16 +321,24 @@ TimelineModel::data(const QString &id, int role) const
}
case Id:
return id;
- case State:
+ case State: {
+ auto containsOthers = [](const auto &vec) {
+ for (const auto &e : vec)
+ if (e.second != http::client()->user_id().to_string())
+ return true;
+ return false;
+ };
+
// only show read receipts for messages not from us
if (acc::sender(event) != http::client()->user_id().to_string())
return qml_mtx_events::Empty;
else if (pending.contains(id))
return qml_mtx_events::Sent;
- else if (read.contains(id) || cache::readReceipts(id, room_id_).size() > 1)
+ else if (read.contains(id) || containsOthers(cache::readReceipts(id, room_id_)))
return qml_mtx_events::Read;
else
return qml_mtx_events::Received;
+ }
case IsEncrypted: {
return std::holds_alternative<
mtx::events::EncryptedEvent<mtx::events::msg::Encrypted>>(events[id]);
|