Clean up notification code a bit
This commit is contained in:
parent
95026dcc62
commit
e5d75c814b
16 changed files with 204 additions and 474 deletions
161
src/Cache.cpp
161
src/Cache.cpp
|
|
@ -55,9 +55,6 @@ constexpr auto BATCH_SIZE = 100;
|
|||
//! Format: room_id -> RoomInfo
|
||||
constexpr auto ROOMS_DB("rooms");
|
||||
constexpr auto INVITES_DB("invites");
|
||||
//! Keeps already downloaded media for reuse.
|
||||
//! Format: matrix_url -> binary data.
|
||||
constexpr auto MEDIA_DB("media");
|
||||
//! Information that must be kept between sync requests.
|
||||
constexpr auto SYNC_STATE_DB("sync_state");
|
||||
//! Read receipts per room/event.
|
||||
|
|
@ -244,7 +241,6 @@ Cache::setup()
|
|||
syncStateDb_ = lmdb::dbi::open(txn, SYNC_STATE_DB, MDB_CREATE);
|
||||
roomsDb_ = lmdb::dbi::open(txn, ROOMS_DB, MDB_CREATE);
|
||||
invitesDb_ = lmdb::dbi::open(txn, INVITES_DB, MDB_CREATE);
|
||||
mediaDb_ = lmdb::dbi::open(txn, MEDIA_DB, MDB_CREATE);
|
||||
readReceiptsDb_ = lmdb::dbi::open(txn, READ_RECEIPTS_DB, MDB_CREATE);
|
||||
notificationsDb_ = lmdb::dbi::open(txn, NOTIFICATIONS_DB, MDB_CREATE);
|
||||
|
||||
|
|
@ -700,82 +696,6 @@ Cache::secret(const std::string &name)
|
|||
return secret.toStdString();
|
||||
}
|
||||
|
||||
//
|
||||
// Media Management
|
||||
//
|
||||
|
||||
void
|
||||
Cache::saveImage(const std::string &url, const std::string &img_data)
|
||||
{
|
||||
if (url.empty() || img_data.empty())
|
||||
return;
|
||||
|
||||
try {
|
||||
auto txn = lmdb::txn::begin(env_);
|
||||
|
||||
mediaDb_.put(txn, url, img_data);
|
||||
|
||||
txn.commit();
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("saveImage: {}", e.what());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Cache::saveImage(const QString &url, const QByteArray &image)
|
||||
{
|
||||
saveImage(url.toStdString(), std::string(image.constData(), image.length()));
|
||||
}
|
||||
|
||||
QByteArray
|
||||
Cache::image(lmdb::txn &txn, const std::string &url)
|
||||
{
|
||||
if (url.empty())
|
||||
return QByteArray();
|
||||
|
||||
try {
|
||||
std::string_view image;
|
||||
bool res = mediaDb_.get(txn, url, image);
|
||||
|
||||
if (!res)
|
||||
return QByteArray();
|
||||
|
||||
return QByteArray(image.data(), (int)image.size());
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("image: {}, {}", e.what(), url);
|
||||
}
|
||||
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
QByteArray
|
||||
Cache::image(const QString &url)
|
||||
{
|
||||
if (url.isEmpty())
|
||||
return QByteArray();
|
||||
|
||||
auto key = url.toStdString();
|
||||
|
||||
try {
|
||||
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
|
||||
|
||||
std::string_view image;
|
||||
|
||||
bool res = mediaDb_.get(txn, key, image);
|
||||
|
||||
txn.commit();
|
||||
|
||||
if (!res)
|
||||
return QByteArray();
|
||||
|
||||
return QByteArray(image.data(), (int)image.size());
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->critical("image: {} {}", e.what(), url.toStdString());
|
||||
}
|
||||
|
||||
return QByteArray();
|
||||
}
|
||||
|
||||
void
|
||||
Cache::removeInvite(lmdb::txn &txn, const std::string &room_id)
|
||||
{
|
||||
|
|
@ -860,7 +780,6 @@ Cache::deleteData()
|
|||
lmdb::dbi_close(env_, syncStateDb_);
|
||||
lmdb::dbi_close(env_, roomsDb_);
|
||||
lmdb::dbi_close(env_, invitesDb_);
|
||||
lmdb::dbi_close(env_, mediaDb_);
|
||||
lmdb::dbi_close(env_, readReceiptsDb_);
|
||||
lmdb::dbi_close(env_, notificationsDb_);
|
||||
|
||||
|
|
@ -2470,50 +2389,6 @@ Cache::getInviteRoomTopic(lmdb::txn &txn, lmdb::dbi &db)
|
|||
return QString();
|
||||
}
|
||||
|
||||
QImage
|
||||
Cache::getRoomAvatar(const QString &room_id)
|
||||
{
|
||||
return getRoomAvatar(room_id.toStdString());
|
||||
}
|
||||
|
||||
QImage
|
||||
Cache::getRoomAvatar(const std::string &room_id)
|
||||
{
|
||||
auto txn = lmdb::txn::begin(env_, nullptr, MDB_RDONLY);
|
||||
|
||||
std::string_view response;
|
||||
|
||||
if (!roomsDb_.get(txn, room_id, response)) {
|
||||
txn.commit();
|
||||
return QImage();
|
||||
}
|
||||
|
||||
std::string media_url;
|
||||
|
||||
try {
|
||||
RoomInfo info = json::parse(response);
|
||||
media_url = std::move(info.avatar_url);
|
||||
|
||||
if (media_url.empty()) {
|
||||
txn.commit();
|
||||
return QImage();
|
||||
}
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::db()->warn("failed to parse room info: {}, {}",
|
||||
e.what(),
|
||||
std::string(response.data(), response.size()));
|
||||
}
|
||||
|
||||
if (!mediaDb_.get(txn, media_url, response)) {
|
||||
txn.commit();
|
||||
return QImage();
|
||||
}
|
||||
|
||||
txn.commit();
|
||||
|
||||
return QImage::fromData(QByteArray(response.data(), (int)response.size()));
|
||||
}
|
||||
|
||||
std::vector<std::string>
|
||||
Cache::joinedRooms()
|
||||
{
|
||||
|
|
@ -2615,8 +2490,7 @@ Cache::getMembers(const std::string &room_id, std::size_t startIndex, std::size_
|
|||
MemberInfo tmp = json::parse(user_data);
|
||||
members.emplace_back(
|
||||
RoomMember{QString::fromStdString(std::string(user_id)),
|
||||
QString::fromStdString(tmp.name),
|
||||
QImage::fromData(image(txn, tmp.avatar_url))});
|
||||
QString::fromStdString(tmp.name)});
|
||||
} catch (const json::exception &e) {
|
||||
nhlog::db()->warn("{}", e.what());
|
||||
}
|
||||
|
|
@ -4240,18 +4114,6 @@ hasEnoughPowerLevel(const std::vector<mtx::events::EventType> &eventTypes,
|
|||
return instance_->hasEnoughPowerLevel(eventTypes, room_id, user_id);
|
||||
}
|
||||
|
||||
//! Retrieves the saved room avatar.
|
||||
QImage
|
||||
getRoomAvatar(const QString &id)
|
||||
{
|
||||
return instance_->getRoomAvatar(id);
|
||||
}
|
||||
QImage
|
||||
getRoomAvatar(const std::string &id)
|
||||
{
|
||||
return instance_->getRoomAvatar(id);
|
||||
}
|
||||
|
||||
void
|
||||
updateReadReceipt(lmdb::txn &txn, const std::string &room_id, const Receipts &receipts)
|
||||
{
|
||||
|
|
@ -4276,27 +4138,6 @@ lastInvisibleEventAfter(const std::string &room_id, std::string_view event_id)
|
|||
return instance_->lastInvisibleEventAfter(room_id, event_id);
|
||||
}
|
||||
|
||||
QByteArray
|
||||
image(const QString &url)
|
||||
{
|
||||
return instance_->image(url);
|
||||
}
|
||||
QByteArray
|
||||
image(lmdb::txn &txn, const std::string &url)
|
||||
{
|
||||
return instance_->image(txn, url);
|
||||
}
|
||||
void
|
||||
saveImage(const std::string &url, const std::string &data)
|
||||
{
|
||||
instance_->saveImage(url, data);
|
||||
}
|
||||
void
|
||||
saveImage(const QString &url, const QByteArray &data)
|
||||
{
|
||||
instance_->saveImage(url, data);
|
||||
}
|
||||
|
||||
RoomInfo
|
||||
singleRoomInfo(const std::string &room_id)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue