mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-26 13:08:48 +03:00
Cache user mentions
This commit is contained in:
parent
eb2f444c37
commit
dbdaf35907
3 changed files with 69 additions and 2 deletions
4
deps/CMakeLists.txt
vendored
4
deps/CMakeLists.txt
vendored
|
@ -46,10 +46,10 @@ set(BOOST_SHA256
|
||||||
|
|
||||||
set(
|
set(
|
||||||
MTXCLIENT_URL
|
MTXCLIENT_URL
|
||||||
https://github.com/Nheko-Reborn/mtxclient/archive/37df82363c800b8d6b2b172a486e395e4132e061.tar.gz
|
https://github.com/Nheko-Reborn/mtxclient/archive/b56083dfa95848c39d9290efdc5544ac07030028.tar.gz
|
||||||
)
|
)
|
||||||
set(MTXCLIENT_HASH
|
set(MTXCLIENT_HASH
|
||||||
b29dd0bc836b69bd4253499519b8396a210bba43750fb66f4ffb8453510c8dd1)
|
486feb1ee9ad5fe2295fa27baaa6c67c9d90cece2435eed19be2630d59552e20)
|
||||||
set(
|
set(
|
||||||
TWEENY_URL
|
TWEENY_URL
|
||||||
https://github.com/mobius3/tweeny/archive/b94ce07cfb02a0eb8ac8aaf66137dabdaea857cf.tar.gz
|
https://github.com/mobius3/tweeny/archive/b94ce07cfb02a0eb8ac8aaf66137dabdaea857cf.tar.gz
|
||||||
|
|
|
@ -1934,6 +1934,61 @@ Cache::saveTimelineMessages(lmdb::txn &txn,
|
||||||
lmdb::val(obj.dump()));
|
lmdb::val(obj.dump()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mtx::responses::Notifications
|
||||||
|
Cache::getTimelineMentions(lmdb::txn &txn, const std::string &room_id)
|
||||||
|
{
|
||||||
|
auto db = getMentionsDb(txn, room_id);
|
||||||
|
|
||||||
|
mtx::responses::Notifications notif;
|
||||||
|
std::string event_id, msg;
|
||||||
|
|
||||||
|
auto cursor = lmdb::cursor::open(txn, db);
|
||||||
|
|
||||||
|
while (cursor.get(event_id, msg, MDB_NEXT)) {
|
||||||
|
auto obj = json::parse(msg);
|
||||||
|
|
||||||
|
if (obj.count("event") == 0 || obj.count("token") == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
mtx::responses::Notification notification;
|
||||||
|
mtx::responses::from_json(obj.at("notification"), notification);
|
||||||
|
|
||||||
|
notif.notifications.push_back(notification);
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
|
||||||
|
std::reverse(notif.notifications.begin(), notif.notifications.end());
|
||||||
|
|
||||||
|
return notif;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
Cache::saveTimelineMentions(lmdb::txn &txn,
|
||||||
|
const std::string &room_id,
|
||||||
|
const mtx::responses::Notifications &res)
|
||||||
|
{
|
||||||
|
auto db = getMentionsDb(txn, room_id);
|
||||||
|
|
||||||
|
using namespace mtx::events;
|
||||||
|
using namespace mtx::events::state;
|
||||||
|
|
||||||
|
for (const auto &n : res.notifications) {
|
||||||
|
|
||||||
|
const auto event_id = utils::event_id(n.event);
|
||||||
|
|
||||||
|
// double check that we have the correct room_id...
|
||||||
|
if (room_id.compare(n.room_id) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
json obj = json::object();
|
||||||
|
|
||||||
|
lmdb::dbi_put(txn,
|
||||||
|
db,
|
||||||
|
lmdb::val(event_id),
|
||||||
|
lmdb::val(obj.dump()));
|
||||||
|
}
|
||||||
|
|
||||||
|
txn.commit();
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Cache::markSentNotification(const std::string &event_id)
|
Cache::markSentNotification(const std::string &event_id)
|
||||||
|
|
12
src/Cache.h
12
src/Cache.h
|
@ -402,6 +402,13 @@ public:
|
||||||
//! Check if we have sent a desktop notification for the given event id.
|
//! Check if we have sent a desktop notification for the given event id.
|
||||||
bool isNotificationSent(const std::string &event_id);
|
bool isNotificationSent(const std::string &event_id);
|
||||||
|
|
||||||
|
//! Add a notification containing a user mention to the db.
|
||||||
|
void saveTimelineMentions(lmdb::txn &txn,
|
||||||
|
const std::string &room_id,
|
||||||
|
const mtx::responses::Notifications &res);
|
||||||
|
//! Get timeline items that a user was mentions in
|
||||||
|
mtx::responses::Notifications getTimelineMentions(lmdb::txn &txn, const std::string &room_id);
|
||||||
|
|
||||||
//! Remove old unused data.
|
//! Remove old unused data.
|
||||||
void deleteOldMessages();
|
void deleteOldMessages();
|
||||||
void deleteOldData() noexcept;
|
void deleteOldData() noexcept;
|
||||||
|
@ -660,6 +667,11 @@ private:
|
||||||
return lmdb::dbi::open(txn, std::string(room_id + "/members").c_str(), MDB_CREATE);
|
return lmdb::dbi::open(txn, std::string(room_id + "/members").c_str(), MDB_CREATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lmdb::dbi getMentionsDb(lmdb::txn &txn, const std::string &room_id)
|
||||||
|
{
|
||||||
|
return lmdb::dbi::open(txn, std::string(room_id + "/mentions").c_str(), MDB_CREATE);
|
||||||
|
}
|
||||||
|
|
||||||
//! Retrieves or creates the database that stores the open OLM sessions between our device
|
//! Retrieves or creates the database that stores the open OLM sessions between our device
|
||||||
//! and the given curve25519 key which represents another device.
|
//! and the given curve25519 key which represents another device.
|
||||||
//!
|
//!
|
||||||
|
|
Loading…
Reference in a new issue