From eaf05748ff1fc2b1ced8fdb329661ff20d6b7b85 Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Wed, 3 Jan 2018 18:05:49 +0200 Subject: Initial support for read receipts --- include/Cache.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) (limited to 'include/Cache.h') diff --git a/include/Cache.h b/include/Cache.h index 1f6c59f0..ae58e418 100644 --- a/include/Cache.h +++ b/include/Cache.h @@ -18,11 +18,52 @@ #pragma once #include +#include #include #include class RoomState; +//! Used to uniquely identify a list of read receipts. +struct ReadReceiptKey +{ + std::string event_id; + std::string room_id; +}; + +inline void +to_json(json &j, const ReadReceiptKey &key) +{ + j = json{{"event_id", key.event_id}, {"room_id", key.room_id}}; +} + +inline void +from_json(const json &j, ReadReceiptKey &key) +{ + key.event_id = j.at("event_id").get(); + key.room_id = j.at("room_id").get(); +} + +//! Decribes a read receipt stored in cache. +struct ReadReceiptValue +{ + std::string user_id; + uint64_t ts; +}; + +inline void +to_json(json &j, const ReadReceiptValue &value) +{ + j = json{{"user_id", value.user_id}, {"ts", value.ts}}; +} + +inline void +from_json(const json &j, ReadReceiptValue &value) +{ + value.user_id = j.at("user_id").get(); + value.ts = j.at("ts").get(); +} + class Cache { public: @@ -48,6 +89,19 @@ public: bool isFormatValid(); void setCurrentFormat(); + //! Adds a user to the read list for the given event. + //! + //! There should be only one user id present in a receipt list per room. + //! The user id should be removed from any other lists. + using Receipts = std::map>; + void updateReadReceipt(const std::string &room_id, const Receipts &receipts); + + //! Retrieve all the read receipts for the given event id and room. + //! + //! Returns a map of user ids and the time of the read receipt in milliseconds. + using UserReceipts = std::multimap; + UserReceipts readReceipts(const QString &event_id, const QString &room_id); + QByteArray image(const QString &url) const; void saveImage(const QString &url, const QByteArray &data); @@ -60,6 +114,7 @@ private: lmdb::dbi roomDb_; lmdb::dbi invitesDb_; lmdb::dbi imagesDb_; + lmdb::dbi readReceiptsDb_; bool isMounted_; -- cgit 1.5.1