diff --git a/src/Cache.h b/src/Cache.h
index fa8355a5..d5d1729e 100644
--- a/src/Cache.h
+++ b/src/Cache.h
@@ -347,6 +347,18 @@ public:
using UserReceipts = std::multimap<uint64_t, std::string, std::greater<uint64_t>>;
UserReceipts readReceipts(const QString &event_id, const QString &room_id);
+ //! Filter the events that have at least one read receipt.
+ std::vector<QString> filterReadEvents(const QString &room_id,
+ const std::vector<QString> &event_ids,
+ const std::string &excluded_user);
+ //! Add event for which we are expecting some read receipts.
+ void addPendingReceipt(const QString &room_id, const QString &event_id);
+ void removePendingReceipt(lmdb::txn &txn,
+ const std::string &room_id,
+ const std::string &event_id);
+ void notifyForReadReceipts(lmdb::txn &txn, const std::string &room_id);
+ std::vector<QString> pendingReceiptsEvents(lmdb::txn &txn, const std::string &room_id);
+
QByteArray image(const QString &url) const;
QByteArray image(lmdb::txn &txn, const std::string &url) const;
QByteArray image(const std::string &url) const
@@ -421,6 +433,9 @@ public:
OlmSessionStorage session_storage;
+signals:
+ void newReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);
+
private:
//! Save an invited room.
void saveInvite(lmdb::txn &txn,
@@ -582,6 +597,11 @@ private:
}
}
+ lmdb::dbi getPendingReceiptsDb(lmdb::txn &txn)
+ {
+ return lmdb::dbi::open(txn, "pending_receipts", MDB_CREATE);
+ }
+
lmdb::dbi getMessagesDb(lmdb::txn &txn, const std::string &room_id)
{
auto db =
|