Fetch missing events

This commit is contained in:
Nicolas Werner 2020-07-10 01:37:55 +02:00
parent 530c531c4b
commit 3421728898
5 changed files with 52 additions and 23 deletions

View file

@ -5,6 +5,7 @@
#include "Cache_p.h"
#include "EventAccessors.h"
#include "Logging.h"
#include "MatrixClient.h"
#include "Olm.h"
QCache<EventStore::IdIndex, mtx::events::collections::TimelineEvents> EventStore::decryptedEvents_{
@ -22,6 +23,23 @@ EventStore::EventStore(std::string room_id, QObject *)
this->first = range->first;
this->last = range->last;
}
connect(
this,
&EventStore::eventFetched,
this,
[this](std::string id,
std::string relatedTo,
mtx::events::collections::TimelineEvents timeline) {
cache::client()->storeEvent(room_id_, id, {timeline});
if (!relatedTo.empty()) {
auto idx = idToIndex(id);
if (idx)
emit dataChanged(*idx, *idx);
}
},
Qt::QueuedConnection);
}
void
@ -241,8 +259,23 @@ EventStore::event(std::string_view id, std::string_view related_to, bool decrypt
if (!event_ptr) {
auto event = cache::client()->getEvent(room_id_, index.id);
if (!event) {
// fetch
(void)related_to;
http::client()->get_event(
room_id_,
index.id,
[this,
relatedTo = std::string(related_to.data(), related_to.size()),
id = index.id](const mtx::events::collections::TimelineEvents &timeline,
mtx::http::RequestErr err) {
if (err) {
nhlog::net()->error(
"Failed to retrieve event with id {}, which was "
"requested to show the replyTo for event {}",
relatedTo,
id);
return;
}
emit eventFetched(id, relatedTo, timeline);
});
return nullptr;
}
event_ptr = new mtx::events::collections::TimelineEvents(std::move(event->data));