refactor: Store fetched presence in db and deprecate own cache
This commit is contained in:
parent
109711df4b
commit
06669cbcac
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue