refactor: Store fetched presence in db and deprecate own cache

This commit is contained in:
Krille 2023-11-27 15:48:21 +01:00
parent 109711df4b
commit 06669cbcac
No known key found for this signature in database
2 changed files with 12 additions and 2 deletions

View File

@ -304,6 +304,7 @@ class Client extends MatrixApi {
} }
/// Presences of users by a given matrix ID /// Presences of users by a given matrix ID
@Deprecated('Use `fetchCurrentPresence(userId)` instead.')
Map<String, CachedPresence> presences = {}; Map<String, CachedPresence> presences = {};
int _transactionCounter = 0; int _transactionCounter = 0;
@ -1570,6 +1571,7 @@ class Client extends MatrixApi {
_accountData = data; _accountData = data;
_updatePushrules(); _updatePushrules();
}); });
// ignore: deprecated_member_use_from_same_package
presences.clear(); presences.clear();
if (waitUntilLoadCompletedLoaded) { if (waitUntilLoadCompletedLoaded) {
await userDeviceKeysLoading; await userDeviceKeysLoading;
@ -1794,6 +1796,7 @@ class Client extends MatrixApi {
} }
for (final newPresence in sync.presence ?? <Presence>[]) { for (final newPresence in sync.presence ?? <Presence>[]) {
final cachedPresence = CachedPresence.fromMatrixEvent(newPresence); final cachedPresence = CachedPresence.fromMatrixEvent(newPresence);
// ignore: deprecated_member_use_from_same_package
presences[newPresence.senderId] = cachedPresence; presences[newPresence.senderId] = cachedPresence;
// ignore: deprecated_member_use_from_same_package // ignore: deprecated_member_use_from_same_package
onPresence.add(newPresence); onPresence.add(newPresence);
@ -2929,17 +2932,22 @@ class Client extends MatrixApi {
/// The newest presence of this user if there is any. Fetches it from the /// The newest presence of this user if there is any. Fetches it from the
/// database first and then from the server if necessary or returns offline. /// database first and then from the server if necessary or returns offline.
Future<CachedPresence> fetchCurrentPresence(String userId) async { Future<CachedPresence> fetchCurrentPresence(String userId) async {
// ignore: deprecated_member_use_from_same_package
final cachedPresence = presences[userId]; final cachedPresence = presences[userId];
if (cachedPresence != null) { if (cachedPresence != null) {
return cachedPresence; return cachedPresence;
} }
final dbPresence = await database?.getPresence(userId); final dbPresence = await database?.getPresence(userId);
// ignore: deprecated_member_use_from_same_package
if (dbPresence != null) return presences[userId] = dbPresence; if (dbPresence != null) return presences[userId] = dbPresence;
try { try {
final newPresence = await getPresence(userId); final result = await getPresence(userId);
return CachedPresence.fromPresenceResponse(newPresence, userId); final presence = CachedPresence.fromPresenceResponse(result, userId);
await database?.storePresence(userId, presence);
// ignore: deprecated_member_use_from_same_package
return presences[userId] = presence;
} catch (e) { } catch (e) {
return CachedPresence.neverSeen(userId); return CachedPresence.neverSeen(userId);
} }

View File

@ -123,6 +123,7 @@ void main() {
'!726s6s6q:example.com'); '!726s6s6q:example.com');
expect(matrix.rooms[1].directChatMatrixID, '@bob:example.com'); expect(matrix.rooms[1].directChatMatrixID, '@bob:example.com');
expect(matrix.directChats, matrix.accountData['m.direct']?.content); expect(matrix.directChats, matrix.accountData['m.direct']?.content);
// ignore: deprecated_member_use_from_same_package
expect(matrix.presences.length, 1); expect(matrix.presences.length, 1);
expect(matrix.rooms[1].ephemerals.length, 2); expect(matrix.rooms[1].ephemerals.length, 2);
expect(matrix.rooms[1].typingUsers.length, 1); expect(matrix.rooms[1].typingUsers.length, 1);
@ -147,6 +148,7 @@ void main() {
expect(matrix.rooms.length, 2); expect(matrix.rooms.length, 2);
expect(matrix.rooms[1].canonicalAlias, expect(matrix.rooms[1].canonicalAlias,
"#famedlyContactDiscovery:${matrix.userID!.split(":")[1]}"); "#famedlyContactDiscovery:${matrix.userID!.split(":")[1]}");
// ignore: deprecated_member_use_from_same_package
expect(matrix.presences['@alice:example.com']?.presence, expect(matrix.presences['@alice:example.com']?.presence,
PresenceType.online); PresenceType.online);
expect(presenceCounter, 1); expect(presenceCounter, 1);