[Timeline] Add get event by id method
This commit is contained in:
parent
fd0f7ab3ea
commit
7cc64497a5
|
@ -758,13 +758,8 @@ class Room {
|
|||
return user;
|
||||
}
|
||||
|
||||
/// Searches for the event in the store. If it isn't found, try to request it
|
||||
/// from the server. Returns null if not found.
|
||||
/// Searches for the event on the server. Returns null if not found.
|
||||
Future<Event> getEventById(String eventID) async {
|
||||
if (client.store != null) {
|
||||
final Event storeEvent = await client.store.getEventById(eventID, this);
|
||||
if (storeEvent != null) return storeEvent;
|
||||
}
|
||||
final dynamic resp = await client.connection.jsonRequest(
|
||||
type: HTTPType.GET, action: "/client/r0/rooms/$id/event/$eventID");
|
||||
if (resp is ErrorResponse) return null;
|
||||
|
|
|
@ -44,6 +44,22 @@ class Timeline {
|
|||
StreamSubscription<EventUpdate> sub;
|
||||
bool _requestingHistoryLock = false;
|
||||
|
||||
Map<String, Event> _eventCache = {};
|
||||
|
||||
/// Searches for the event in this timeline. If not
|
||||
/// found, requests from the server. Requested events
|
||||
/// are cached.
|
||||
Future<Event> getEventById(String id) async {
|
||||
for (int i = 0; i < events.length; i++) {
|
||||
if (events[i].eventId == id) return events[i];
|
||||
}
|
||||
if (_eventCache.containsKey(id)) return _eventCache[id];
|
||||
final Event requestedEvent = await room.getEventById(id);
|
||||
if (requestedEvent == null) return null;
|
||||
_eventCache[id] = requestedEvent;
|
||||
return _eventCache[id];
|
||||
}
|
||||
|
||||
Future<void> requestHistory(
|
||||
{int historyCount = Room.DefaultHistoryCount}) async {
|
||||
if (!_requestingHistoryLock) {
|
||||
|
|
Loading…
Reference in a new issue