fix: also lazy load members for archive

This should speed up loading the archived rooms. One of the reasons it
was so slow, is because we were loading all room members!

Additionally this may work around a bug in Synapse, where rooms stuck in
their partial state may block sync indefinitely.

Relates to https://github.com/famedly/product-management/issues/2250
This commit is contained in:
Nicolas Werner 2024-09-12 14:36:47 +02:00
parent 804832e951
commit b839273ce0
No known key found for this signature in database
GPG Key ID: B38119FF80087618
2 changed files with 11 additions and 2 deletions

View File

@ -1972,7 +1972,7 @@ class FakeMatrixApi extends BaseClient {
] ]
} }
}, },
'/client/v3/sync?filter=%7B%22room%22%3A%7B%22include_leave%22%3Atrue%2C%22timeline%22%3A%7B%22limit%22%3A10%7D%7D%7D&timeout=0': '/client/v3/sync?filter=%7B%22room%22%3A%7B%22include_leave%22%3Atrue%2C%22state%22%3A%7B%22lazy_load_members%22%3Atrue%7D%2C%22timeline%22%3A%7B%22limit%22%3A10%7D%7D%7D&timeout=0':
(var req) => archiveSyncResponse, (var req) => archiveSyncResponse,
'/client/v3/sync?filter=1234&timeout=0': (var req) => syncResponse, '/client/v3/sync?filter=1234&timeout=0': (var req) => syncResponse,
'/client/v3/sync?filter=1234&since=1234&full_state=false&set_presence=unavailable&timeout=15': '/client/v3/sync?filter=1234&since=1234&full_state=false&set_presence=unavailable&timeout=15':

View File

@ -1109,8 +1109,17 @@ class Client extends MatrixApi {
/// [ArchivedRoom] objects containing the [Room] and the associated [Timeline]. /// [ArchivedRoom] objects containing the [Room] and the associated [Timeline].
Future<List<ArchivedRoom>> loadArchiveWithTimeline() async { Future<List<ArchivedRoom>> loadArchiveWithTimeline() async {
_archivedRooms.clear(); _archivedRooms.clear();
final filter = jsonEncode(Filter(
room: RoomFilter(
state: StateFilter(lazyLoadMembers: true),
includeLeave: true,
timeline: StateFilter(limit: 10),
),
).toJson());
final syncResp = await sync( final syncResp = await sync(
filter: '{"room":{"include_leave":true,"timeline":{"limit":10}}}', filter: filter,
timeout: _archiveCacheBusterTimeout, timeout: _archiveCacheBusterTimeout,
setPresence: syncPresence, setPresence: syncPresence,
); );