mirror of
https://github.com/Nheko-Reborn/nheko.git
synced 2024-11-26 04:58:49 +03:00
parent
947e40bd70
commit
2a19783f99
5 changed files with 37 additions and 16 deletions
|
@ -354,7 +354,7 @@ if(USE_BUNDLED_MTXCLIENT)
|
||||||
FetchContent_Declare(
|
FetchContent_Declare(
|
||||||
MatrixClient
|
MatrixClient
|
||||||
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
GIT_REPOSITORY https://github.com/Nheko-Reborn/mtxclient.git
|
||||||
GIT_TAG d44158e17e8eb872bee762a81fc04bfad117f0c5
|
GIT_TAG f364a5e83db3f1978b6c3d3453accae02c9267c3
|
||||||
)
|
)
|
||||||
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
|
set(BUILD_LIB_EXAMPLES OFF CACHE INTERNAL "")
|
||||||
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
|
set(BUILD_LIB_TESTS OFF CACHE INTERNAL "")
|
||||||
|
|
|
@ -152,7 +152,7 @@
|
||||||
"name": "mtxclient",
|
"name": "mtxclient",
|
||||||
"sources": [
|
"sources": [
|
||||||
{
|
{
|
||||||
"commit": "d44158e17e8eb872bee762a81fc04bfad117f0c5",
|
"commit": "f364a5e83db3f1978b6c3d3453accae02c9267c3",
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
"url": "https://github.com/Nheko-Reborn/mtxclient.git"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1208,10 +1208,11 @@ Cache::saveState(const mtx::responses::Sync &res)
|
||||||
for (const auto &ev : res.account_data.events)
|
for (const auto &ev : res.account_data.events)
|
||||||
std::visit(
|
std::visit(
|
||||||
[&txn, &accountDataDb](const auto &event) {
|
[&txn, &accountDataDb](const auto &event) {
|
||||||
|
auto j = json(event);
|
||||||
lmdb::dbi_put(txn,
|
lmdb::dbi_put(txn,
|
||||||
accountDataDb,
|
accountDataDb,
|
||||||
lmdb::val(to_string(event.type)),
|
lmdb::val(j["type"].get<std::string>()),
|
||||||
lmdb::val(json(event).dump()));
|
lmdb::val(j.dump()));
|
||||||
},
|
},
|
||||||
ev);
|
ev);
|
||||||
}
|
}
|
||||||
|
@ -1242,10 +1243,11 @@ Cache::saveState(const mtx::responses::Sync &res)
|
||||||
for (const auto &evt : room.second.account_data.events) {
|
for (const auto &evt : room.second.account_data.events) {
|
||||||
std::visit(
|
std::visit(
|
||||||
[&txn, &accountDataDb](const auto &event) {
|
[&txn, &accountDataDb](const auto &event) {
|
||||||
|
auto j = json(event);
|
||||||
lmdb::dbi_put(txn,
|
lmdb::dbi_put(txn,
|
||||||
accountDataDb,
|
accountDataDb,
|
||||||
lmdb::val(to_string(event.type)),
|
lmdb::val(j["type"].get<std::string>()),
|
||||||
lmdb::val(json(event).dump()));
|
lmdb::val(j.dump()));
|
||||||
},
|
},
|
||||||
evt);
|
evt);
|
||||||
|
|
||||||
|
@ -1391,10 +1393,11 @@ Cache::saveInvite(lmdb::txn &txn,
|
||||||
} else {
|
} else {
|
||||||
std::visit(
|
std::visit(
|
||||||
[&txn, &statesdb](auto msg) {
|
[&txn, &statesdb](auto msg) {
|
||||||
|
auto j = json(msg);
|
||||||
bool res = lmdb::dbi_put(txn,
|
bool res = lmdb::dbi_put(txn,
|
||||||
statesdb,
|
statesdb,
|
||||||
lmdb::val(to_string(msg.type)),
|
lmdb::val(j["type"].get<std::string>()),
|
||||||
lmdb::val(json(msg).dump()));
|
lmdb::val(j.dump()));
|
||||||
|
|
||||||
if (!res)
|
if (!res)
|
||||||
nhlog::db()->warn("couldn't save data: {}",
|
nhlog::db()->warn("couldn't save data: {}",
|
||||||
|
|
|
@ -67,11 +67,25 @@ EventStore::EventStore(std::string room_id, QObject *)
|
||||||
if (newFirst == first)
|
if (newFirst == first)
|
||||||
fetchMore();
|
fetchMore();
|
||||||
else {
|
else {
|
||||||
|
if (this->last != std::numeric_limits<uint64_t>::max()) {
|
||||||
emit beginInsertRows(toExternalIdx(newFirst),
|
emit beginInsertRows(toExternalIdx(newFirst),
|
||||||
toExternalIdx(this->first - 1));
|
toExternalIdx(this->first - 1));
|
||||||
this->first = newFirst;
|
this->first = newFirst;
|
||||||
emit endInsertRows();
|
emit endInsertRows();
|
||||||
emit fetchedMore();
|
emit fetchedMore();
|
||||||
|
} else {
|
||||||
|
auto range = cache::client()->getTimelineRange(room_id_);
|
||||||
|
|
||||||
|
if (range && range->last - range->first != 0) {
|
||||||
|
emit beginInsertRows(0, int(range->last - range->first));
|
||||||
|
this->first = range->first;
|
||||||
|
this->last = range->last;
|
||||||
|
emit endInsertRows();
|
||||||
|
emit fetchedMore();
|
||||||
|
} else {
|
||||||
|
fetchMore();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Qt::QueuedConnection);
|
Qt::QueuedConnection);
|
||||||
|
@ -247,15 +261,19 @@ EventStore::handleSync(const mtx::responses::Timeline &events)
|
||||||
nhlog::db()->warn("{} called from a different thread!", __func__);
|
nhlog::db()->warn("{} called from a different thread!", __func__);
|
||||||
|
|
||||||
auto range = cache::client()->getTimelineRange(room_id_);
|
auto range = cache::client()->getTimelineRange(room_id_);
|
||||||
if (!range)
|
if (!range) {
|
||||||
|
emit beginResetModel();
|
||||||
|
this->first = std::numeric_limits<uint64_t>::max();
|
||||||
|
this->last = std::numeric_limits<uint64_t>::max();
|
||||||
|
emit endResetModel();
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (events.limited) {
|
if (events.limited) {
|
||||||
emit beginResetModel();
|
emit beginResetModel();
|
||||||
this->last = range->last;
|
this->last = range->last;
|
||||||
this->first = range->first;
|
this->first = range->first;
|
||||||
emit endResetModel();
|
emit endResetModel();
|
||||||
|
|
||||||
} else if (range->last > this->last) {
|
} else if (range->last > this->last) {
|
||||||
emit beginInsertRows(toExternalIdx(this->last + 1), toExternalIdx(range->last));
|
emit beginInsertRows(toExternalIdx(this->last + 1), toExternalIdx(range->last));
|
||||||
this->last = range->last;
|
this->last = range->last;
|
||||||
|
|
|
@ -74,7 +74,7 @@ public:
|
||||||
|
|
||||||
int size() const
|
int size() const
|
||||||
{
|
{
|
||||||
return last != std::numeric_limits<uint64_t>::max()
|
return (last != std::numeric_limits<uint64_t>::max() && last >= first)
|
||||||
? static_cast<int>(last - first) + 1
|
? static_cast<int>(last - first) + 1
|
||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue