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); onPresenceChanged.add(cachedPresence);
await database?.storePresence(newPresence.senderId, cachedPresence); await database?.storePresence(newPresence.senderId, cachedPresence);
} }
for (final newAccountData in sync.accountData ?? []) { for (final newAccountData in sync.accountData ?? <BasicEvent>[]) {
await database?.storeAccountData( await database?.storeAccountData(
newAccountData.type, newAccountData.type,
jsonEncode(newAccountData.content), newAccountData.content,
); );
accountData[newAccountData.type] = newAccountData; accountData[newAccountData.type] = newAccountData;
// ignore: deprecated_member_use_from_same_package // ignore: deprecated_member_use_from_same_package

View File

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

View File

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

View File

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

View File

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

View File

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