Merge pull request #1985 from famedly/krille/unnecessary-json-serialize-account-data

refactor: Do not unnecessarily serialize and deserialize json for every account data object
This commit is contained in:
Karthikeyan S 2024-12-30 16:34:51 +05:30 committed by GitHub
commit 5e1ff13821
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 22 additions and 13 deletions

View File

@ -2474,10 +2474,10 @@ class Client extends MatrixApi {
onPresenceChanged.add(cachedPresence);
await database?.storePresence(newPresence.senderId, cachedPresence);
}
for (final newAccountData in sync.accountData ?? []) {
for (final newAccountData in sync.accountData ?? <BasicEvent>[]) {
await database?.storeAccountData(
newAccountData.type,
jsonEncode(newAccountData.content),
newAccountData.content,
);
accountData[newAccountData.type] = newAccountData;
// ignore: deprecated_member_use_from_same_package

View File

@ -127,7 +127,7 @@ abstract class DatabaseApi {
String syncFilterId,
);
Future storeAccountData(String type, String content);
Future storeAccountData(String type, Map<String, Object?> content);
Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client);

View File

@ -1073,8 +1073,11 @@ class HiveCollectionsDatabase extends DatabaseApi {
}
@override
Future<void> storeAccountData(String type, String content) async {
await _accountDataBox.put(type, copyMap(jsonDecode(content)));
Future<void> storeAccountData(
String type,
Map<String, Object?> content,
) async {
await _accountDataBox.put(type, copyMap(content));
return;
}

View File

@ -1032,10 +1032,13 @@ class FamedlySdkHiveDatabase extends DatabaseApi with ZoneTransactionMixin {
}
@override
Future<void> storeAccountData(String type, String content) async {
Future<void> storeAccountData(
String type,
Map<String, Object?> content,
) async {
await _accountDataBox.put(
type.toHiveKey,
convertToJson(jsonDecode(content)),
convertToJson(content),
);
return;
}

View File

@ -1036,8 +1036,11 @@ class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage {
}
@override
Future<void> storeAccountData(String type, String content) async {
await _accountDataBox.put(type, jsonDecode(content));
Future<void> storeAccountData(
String type,
Map<String, Object?> content,
) async {
await _accountDataBox.put(type, content);
return;
}

View File

@ -192,11 +192,11 @@ void main() {
await database.getAccountData();
});
test('storeAccountData', () async {
await database.storeAccountData('m.test', '{"foo":"bar"}');
await database.storeAccountData('m.test', {'foo': 'bar'});
final events = await database.getAccountData();
expect(events.values.single.type, 'm.test');
await database.storeAccountData('m.abc+de', '{"foo":"bar"}');
await database.storeAccountData('m.abc+de', {'foo': 'bar'});
final events2 = await database.getAccountData();
expect(
events2.values.any((element) => element.type == 'm.abc+de'),
@ -208,7 +208,7 @@ void main() {
await database.storeAccountData(
'm.huge_data_test',
jsonEncode(hugeDataObject),
hugeDataObject,
);
final events = await database.getAccountData();
@ -694,7 +694,7 @@ void main() {
final database = await getMatrixSdkDatabase(null);
await database.storeAccountData(
'm.test.data',
jsonEncode({'foo': 'bar'}),
{'foo': 'bar'},
);
await database.delete();