Fetch missing events
This commit is contained in:
parent
530c531c4b
commit
3421728898
5 changed files with 52 additions and 23 deletions
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue