refactor: remove unused clientId

This commit is contained in:
Jayesh Nirve 2021-09-23 22:44:50 +05:30 committed by Lukas Lihotzki
parent 42434761e8
commit 77ca7523d0
15 changed files with 255 additions and 340 deletions

View File

@ -220,10 +220,7 @@ class Encryption {
// line *could* throw an error. As that is a future, though, and we call // line *could* throw an error. As that is a future, though, and we call
// it un-awaited here, nothing happens, which is exactly the result we want // it un-awaited here, nothing happens, which is exactly the result we want
client.database?.updateInboundGroupSessionIndexes( client.database?.updateInboundGroupSessionIndexes(
json.encode(inboundGroupSession.indexes), json.encode(inboundGroupSession.indexes), roomId, sessionId);
client.id,
roomId,
sessionId);
} }
decryptedPayload = json.decode(decryptResult.plaintext); decryptedPayload = json.decode(decryptResult.plaintext);
} catch (exception) { } catch (exception) {
@ -301,7 +298,6 @@ class Encryption {
event.room?.setState(event); event.room?.setState(event);
} }
await client.database?.storeEventUpdate( await client.database?.storeEventUpdate(
client.id,
EventUpdate( EventUpdate(
content: event.toJson(), content: event.toJson(),
roomID: event.roomId, roomID: event.roomId,

View File

@ -149,7 +149,6 @@ class KeyManager {
} }
client.database client.database
?.storeInboundGroupSession( ?.storeInboundGroupSession(
client.id,
roomId, roomId,
sessionId, sessionId,
inboundGroupSession.pickle(client.userID), inboundGroupSession.pickle(client.userID),
@ -164,8 +163,7 @@ class KeyManager {
return; return;
} }
if (uploaded) { if (uploaded) {
client.database client.database.markInboundGroupSessionAsUploaded(roomId, sessionId);
.markInboundGroupSessionAsUploaded(client.id, roomId, sessionId);
} else { } else {
_haveKeysToUpload = true; _haveKeysToUpload = true;
} }
@ -238,8 +236,8 @@ class KeyManager {
} }
return sess; // nothing to do return sess; // nothing to do
} }
final session = await client.database final session =
?.getInboundGroupSession(client.id, roomId, sessionId); await client.database?.getInboundGroupSession(roomId, sessionId);
if (session == null) { if (session == null) {
return null; return null;
} }
@ -382,7 +380,6 @@ class KeyManager {
if (client.database != null) { if (client.database != null) {
await client.database.updateInboundGroupSessionAllowedAtIndex( await client.database.updateInboundGroupSessionAllowedAtIndex(
json.encode(inboundSess.allowedAtIndex), json.encode(inboundSess.allowedAtIndex),
client.id,
room.id, room.id,
sess.outboundGroupSession.session_id()); sess.outboundGroupSession.session_id());
} }
@ -401,7 +398,7 @@ class KeyManager {
} }
sess.dispose(); sess.dispose();
_outboundGroupSessions.remove(roomId); _outboundGroupSessions.remove(roomId);
await client.database?.removeOutboundGroupSession(client.id, roomId); await client.database?.removeOutboundGroupSession(roomId);
return true; return true;
} }
@ -412,7 +409,6 @@ class KeyManager {
return; return;
} }
await client.database?.storeOutboundGroupSession( await client.database?.storeOutboundGroupSession(
client.id,
roomId, roomId,
sess.outboundGroupSession.pickle(client.userID), sess.outboundGroupSession.pickle(client.userID),
json.encode(sess.devices), json.encode(sess.devices),
@ -516,7 +512,6 @@ class KeyManager {
} }
_loadedOutboundGroupSessions.add(roomId); _loadedOutboundGroupSessions.add(roomId);
final sess = await client.database.getOutboundGroupSession( final sess = await client.database.getOutboundGroupSession(
client.id,
roomId, roomId,
client.userID, client.userID,
); );
@ -753,7 +748,7 @@ class KeyManager {
// no need to optimze this, as we only run it so seldomly and almost never with many keys at once // no need to optimze this, as we only run it so seldomly and almost never with many keys at once
for (final dbSession in dbSessions) { for (final dbSession in dbSessions) {
await client.database.markInboundGroupSessionAsUploaded( await client.database.markInboundGroupSessionAsUploaded(
client.id, dbSession.roomId, dbSession.sessionId); dbSession.roomId, dbSession.sessionId);
} }
} finally { } finally {
decryption.free(); decryption.free();

View File

@ -233,7 +233,9 @@ class OlmManager {
// in case the app gets killed during upload or the upload fails due to bad network // in case the app gets killed during upload or the upload fails due to bad network
// we can still re-try later // we can still re-try later
if (updateDatabase) { if (updateDatabase) {
await client.database?.updateClientKeys(pickledOlmAccount, client.id); await client.database?.updateClientKeys(
pickledOlmAccount,
);
} }
final response = await client.uploadKeys( final response = await client.uploadKeys(
deviceKeys: uploadDeviceKeys deviceKeys: uploadDeviceKeys
@ -245,7 +247,7 @@ class OlmManager {
// mark the OTKs as published and save that to datbase // mark the OTKs as published and save that to datbase
_olmAccount.mark_keys_as_published(); _olmAccount.mark_keys_as_published();
if (updateDatabase) { if (updateDatabase) {
await client.database?.updateClientKeys(pickledOlmAccount, client.id); await client.database?.updateClientKeys(pickledOlmAccount);
} }
return (uploadedOneTimeKeysCount != null && return (uploadedOneTimeKeysCount != null &&
response['signed_curve25519'] == uploadedOneTimeKeysCount) || response['signed_curve25519'] == uploadedOneTimeKeysCount) ||
@ -309,7 +311,6 @@ class OlmManager {
return; return;
} }
await client.database.storeOlmSession( await client.database.storeOlmSession(
client.id,
session.identityKey, session.identityKey,
session.sessionId, session.sessionId,
session.pickledSession, session.pickledSession,
@ -346,7 +347,6 @@ class OlmManager {
device.lastActive = DateTime.now(); device.lastActive = DateTime.now();
await client.database?.setLastActiveUserDeviceKey( await client.database?.setLastActiveUserDeviceKey(
device.lastActive.millisecondsSinceEpoch, device.lastActive.millisecondsSinceEpoch,
client.id,
device.userId, device.userId,
device.deviceId); device.deviceId);
} }
@ -383,7 +383,9 @@ class OlmManager {
try { try {
newSession.create_inbound_from(_olmAccount, senderKey, body); newSession.create_inbound_from(_olmAccount, senderKey, body);
_olmAccount.remove_one_time_keys(newSession); _olmAccount.remove_one_time_keys(newSession);
client.database?.updateClientKeys(pickledOlmAccount, client.id); client.database?.updateClientKeys(
pickledOlmAccount,
);
plaintext = newSession.decrypt(type, body); plaintext = newSession.decrypt(type, body);
runInRoot(() => storeOlmSession(OlmSession( runInRoot(() => storeOlmSession(OlmSession(
key: client.userID, key: client.userID,
@ -424,8 +426,8 @@ class OlmManager {
if (client.database == null) { if (client.database == null) {
return []; return [];
} }
final olmSessions = await client.database final olmSessions =
.getOlmSessions(client.id, senderKey, client.userID); await client.database.getOlmSessions(senderKey, client.userID);
return olmSessions.where((sess) => sess.isValid).toList(); return olmSessions.where((sess) => sess.isValid).toList();
} }
@ -435,7 +437,6 @@ class OlmManager {
return; return;
} }
final rows = await client.database.getOlmSessionsForDevices( final rows = await client.database.getOlmSessionsForDevices(
client.id,
senderKeys, senderKeys,
client.userID, client.userID,
); );
@ -596,7 +597,6 @@ class OlmManager {
'type': type, 'type': type,
'content': payload, 'content': payload,
}), }),
client.id,
device.userId, device.userId,
device.deviceId)); device.deviceId));
} }
@ -660,8 +660,7 @@ class OlmManager {
Logs().v( Logs().v(
'[OlmManager] Device ${device.userId}:${device.deviceId} generated a new olm session, replaying last sent message...'); '[OlmManager] Device ${device.userId}:${device.deviceId} generated a new olm session, replaying last sent message...');
final lastSentMessageRes = await client.database final lastSentMessageRes = await client.database
.getLastSentMessageUserDeviceKey( .getLastSentMessageUserDeviceKey(device.userId, device.deviceId);
client.id, device.userId, device.deviceId);
if (lastSentMessageRes.isEmpty || if (lastSentMessageRes.isEmpty ||
(lastSentMessageRes.first?.isEmpty ?? true)) { (lastSentMessageRes.first?.isEmpty ?? true)) {
return; return;

View File

@ -63,7 +63,7 @@ class SSSS {
// for testing // for testing
Future<void> clearCache() async { Future<void> clearCache() async {
await client.database?.clearSSSSCache(client.id); await client.database?.clearSSSSCache();
_cache.clear(); _cache.clear();
} }
@ -282,7 +282,7 @@ class SSSS {
if (_cache.containsKey(type) && isValid(_cache[type])) { if (_cache.containsKey(type) && isValid(_cache[type])) {
return _cache[type].content; return _cache[type].content;
} }
final ret = await client.database.getSSSSCache(client.id, type); final ret = await client.database.getSSSSCache(type);
if (ret == null) { if (ret == null) {
return null; return null;
} }
@ -311,7 +311,7 @@ class SSSS {
if (cacheTypes.contains(type) && client.database != null) { if (cacheTypes.contains(type) && client.database != null) {
// cache the thing // cache the thing
await client.database await client.database
.storeSSSSCache(client.id, type, keyId, enc['ciphertext'], decrypted); .storeSSSSCache(type, keyId, enc['ciphertext'], decrypted);
if (_cacheCallbacks.containsKey(type) && await getCached(type) == null) { if (_cacheCallbacks.containsKey(type) && await getCached(type) == null) {
_cacheCallbacks[type](decrypted); _cacheCallbacks[type](decrypted);
} }
@ -344,7 +344,7 @@ class SSSS {
if (cacheTypes.contains(type) && client.database != null) { if (cacheTypes.contains(type) && client.database != null) {
// cache the thing // cache the thing
await client.database await client.database
.storeSSSSCache(client.id, type, keyId, encrypted.ciphertext, secret); .storeSSSSCache(type, keyId, encrypted.ciphertext, secret);
if (triggerCacheCallback) { if (triggerCacheCallback) {
_cacheCallbacks[type](secret); _cacheCallbacks[type](secret);
} }
@ -369,8 +369,8 @@ class SSSS {
await client.setAccountData(client.userID, type, content); await client.setAccountData(client.userID, type, content);
if (cacheTypes.contains(type) && client.database != null) { if (cacheTypes.contains(type) && client.database != null) {
// cache the thing // cache the thing
await client.database.storeSSSSCache(client.id, type, keyId, await client.database.storeSSSSCache(
content['encrypted'][keyId]['ciphertext'], secret); type, keyId, content['encrypted'][keyId]['ciphertext'], secret);
} }
} }
@ -532,8 +532,8 @@ class SSSS {
if (keyId != null) { if (keyId != null) {
final ciphertext = client.accountData[request.type] final ciphertext = client.accountData[request.type]
.content['encrypted'][keyId]['ciphertext']; .content['encrypted'][keyId]['ciphertext'];
await client.database.storeSSSSCache( await client.database
client.id, request.type, keyId, ciphertext, secret); .storeSSSSCache(request.type, keyId, ciphertext, secret);
if (_cacheCallbacks.containsKey(request.type)) { if (_cacheCallbacks.containsKey(request.type)) {
_cacheCallbacks[request.type](secret); _cacheCallbacks[request.type](secret);
} }

View File

@ -575,7 +575,7 @@ class Bootstrap {
await newSsssKey.store(megolmKey, base64.encode(privKey)); await newSsssKey.store(megolmKey, base64.encode(privKey));
Logs().v( Logs().v(
'And finally set all megolm keys as needing to be uploaded again...'); 'And finally set all megolm keys as needing to be uploaded again...');
await client.database?.markInboundGroupSessionsAsNeedingUpload(client.id); await client.database?.markInboundGroupSessionsAsNeedingUpload();
} catch (e, s) { } catch (e, s) {
Logs().e('[Bootstrapping] Error setting up online key backup', e, s); Logs().e('[Bootstrapping] Error setting up online key backup', e, s);
state = BootstrapState.error; state = BootstrapState.error;

View File

@ -980,7 +980,6 @@ class Client extends MatrixApi {
_deviceName, _deviceName,
prevBatch, prevBatch,
encryption?.pickledOlmAccount, encryption?.pickledOlmAccount,
id,
); );
} else { } else {
_id = await database.insertClient( _id = await database.insertClient(
@ -997,7 +996,7 @@ class Client extends MatrixApi {
_userDeviceKeys = await database.getUserDeviceKeys(this); _userDeviceKeys = await database.getUserDeviceKeys(this);
_rooms = await database.getRoomList(this); _rooms = await database.getRoomList(this);
_sortRooms(); _sortRooms();
accountData = await database.getAccountData(id); accountData = await database.getAccountData();
presences.clear(); presences.clear();
} }
_initLock = false; _initLock = false;
@ -1030,7 +1029,7 @@ class Client extends MatrixApi {
Logs().outputEvents.clear(); Logs().outputEvents.clear();
try { try {
await abortSync(); await abortSync();
await database?.clear(id); await database?.clear();
_backgroundSync = true; _backgroundSync = true;
} catch (e, s) { } catch (e, s) {
Logs().e('Unable to clear database', e, s); Logs().e('Unable to clear database', e, s);
@ -1093,7 +1092,7 @@ class Client extends MatrixApi {
Future<void> _checkSyncFilter() async { Future<void> _checkSyncFilter() async {
if (syncFilterId == null) { if (syncFilterId == null) {
syncFilterId = await defineFilter(userID, syncFilter); syncFilterId = await defineFilter(userID, syncFilter);
await database?.storeSyncFilterId(syncFilterId, id); await database?.storeSyncFilterId(syncFilterId);
} }
return; return;
} }
@ -1132,7 +1131,7 @@ class Client extends MatrixApi {
_currentTransaction = database.transaction(() async { _currentTransaction = database.transaction(() async {
await _handleSync(syncResp); await _handleSync(syncResp);
if (prevBatch != syncResp.nextBatch) { if (prevBatch != syncResp.nextBatch) {
await database.storePrevBatch(syncResp.nextBatch, id); await database.storePrevBatch(syncResp.nextBatch);
} }
}); });
await _currentTransaction; await _currentTransaction;
@ -1218,7 +1217,6 @@ class Client extends MatrixApi {
for (final newAccountData in sync.accountData) { for (final newAccountData in sync.accountData) {
if (database != null) { if (database != null) {
await database.storeAccountData( await database.storeAccountData(
id,
newAccountData.type, newAccountData.type,
jsonEncode(newAccountData.content), jsonEncode(newAccountData.content),
); );
@ -1243,7 +1241,7 @@ class Client extends MatrixApi {
if (_userDeviceKeys.containsKey(userId)) { if (_userDeviceKeys.containsKey(userId)) {
_userDeviceKeys[userId].outdated = true; _userDeviceKeys[userId].outdated = true;
if (database != null) { if (database != null) {
await database.storeUserDeviceKeysInfo(id, userId, true); await database.storeUserDeviceKeysInfo(userId, true);
} }
} }
} }
@ -1285,7 +1283,7 @@ class Client extends MatrixApi {
if (database != null) { if (database != null) {
// TODO: This method seems to be rather slow for some updates // TODO: This method seems to be rather slow for some updates
// Perhaps don't dynamically build that one query? // Perhaps don't dynamically build that one query?
await database.storeRoomUpdate(this.id, id, room, getRoomById(id)); await database.storeRoomUpdate(id, room, getRoomById(id));
} }
_updateRoomsByRoomUpdate(id, room); _updateRoomsByRoomUpdate(id, room);
@ -1427,13 +1425,13 @@ class Client extends MatrixApi {
database != null && database != null &&
room.getState(EventTypes.RoomMember, event['sender']) == null) { room.getState(EventTypes.RoomMember, event['sender']) == null) {
// In order to correctly render room list previews we need to fetch the member from the database // In order to correctly render room list previews we need to fetch the member from the database
final user = await database.getUser(id, event['sender'], room); final user = await database.getUser(event['sender'], room);
if (user != null) { if (user != null) {
room.setState(user); room.setState(user);
} }
} }
if (type != EventUpdateType.ephemeral && database != null) { if (type != EventUpdateType.ephemeral && database != null) {
await database.storeEventUpdate(id, update); await database.storeEventUpdate(update);
} }
_updateRoomsByEventUpdate(update); _updateRoomsByEventUpdate(update);
if (encryptionEnabled) { if (encryptionEnabled) {
@ -1708,7 +1706,7 @@ class Client extends MatrixApi {
// Check if deviceId or deviceKeys are known // Check if deviceId or deviceKeys are known
if (!oldKeys.containsKey(deviceId)) { if (!oldKeys.containsKey(deviceId)) {
final oldPublicKeys = final oldPublicKeys =
await database.deviceIdSeen(id, userId, deviceId); await database.deviceIdSeen(userId, deviceId);
if (oldPublicKeys != null && if (oldPublicKeys != null &&
oldPublicKeys != entry.curve25519Key + entry.ed25519Key) { oldPublicKeys != entry.curve25519Key + entry.ed25519Key) {
Logs().w( Logs().w(
@ -1716,25 +1714,24 @@ class Client extends MatrixApi {
continue; continue;
} }
final oldDeviceId = final oldDeviceId =
await database.publicKeySeen(id, entry.ed25519Key); await database.publicKeySeen(entry.ed25519Key);
if (oldDeviceId != null && oldDeviceId != deviceId) { if (oldDeviceId != null && oldDeviceId != deviceId) {
Logs().w( Logs().w(
'Already seen ED25519 has been added again. This might be an attack!'); 'Already seen ED25519 has been added again. This might be an attack!');
continue; continue;
} }
final oldDeviceId2 = final oldDeviceId2 =
await database.publicKeySeen(id, entry.curve25519Key); await database.publicKeySeen(entry.curve25519Key);
if (oldDeviceId2 != null && oldDeviceId2 != deviceId) { if (oldDeviceId2 != null && oldDeviceId2 != deviceId) {
Logs().w( Logs().w(
'Already seen Curve25519 has been added again. This might be an attack!'); 'Already seen Curve25519 has been added again. This might be an attack!');
continue; continue;
} }
await database.addSeenDeviceId(id, userId, deviceId, await database.addSeenDeviceId(
entry.curve25519Key + entry.ed25519Key); userId, deviceId, entry.curve25519Key + entry.ed25519Key);
await database.addSeenPublicKey(entry.ed25519Key, deviceId);
await database.addSeenPublicKey( await database.addSeenPublicKey(
id, entry.ed25519Key, deviceId); entry.curve25519Key, deviceId);
await database.addSeenPublicKey(
id, entry.curve25519Key, deviceId);
} }
// is this a new key or the same one as an old one? // is this a new key or the same one as an old one?
@ -1756,7 +1753,6 @@ class Client extends MatrixApi {
entry.setDirectVerified(true); entry.setDirectVerified(true);
} }
dbActions.add(() => database.storeUserDeviceKey( dbActions.add(() => database.storeUserDeviceKey(
id,
userId, userId,
deviceId, deviceId,
json.encode(entry.toJson()), json.encode(entry.toJson()),
@ -1780,14 +1776,14 @@ class Client extends MatrixApi {
final deviceId = oldDeviceKeyEntry.key; final deviceId = oldDeviceKeyEntry.key;
if (!_userDeviceKeys[userId].deviceKeys.containsKey(deviceId)) { if (!_userDeviceKeys[userId].deviceKeys.containsKey(deviceId)) {
// we need to remove an old key // we need to remove an old key
dbActions.add( dbActions
() => database.removeUserDeviceKey(id, userId, deviceId)); .add(() => database.removeUserDeviceKey(userId, deviceId));
} }
} }
_userDeviceKeys[userId].outdated = false; _userDeviceKeys[userId].outdated = false;
if (database != null) { if (database != null) {
dbActions.add( dbActions
() => database.storeUserDeviceKeysInfo(id, userId, false)); .add(() => database.storeUserDeviceKeysInfo(userId, false));
} }
} }
} }
@ -1819,8 +1815,8 @@ class Client extends MatrixApi {
} else if (database != null) { } else if (database != null) {
// There is a previous cross-signing key with this usage, that we no // There is a previous cross-signing key with this usage, that we no
// longer need/use. Clear it from the database. // longer need/use. Clear it from the database.
dbActions.add(() => database.removeUserCrossSigningKey( dbActions.add(() =>
id, userId, oldEntry.key)); database.removeUserCrossSigningKey(userId, oldEntry.key));
} }
} }
final entry = CrossSigningKey.fromMatrixCrossSigningKey( final entry = CrossSigningKey.fromMatrixCrossSigningKey(
@ -1845,7 +1841,6 @@ class Client extends MatrixApi {
} }
if (database != null) { if (database != null) {
dbActions.add(() => database.storeUserCrossSigningKey( dbActions.add(() => database.storeUserCrossSigningKey(
id,
userId, userId,
publicKey, publicKey,
json.encode(entry.toJson()), json.encode(entry.toJson()),
@ -1856,8 +1851,8 @@ class Client extends MatrixApi {
} }
_userDeviceKeys[userId].outdated = false; _userDeviceKeys[userId].outdated = false;
if (database != null) { if (database != null) {
dbActions.add( dbActions
() => database.storeUserDeviceKeysInfo(id, userId, false)); .add(() => database.storeUserDeviceKeysInfo(userId, false));
} }
} }
} }
@ -1892,7 +1887,7 @@ class Client extends MatrixApi {
if (database == null || !_toDeviceQueueNeedsProcessing) { if (database == null || !_toDeviceQueueNeedsProcessing) {
return; return;
} }
final entries = await database.getToDeviceEventQueue(id); final entries = await database.getToDeviceEventQueue();
if (entries.isEmpty) { if (entries.isEmpty) {
_toDeviceQueueNeedsProcessing = false; _toDeviceQueueNeedsProcessing = false;
return; return;
@ -1907,7 +1902,7 @@ class Client extends MatrixApi {
k, Map<String, dynamic>.from(v))))); k, Map<String, dynamic>.from(v)))));
await super.sendToDevice(entry.type, entry.txnId, data); await super.sendToDevice(entry.type, entry.txnId, data);
await database.deleteFromToDeviceQueue(id, entry.id); await database.deleteFromToDeviceQueue(entry.id);
} }
} }
@ -1931,7 +1926,7 @@ class Client extends MatrixApi {
if (database != null) { if (database != null) {
_toDeviceQueueNeedsProcessing = true; _toDeviceQueueNeedsProcessing = true;
await database.insertIntoToDeviceQueue( await database.insertIntoToDeviceQueue(
id, eventType, txnId, json.encode(messages)); eventType, txnId, json.encode(messages));
} }
rethrow; rethrow;
} }
@ -2140,7 +2135,7 @@ class Client extends MatrixApi {
await abortSync(); await abortSync();
prevBatch = null; prevBatch = null;
rooms.clear(); rooms.clear();
await database?.clearCache(id); await database?.clearCache();
encryption?.keyManager?.clearOutboundGroupSessions(); encryption?.keyManager?.clearOutboundGroupSessions();
onCacheCleared.add(true); onCacheCleared.add(true);
// Restart the syncloop // Restart the syncloop
@ -2246,11 +2241,10 @@ class Client extends MatrixApi {
); );
Logs().d('Migrate SSSSCache...'); Logs().d('Migrate SSSSCache...');
for (final type in cacheTypes) { for (final type in cacheTypes) {
final ssssCache = await legacyDatabase.getSSSSCache(_id, type); final ssssCache = await legacyDatabase.getSSSSCache(type);
if (ssssCache != null) { if (ssssCache != null) {
Logs().d('Migrate $type...'); Logs().d('Migrate $type...');
await database.storeSSSSCache( await database.storeSSSSCache(
_id,
type, type,
ssssCache.keyId, ssssCache.keyId,
ssssCache.ciphertext, ssssCache.ciphertext,
@ -2267,7 +2261,6 @@ class Client extends MatrixApi {
Logs().d( Logs().d(
'Migrate cross signing key with usage ${crossSigningKey.usage} and verified ${crossSigningKey.directVerified}...'); 'Migrate cross signing key with usage ${crossSigningKey.usage} and verified ${crossSigningKey.directVerified}...');
await database.storeUserCrossSigningKey( await database.storeUserCrossSigningKey(
_id,
userId, userId,
crossSigningKey.publicKey, crossSigningKey.publicKey,
jsonEncode(crossSigningKey.toJson()), jsonEncode(crossSigningKey.toJson()),
@ -2278,7 +2271,6 @@ class Client extends MatrixApi {
for (final deviceKeys in deviceKeysList.deviceKeys.values) { for (final deviceKeys in deviceKeysList.deviceKeys.values) {
Logs().d('Migrate device keys for ${deviceKeys.deviceId}...'); Logs().d('Migrate device keys for ${deviceKeys.deviceId}...');
await database.storeUserDeviceKey( await database.storeUserDeviceKey(
_id,
userId, userId,
deviceKeys.deviceId, deviceKeys.deviceId,
jsonEncode(deviceKeys.toJson()), jsonEncode(deviceKeys.toJson()),
@ -2288,17 +2280,15 @@ class Client extends MatrixApi {
); );
} }
Logs().d('Migrate user device keys info...'); Logs().d('Migrate user device keys info...');
await database.storeUserDeviceKeysInfo( await database.storeUserDeviceKeysInfo(userId, deviceKeysList.outdated);
_id, userId, deviceKeysList.outdated);
} }
Logs().d('Migrate inbound group sessions...'); Logs().d('Migrate inbound group sessions...');
try { try {
final sessions = await legacyDatabase.getAllInboundGroupSessions(_id); final sessions = await legacyDatabase.getAllInboundGroupSessions();
for (var i = 0; i < sessions.length; i++) { for (var i = 0; i < sessions.length; i++) {
Logs().d('$i / ${sessions.length}'); Logs().d('$i / ${sessions.length}');
final session = sessions[i]; final session = sessions[i];
await database.storeInboundGroupSession( await database.storeInboundGroupSession(
_id,
session.roomId, session.roomId,
session.sessionId, session.sessionId,
session.pickle, session.pickle,
@ -2313,7 +2303,7 @@ class Client extends MatrixApi {
Logs().e('Unable to migrate inbound group sessions!', e, s); Logs().e('Unable to migrate inbound group sessions!', e, s);
} }
await legacyDatabase.clear(_id); await legacyDatabase.clear();
await legacyDatabaseDestroyer?.call(this); await legacyDatabaseDestroyer?.call(this);
} }
await legacyDatabase.close(); await legacyDatabase.close();

View File

@ -39,7 +39,6 @@ abstract class DatabaseApi {
String deviceName, String deviceName,
String prevBatch, String prevBatch,
String olmAccount, String olmAccount,
int clientId,
); );
Future insertClient( Future insertClient(
@ -55,34 +54,32 @@ abstract class DatabaseApi {
Future<List<Room>> getRoomList(Client client); Future<List<Room>> getRoomList(Client client);
Future<Map<String, BasicEvent>> getAccountData(int clientId); Future<Map<String, BasicEvent>> getAccountData();
/// Stores a RoomUpdate object in the database. Must be called inside of /// Stores a RoomUpdate object in the database. Must be called inside of
/// [transaction]. /// [transaction].
Future<void> storeRoomUpdate( Future<void> storeRoomUpdate(String roomId, SyncRoomUpdate roomUpdate,
int clientId, String roomId, SyncRoomUpdate roomUpdate,
[Room oldRoom]); [Room oldRoom]);
/// Stores an EventUpdate object in the database. Must be called inside of /// Stores an EventUpdate object in the database. Must be called inside of
/// [transaction]. /// [transaction].
Future<void> storeEventUpdate(int clientId, EventUpdate eventUpdate); Future<void> storeEventUpdate(EventUpdate eventUpdate);
Future<Event?> getEventById(int clientId, String eventId, Room room); Future<Event?> getEventById(String eventId, Room room);
bool eventIsKnown(int clientId, String eventId, String roomId); bool eventIsKnown(String eventId, String roomId);
Future<void> forgetRoom(int clientId, String roomId); Future<void> forgetRoom(String roomId);
Future<void> clearCache(int clientId); Future<void> clearCache();
Future<void> clear(int clientId); Future<void> clear();
Future<User?> getUser(int clientId, String userId, Room room); Future<User?> getUser(String userId, Room room);
Future<List<User>> getUsers(int clientId, Room room); Future<List<User>> getUsers(Room room);
Future<List<Event>> getEventList( Future<List<Event>> getEventList(
int clientId,
Room room, { Room room, {
int start = 0, int start = 0,
int limit, int limit,
@ -92,39 +89,35 @@ abstract class DatabaseApi {
Future storeFile(Uri mxcUri, Uint8List bytes, int time); Future storeFile(Uri mxcUri, Uint8List bytes, int time);
Future storeSyncFilterId(String syncFilterId, int clientId); Future storeSyncFilterId(
String syncFilterId,
);
Future storeAccountData(int clientId, String type, String content); Future storeAccountData(String type, String content);
Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client); Future<Map<String, DeviceKeysList>> getUserDeviceKeys(Client client);
Future<SSSSCache?> getSSSSCache(int clientId, String type); Future<SSSSCache?> getSSSSCache(String type);
Future<OutboundGroupSession?> getOutboundGroupSession( Future<OutboundGroupSession?> getOutboundGroupSession(
int clientId,
String roomId, String roomId,
String userId, String userId,
); );
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions( Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions();
int clientId,
);
Future<StoredInboundGroupSession?> getInboundGroupSession( Future<StoredInboundGroupSession?> getInboundGroupSession(
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
); );
Future updateInboundGroupSessionIndexes( Future updateInboundGroupSessionIndexes(
String indexes, String indexes,
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
); );
Future storeInboundGroupSession( Future storeInboundGroupSession(
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
String pickle, String pickle,
@ -136,22 +129,19 @@ abstract class DatabaseApi {
); );
Future markInboundGroupSessionAsUploaded( Future markInboundGroupSessionAsUploaded(
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
); );
Future updateInboundGroupSessionAllowedAtIndex( Future updateInboundGroupSessionAllowedAtIndex(
String allowedAtIndex, String allowedAtIndex,
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
); );
Future removeOutboundGroupSession(int clientId, String roomId); Future removeOutboundGroupSession(String roomId);
Future storeOutboundGroupSession( Future storeOutboundGroupSession(
int clientId,
String roomId, String roomId,
String pickle, String pickle,
String deviceIds, String deviceIds,
@ -159,10 +149,11 @@ abstract class DatabaseApi {
int sentMessages, int sentMessages,
); );
Future updateClientKeys(String olmAccount, int clientId); Future updateClientKeys(
String olmAccount,
);
Future storeOlmSession( Future storeOlmSession(
int clientId,
String identitiyKey, String identitiyKey,
String sessionId, String sessionId,
String pickle, String pickle,
@ -171,42 +162,39 @@ abstract class DatabaseApi {
Future setLastActiveUserDeviceKey( Future setLastActiveUserDeviceKey(
int lastActive, int lastActive,
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
Future setLastSentMessageUserDeviceKey( Future setLastSentMessageUserDeviceKey(
String lastSentMessage, String lastSentMessage,
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
Future clearSSSSCache(int clientId); Future clearSSSSCache();
Future storeSSSSCache( Future storeSSSSCache(
int clientId,
String type, String type,
String keyId, String keyId,
String ciphertext, String ciphertext,
String content, String content,
); );
Future markInboundGroupSessionsAsNeedingUpload(int clientId); Future markInboundGroupSessionsAsNeedingUpload();
Future storePrevBatch(String prevBatch, int clientId); Future storePrevBatch(
String prevBatch,
);
Future deleteOldFiles(int savedAt); Future deleteOldFiles(int savedAt);
Future storeUserDeviceKeysInfo( Future storeUserDeviceKeysInfo(
int clientId,
String userId, String userId,
bool outdated, bool outdated,
); );
Future storeUserDeviceKey( Future storeUserDeviceKey(
int clientId,
String userId, String userId,
String deviceId, String deviceId,
String content, String content,
@ -216,19 +204,16 @@ abstract class DatabaseApi {
); );
Future removeUserDeviceKey( Future removeUserDeviceKey(
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
Future removeUserCrossSigningKey( Future removeUserCrossSigningKey(
int clientId,
String userId, String userId,
String publicKey, String publicKey,
); );
Future storeUserCrossSigningKey( Future storeUserCrossSigningKey(
int clientId,
String userId, String userId,
String publicKey, String publicKey,
String content, String content,
@ -236,84 +221,73 @@ abstract class DatabaseApi {
bool blocked, bool blocked,
); );
Future deleteFromToDeviceQueue(int clientId, int id); Future deleteFromToDeviceQueue(int id);
Future removeEvent(int clientId, String eventId, String roomId); Future removeEvent(String eventId, String roomId);
Future updateRoomSortOrder( Future updateRoomSortOrder(
double oldestSortOrder, double oldestSortOrder,
double newestSortOrder, double newestSortOrder,
int clientId,
String roomId, String roomId,
); );
Future setRoomPrevBatch( Future setRoomPrevBatch(
String prevBatch, String prevBatch,
int clientId,
String roomId, String roomId,
); );
Future resetNotificationCount(int clientId, String roomId); Future resetNotificationCount(String roomId);
Future setVerifiedUserCrossSigningKey( Future setVerifiedUserCrossSigningKey(
bool verified, bool verified,
int clientId,
String userId, String userId,
String publicKey, String publicKey,
); );
Future setBlockedUserCrossSigningKey( Future setBlockedUserCrossSigningKey(
bool blocked, bool blocked,
int clientId,
String userId, String userId,
String publicKey, String publicKey,
); );
Future setVerifiedUserDeviceKey( Future setVerifiedUserDeviceKey(
bool verified, bool verified,
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
Future setBlockedUserDeviceKey( Future setBlockedUserDeviceKey(
bool blocked, bool blocked,
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
Future<List<Event>> getUnimportantRoomEventStatesForRoom( Future<List<Event>> getUnimportantRoomEventStatesForRoom(
int clientId,
List<String> events, List<String> events,
Room room, Room room,
); );
Future<List<OlmSession>> getOlmSessions( Future<List<OlmSession>> getOlmSessions(
int clientId,
String identityKey, String identityKey,
String userId, String userId,
); );
Future<List<OlmSession>> getOlmSessionsForDevices( Future<List<OlmSession>> getOlmSessionsForDevices(
int clientId,
List<String> identityKeys, List<String> identityKeys,
String userId, String userId,
); );
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue(int clientId); Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue();
/// Please do `jsonEncode(content)` in your code to stay compatible with /// Please do `jsonEncode(content)` in your code to stay compatible with
/// auto generated methods here. /// auto generated methods here.
Future insertIntoToDeviceQueue( Future insertIntoToDeviceQueue(
int clientId,
String type, String type,
String txnId, String txnId,
String content, String content,
); );
Future<List<String>> getLastSentMessageUserDeviceKey( Future<List<String>> getLastSentMessageUserDeviceKey(
int clientId,
String userId, String userId,
String deviceId, String deviceId,
); );
@ -321,14 +295,13 @@ abstract class DatabaseApi {
Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload(); Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload();
Future<void> addSeenDeviceId( Future<void> addSeenDeviceId(
int clientId, String userId, String deviceId, String publicKeys); String userId, String deviceId, String publicKeys);
Future<void> addSeenPublicKey( Future<void> addSeenPublicKey(String publicKey, String deviceId);
int clientId, String publicKey, String deviceId);
Future<String?> deviceIdSeen(int clientId, userId, deviceId); Future<String?> deviceIdSeen(userId, deviceId);
Future<String?> publicKeySeen(int clientId, String publicKey); Future<String?> publicKeySeen(String publicKey);
Future<dynamic> close(); Future<dynamic> close();

View File

@ -231,22 +231,21 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
convertToJson(raw), convertToJson(raw),
Client(''), Client(''),
); );
await addSeenDeviceId(0, deviceKeys.userId, deviceKeys.deviceId, await addSeenDeviceId(deviceKeys.userId, deviceKeys.deviceId,
deviceKeys.curve25519Key + deviceKeys.ed25519Key); deviceKeys.curve25519Key + deviceKeys.ed25519Key);
await addSeenPublicKey(0, deviceKeys.ed25519Key, deviceKeys.deviceId); await addSeenPublicKey(deviceKeys.ed25519Key, deviceKeys.deviceId);
await addSeenPublicKey( await addSeenPublicKey(deviceKeys.curve25519Key, deviceKeys.deviceId);
0, deviceKeys.curve25519Key, deviceKeys.deviceId);
} catch (e) { } catch (e) {
Logs().w('Can not migrate device $key', e); Logs().w('Can not migrate device $key', e);
} }
} }
} }
await clearCache(0); await clearCache();
await _clientBox.put('version', version); await _clientBox.put('version', version);
} }
@override @override
Future<void> clear(int clientId) async { Future<void> clear() async {
Logs().i('Clear and close hive database...'); Logs().i('Clear and close hive database...');
await _actionOnAllBoxes((box) async { await _actionOnAllBoxes((box) async {
try { try {
@ -261,7 +260,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> clearCache(int clientId) async { Future<void> clearCache() async {
await _roomsBox.deleteAll(_roomsBox.keys); await _roomsBox.deleteAll(_roomsBox.keys);
await _accountDataBox.deleteAll(_accountDataBox.keys); await _accountDataBox.deleteAll(_accountDataBox.keys);
await _roomStateBox.deleteAll(_roomStateBox.keys); await _roomStateBox.deleteAll(_roomStateBox.keys);
@ -274,7 +273,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> clearSSSSCache(int clientId) async { Future<void> clearSSSSCache() async {
await _ssssCacheBox.deleteAll(_ssssCacheBox.keys); await _ssssCacheBox.deleteAll(_ssssCacheBox.keys);
} }
@ -282,7 +281,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
Future<void> close() => _actionOnAllBoxes((box) => box.close()); Future<void> close() => _actionOnAllBoxes((box) => box.close());
@override @override
Future<void> deleteFromToDeviceQueue(int clientId, int id) async { Future<void> deleteFromToDeviceQueue(int id) async {
await _toDeviceQueueBox.delete(id); await _toDeviceQueueBox.delete(id);
return; return;
} }
@ -293,7 +292,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> forgetRoom(int clientId, String roomId) async { Future<void> forgetRoom(String roomId) async {
await _timelineFragmentsBox.delete(MultiKey(roomId, '').toString()); await _timelineFragmentsBox.delete(MultiKey(roomId, '').toString());
for (final key in _eventsBox.keys) { for (final key in _eventsBox.keys) {
final multiKey = MultiKey.fromString(key); final multiKey = MultiKey.fromString(key);
@ -319,7 +318,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<Map<String, BasicEvent>> getAccountData(int clientId) async { Future<Map<String, BasicEvent>> getAccountData() async {
final accountData = <String, BasicEvent>{}; final accountData = <String, BasicEvent>{};
for (final key in _accountDataBox.keys) { for (final key in _accountDataBox.keys) {
final raw = await _accountDataBox.get(key); final raw = await _accountDataBox.get(key);
@ -343,14 +342,14 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<Event?> getEventById(int clientId, String eventId, Room room) async { Future<Event?> getEventById(String eventId, Room room) async {
final raw = await _eventsBox.get(MultiKey(room.id, eventId).toString()); final raw = await _eventsBox.get(MultiKey(room.id, eventId).toString());
if (raw == null) return null; if (raw == null) return null;
return Event.fromJson(convertToJson(raw), room); return Event.fromJson(convertToJson(raw), room);
} }
@override @override
bool eventIsKnown(int clientId, String eventId, String roomId) => bool eventIsKnown(String eventId, String roomId) =>
_eventsBox.keys.contains(MultiKey(roomId, eventId).toString()); _eventsBox.keys.contains(MultiKey(roomId, eventId).toString());
/// Loads a whole list of events at once from the store for a specific room /// Loads a whole list of events at once from the store for a specific room
@ -368,7 +367,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<List<Event>> getEventList( Future<List<Event>> getEventList(
int clientId,
Room room, { Room room, {
int start = 0, int start = 0,
int? limit, int? limit,
@ -404,7 +402,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<StoredInboundGroupSession?> getInboundGroupSession( Future<StoredInboundGroupSession?> getInboundGroupSession(
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
) async { ) async {
@ -432,7 +429,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<List<String>> getLastSentMessageUserDeviceKey( Future<List<String>> getLastSentMessageUserDeviceKey(
int clientId, String userId, String deviceId) async { String userId, String deviceId) async {
final raw = final raw =
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
if (raw == null) return <String>[]; if (raw == null) return <String>[];
@ -440,8 +437,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeOlmSession(int clientId, String identityKey, Future<void> storeOlmSession(String identityKey, String sessionId,
String sessionId, String pickle, int lastReceived) async { String pickle, int lastReceived) async {
final rawSessions = final rawSessions =
(await _olmSessionsBox.get(identityKey.toHiveKey) as Map?) ?? {}; (await _olmSessionsBox.get(identityKey.toHiveKey) as Map?) ?? {};
rawSessions[sessionId] = <String, dynamic>{ rawSessions[sessionId] = <String, dynamic>{
@ -456,7 +453,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<List<OlmSession>> getOlmSessions( Future<List<OlmSession>> getOlmSessions(
int clientId, String identityKey, String userId) async { String identityKey, String userId) async {
final rawSessions = final rawSessions =
await _olmSessionsBox.get(identityKey.toHiveKey) as Map?; await _olmSessionsBox.get(identityKey.toHiveKey) as Map?;
if (rawSessions == null || rawSessions.isEmpty) return <OlmSession>[]; if (rawSessions == null || rawSessions.isEmpty) return <OlmSession>[];
@ -467,15 +464,15 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<List<OlmSession>> getOlmSessionsForDevices( Future<List<OlmSession>> getOlmSessionsForDevices(
int clientId, List<String> identityKey, String userId) async { List<String> identityKey, String userId) async {
final sessions = await Future.wait(identityKey final sessions = await Future.wait(
.map((identityKey) => getOlmSessions(clientId, identityKey, userId))); identityKey.map((identityKey) => getOlmSessions(identityKey, userId)));
return <OlmSession>[for (final sublist in sessions) ...sublist]; return <OlmSession>[for (final sublist in sessions) ...sublist];
} }
@override @override
Future<OutboundGroupSession?> getOutboundGroupSession( Future<OutboundGroupSession?> getOutboundGroupSession(
int clientId, String roomId, String userId) async { String roomId, String userId) async {
final raw = await _outboundGroupSessionsBox.get(roomId.toHiveKey); final raw = await _outboundGroupSessionsBox.get(roomId.toHiveKey);
if (raw == null) return null; if (raw == null) return null;
return OutboundGroupSession.fromJson(convertToJson(raw), userId); return OutboundGroupSession.fromJson(convertToJson(raw), userId);
@ -555,14 +552,14 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<SSSSCache?> getSSSSCache(int clientId, String type) async { Future<SSSSCache?> getSSSSCache(String type) async {
final raw = await _ssssCacheBox.get(type); final raw = await _ssssCacheBox.get(type);
if (raw == null) return null; if (raw == null) return null;
return SSSSCache.fromJson(convertToJson(raw)); return SSSSCache.fromJson(convertToJson(raw));
} }
@override @override
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue(int clientId) async => Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue() async =>
await Future.wait(_toDeviceQueueBox.keys.map((i) async { await Future.wait(_toDeviceQueueBox.keys.map((i) async {
final raw = await _toDeviceQueueBox.get(i); final raw = await _toDeviceQueueBox.get(i);
raw['id'] = i; raw['id'] = i;
@ -571,7 +568,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<List<Event>> getUnimportantRoomEventStatesForRoom( Future<List<Event>> getUnimportantRoomEventStatesForRoom(
int clientId, List<String> events, Room room) async { List<String> events, Room room) async {
final keys = _roomStateBox.keys.where((key) { final keys = _roomStateBox.keys.where((key) {
final tuple = MultiKey.fromString(key); final tuple = MultiKey.fromString(key);
return tuple.parts.first == room.id && !events.contains(tuple.parts[1]); return tuple.parts.first == room.id && !events.contains(tuple.parts[1]);
@ -587,7 +584,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<User?> getUser(int clientId, String userId, Room room) async { Future<User?> getUser(String userId, Room room) async {
final state = final state =
await _roomMembersBox.get(MultiKey(room.id, userId).toString()); await _roomMembersBox.get(MultiKey(room.id, userId).toString());
if (state == null) return null; if (state == null) return null;
@ -627,7 +624,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<List<User>> getUsers(int clientId, Room room) async { Future<List<User>> getUsers(Room room) async {
final users = <User>[]; final users = <User>[];
for (final key in _roomMembersBox.keys) { for (final key in _roomMembersBox.keys) {
final statesKey = MultiKey.fromString(key); final statesKey = MultiKey.fromString(key);
@ -661,7 +658,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<int> insertIntoToDeviceQueue( Future<int> insertIntoToDeviceQueue(
int clientId, String type, String txnId, String content) async { String type, String txnId, String content) async {
return await _toDeviceQueueBox.add(<String, dynamic>{ return await _toDeviceQueueBox.add(<String, dynamic>{
'type': type, 'type': type,
'txn_id': txnId, 'txn_id': txnId,
@ -671,7 +668,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> markInboundGroupSessionAsUploaded( Future<void> markInboundGroupSessionAsUploaded(
int clientId, String roomId, String sessionId) async { String roomId, String sessionId) async {
final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey); final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey);
if (raw == null) { if (raw == null) {
Logs().w( Logs().w(
@ -684,7 +681,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> markInboundGroupSessionsAsNeedingUpload(int clientId) async { Future<void> markInboundGroupSessionsAsNeedingUpload() async {
for (final sessionId in _inboundGroupSessionsBox.keys) { for (final sessionId in _inboundGroupSessionsBox.keys) {
final raw = await _inboundGroupSessionsBox.get(sessionId); final raw = await _inboundGroupSessionsBox.get(sessionId);
raw['uploaded'] = false; raw['uploaded'] = false;
@ -694,7 +691,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> removeEvent(int clientId, String eventId, String roomId) async { Future<void> removeEvent(String eventId, String roomId) async {
await _eventsBox.delete(MultiKey(roomId, eventId).toString()); await _eventsBox.delete(MultiKey(roomId, eventId).toString());
for (final key in _timelineFragmentsBox.keys) { for (final key in _timelineFragmentsBox.keys) {
final multiKey = MultiKey.fromString(key); final multiKey = MultiKey.fromString(key);
@ -710,28 +707,27 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> removeOutboundGroupSession(int clientId, String roomId) async { Future<void> removeOutboundGroupSession(String roomId) async {
await _outboundGroupSessionsBox.delete(roomId.toHiveKey); await _outboundGroupSessionsBox.delete(roomId.toHiveKey);
return; return;
} }
@override @override
Future<void> removeUserCrossSigningKey( Future<void> removeUserCrossSigningKey(
int clientId, String userId, String publicKey) async { String userId, String publicKey) async {
await _userCrossSigningKeysBox await _userCrossSigningKeysBox
.delete(MultiKey(userId, publicKey).toString()); .delete(MultiKey(userId, publicKey).toString());
return; return;
} }
@override @override
Future<void> removeUserDeviceKey( Future<void> removeUserDeviceKey(String userId, String deviceId) async {
int clientId, String userId, String deviceId) async {
await _userDeviceKeysBox.delete(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.delete(MultiKey(userId, deviceId).toString());
return; return;
} }
@override @override
Future<void> resetNotificationCount(int clientId, String roomId) async { Future<void> resetNotificationCount(String roomId) async {
final raw = await _roomsBox.get(roomId.toHiveKey); final raw = await _roomsBox.get(roomId.toHiveKey);
if (raw == null) return; if (raw == null) return;
raw['notification_count'] = raw['highlight_count'] = 0; raw['notification_count'] = raw['highlight_count'] = 0;
@ -741,7 +737,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> setBlockedUserCrossSigningKey( Future<void> setBlockedUserCrossSigningKey(
bool blocked, int clientId, String userId, String publicKey) async { bool blocked, String userId, String publicKey) async {
final raw = await _userCrossSigningKeysBox final raw = await _userCrossSigningKeysBox
.get(MultiKey(userId, publicKey).toString()); .get(MultiKey(userId, publicKey).toString());
raw['blocked'] = blocked; raw['blocked'] = blocked;
@ -754,7 +750,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> setBlockedUserDeviceKey( Future<void> setBlockedUserDeviceKey(
bool blocked, int clientId, String userId, String deviceId) async { bool blocked, String userId, String deviceId) async {
final raw = final raw =
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
raw['blocked'] = blocked; raw['blocked'] = blocked;
@ -767,7 +763,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> setLastActiveUserDeviceKey( Future<void> setLastActiveUserDeviceKey(
int lastActive, int clientId, String userId, String deviceId) async { int lastActive, String userId, String deviceId) async {
final raw = final raw =
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
raw['last_active'] = lastActive; raw['last_active'] = lastActive;
@ -778,8 +774,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> setLastSentMessageUserDeviceKey(String lastSentMessage, Future<void> setLastSentMessageUserDeviceKey(
int clientId, String userId, String deviceId) async { String lastSentMessage, String userId, String deviceId) async {
final raw = final raw =
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
raw['last_sent_message'] = lastSentMessage; raw['last_sent_message'] = lastSentMessage;
@ -790,8 +786,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> setRoomPrevBatch( Future<void> setRoomPrevBatch(String prevBatch, String roomId) async {
String prevBatch, int clientId, String roomId) async {
final raw = await _roomsBox.get(roomId.toHiveKey); final raw = await _roomsBox.get(roomId.toHiveKey);
if (raw == null) return; if (raw == null) return;
final room = Room.fromJson(convertToJson(raw)); final room = Room.fromJson(convertToJson(raw));
@ -802,7 +797,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> setVerifiedUserCrossSigningKey( Future<void> setVerifiedUserCrossSigningKey(
bool verified, int clientId, String userId, String publicKey) async { bool verified, String userId, String publicKey) async {
final raw = (await _userCrossSigningKeysBox final raw = (await _userCrossSigningKeysBox
.get(MultiKey(userId, publicKey).toString()) as Map?) ?? .get(MultiKey(userId, publicKey).toString()) as Map?) ??
{}; {};
@ -816,7 +811,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> setVerifiedUserDeviceKey( Future<void> setVerifiedUserDeviceKey(
bool verified, int clientId, String userId, String deviceId) async { bool verified, String userId, String deviceId) async {
final raw = final raw =
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString()); await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
raw['verified'] = verified; raw['verified'] = verified;
@ -828,23 +823,21 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeAccountData( Future<void> storeAccountData(String type, String content) async {
int clientId, String type, String content) async {
await _accountDataBox.put( await _accountDataBox.put(
type.toHiveKey, convertToJson(jsonDecode(content))); type.toHiveKey, convertToJson(jsonDecode(content)));
return; return;
} }
@override @override
Future<void> storeEventUpdate(int clientId, EventUpdate eventUpdate) async { Future<void> storeEventUpdate(EventUpdate eventUpdate) async {
// Ephemerals should not be stored // Ephemerals should not be stored
if (eventUpdate.type == EventUpdateType.ephemeral) return; if (eventUpdate.type == EventUpdateType.ephemeral) return;
// In case of this is a redaction event // In case of this is a redaction event
if (eventUpdate.content['type'] == EventTypes.Redaction) { if (eventUpdate.content['type'] == EventTypes.Redaction) {
final tmpRoom = Room(id: eventUpdate.roomID); final tmpRoom = Room(id: eventUpdate.roomID);
final event = final event = await getEventById(eventUpdate.content['redacts'], tmpRoom);
await getEventById(clientId, eventUpdate.content['redacts'], tmpRoom);
if (event != null) { if (event != null) {
event.setRedactionEvent(Event.fromJson(eventUpdate.content, tmpRoom)); event.setRedactionEvent(Event.fromJson(eventUpdate.content, tmpRoom));
await _eventsBox.put( await _eventsBox.put(
@ -922,7 +915,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
// Is there a transaction id? Then delete the event with this id. // Is there a transaction id? Then delete the event with this id.
if (status != -1 && status != 0 && transactionId != null) { if (status != -1 && status != 0 && transactionId != null) {
await removeEvent(clientId, transactionId, eventUpdate.roomID); await removeEvent(transactionId, eventUpdate.roomID);
} }
} }
@ -991,7 +984,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> storeInboundGroupSession( Future<void> storeInboundGroupSession(
int clientId,
String roomId, String roomId,
String sessionId, String sessionId,
String pickle, String pickle,
@ -1003,7 +995,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
await _inboundGroupSessionsBox.put( await _inboundGroupSessionsBox.put(
sessionId.toHiveKey, sessionId.toHiveKey,
StoredInboundGroupSession( StoredInboundGroupSession(
clientId: clientId,
roomId: roomId, roomId: roomId,
sessionId: sessionId, sessionId: sessionId,
pickle: pickle, pickle: pickle,
@ -1018,13 +1009,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeOutboundGroupSession( Future<void> storeOutboundGroupSession(String roomId, String pickle,
int clientId, String deviceIds, int creationTime, int sentMessages) async {
String roomId,
String pickle,
String deviceIds,
int creationTime,
int sentMessages) async {
await _outboundGroupSessionsBox.put(roomId.toHiveKey, <String, dynamic>{ await _outboundGroupSessionsBox.put(roomId.toHiveKey, <String, dynamic>{
'room_id': roomId, 'room_id': roomId,
'pickle': pickle, 'pickle': pickle,
@ -1036,19 +1022,20 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storePrevBatch(String prevBatch, int clientId) async { Future<void> storePrevBatch(
String prevBatch,
) async {
if (_clientBox.keys.isEmpty) return; if (_clientBox.keys.isEmpty) return;
await _clientBox.put('prev_batch', prevBatch); await _clientBox.put('prev_batch', prevBatch);
return; return;
} }
@override @override
Future<void> storeRoomUpdate( Future<void> storeRoomUpdate(String roomId, SyncRoomUpdate roomUpdate,
int clientId, String roomId, SyncRoomUpdate roomUpdate,
[dynamic _]) async { [dynamic _]) async {
// Leave room if membership is leave // Leave room if membership is leave
if (roomUpdate is LeftRoomUpdate) { if (roomUpdate is LeftRoomUpdate) {
await forgetRoom(clientId, roomId); await forgetRoom(roomId);
return; return;
} }
final membership = roomUpdate is LeftRoomUpdate final membership = roomUpdate is LeftRoomUpdate
@ -1106,8 +1093,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeSSSSCache(int clientId, String type, String keyId, Future<void> storeSSSSCache(
String ciphertext, String content) async { String type, String keyId, String ciphertext, String content) async {
await _ssssCacheBox.put( await _ssssCacheBox.put(
type, type,
SSSSCache( SSSSCache(
@ -1119,13 +1106,15 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeSyncFilterId(String syncFilterId, int clientId) async { Future<void> storeSyncFilterId(
String syncFilterId,
) async {
await _clientBox.put('sync_filter_id', syncFilterId); await _clientBox.put('sync_filter_id', syncFilterId);
} }
@override @override
Future<void> storeUserCrossSigningKey(int clientId, String userId, Future<void> storeUserCrossSigningKey(String userId, String publicKey,
String publicKey, String content, bool verified, bool blocked) async { String content, bool verified, bool blocked) async {
await _userCrossSigningKeysBox.put( await _userCrossSigningKeysBox.put(
MultiKey(userId, publicKey).toString(), MultiKey(userId, publicKey).toString(),
{ {
@ -1139,7 +1128,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeUserDeviceKey(int clientId, String userId, String deviceId, Future<void> storeUserDeviceKey(String userId, String deviceId,
String content, bool verified, bool blocked, int lastActive) async { String content, bool verified, bool blocked, int lastActive) async {
await _userDeviceKeysBox.put(MultiKey(userId, deviceId).toString(), { await _userDeviceKeysBox.put(MultiKey(userId, deviceId).toString(), {
'user_id': userId, 'user_id': userId,
@ -1154,8 +1143,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> storeUserDeviceKeysInfo( Future<void> storeUserDeviceKeysInfo(String userId, bool outdated) async {
int clientId, String userId, bool outdated) async {
await _userDeviceKeysOutdatedBox.put(userId.toHiveKey, outdated); await _userDeviceKeysOutdatedBox.put(userId.toHiveKey, outdated);
return; return;
} }
@ -1221,7 +1209,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
String deviceName, String deviceName,
String prevBatch, String prevBatch,
String olmAccount, String olmAccount,
int clientId) async { ) async {
await _clientBox.put('homeserver_url', homeserverUrl); await _clientBox.put('homeserver_url', homeserverUrl);
await _clientBox.put('token', token); await _clientBox.put('token', token);
await _clientBox.put('user_id', userId); await _clientBox.put('user_id', userId);
@ -1233,14 +1221,16 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> updateClientKeys(String olmAccount, int clientId) async { Future<void> updateClientKeys(
String olmAccount,
) async {
await _clientBox.put('olm_account', olmAccount); await _clientBox.put('olm_account', olmAccount);
return; return;
} }
@override @override
Future<void> updateInboundGroupSessionAllowedAtIndex(String allowedAtIndex, Future<void> updateInboundGroupSessionAllowedAtIndex(
int clientId, String roomId, String sessionId) async { String allowedAtIndex, String roomId, String sessionId) async {
final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey); final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey);
if (raw == null) { if (raw == null) {
Logs().w( Logs().w(
@ -1254,7 +1244,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> updateInboundGroupSessionIndexes( Future<void> updateInboundGroupSessionIndexes(
String indexes, int clientId, String roomId, String sessionId) async { String indexes, String roomId, String sessionId) async {
final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey); final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey);
if (raw == null) { if (raw == null) {
Logs().w( Logs().w(
@ -1267,8 +1257,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<void> updateRoomSortOrder(double oldestSortOrder, Future<void> updateRoomSortOrder(
double newestSortOrder, int clientId, String roomId) async { double oldestSortOrder, double newestSortOrder, String roomId) async {
final raw = await _roomsBox.get(roomId.toHiveKey); final raw = await _roomsBox.get(roomId.toHiveKey);
raw['oldest_sort_order'] = oldestSortOrder; raw['oldest_sort_order'] = oldestSortOrder;
raw['newest_sort_order'] = newestSortOrder; raw['newest_sort_order'] = newestSortOrder;
@ -1277,8 +1267,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions( Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions() async {
int clientId) async {
final rawSessions = await Future.wait(_inboundGroupSessionsBox.keys final rawSessions = await Future.wait(_inboundGroupSessionsBox.keys
.map((key) => _inboundGroupSessionsBox.get(key))); .map((key) => _inboundGroupSessionsBox.get(key)));
return rawSessions return rawSessions
@ -1288,7 +1277,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> addSeenDeviceId( Future<void> addSeenDeviceId(
int clientId,
String userId, String userId,
String deviceId, String deviceId,
String publicKeysHash, String publicKeysHash,
@ -1298,14 +1286,13 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
@override @override
Future<void> addSeenPublicKey( Future<void> addSeenPublicKey(
int clientId,
String publicKey, String publicKey,
String deviceId, String deviceId,
) => ) =>
_seenDeviceKeysBox.put(publicKey.toHiveKey, deviceId); _seenDeviceKeysBox.put(publicKey.toHiveKey, deviceId);
@override @override
Future<String?> deviceIdSeen(int clientId, userId, deviceId) async { Future<String?> deviceIdSeen(userId, deviceId) async {
final raw = final raw =
await _seenDeviceIdsBox.get(MultiKey(userId, deviceId).toString()); await _seenDeviceIdsBox.get(MultiKey(userId, deviceId).toString());
if (raw == null) return null; if (raw == null) return null;
@ -1313,7 +1300,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
} }
@override @override
Future<String?> publicKeySeen(int clientId, String publicKey) async { Future<String?> publicKeySeen(String publicKey) async {
final raw = await _seenDeviceKeysBox.get(publicKey.toHiveKey); final raw = await _seenDeviceKeysBox.get(publicKey.toHiveKey);
if (raw == null) return null; if (raw == null) return null;
return raw as String; return raw as String;

View File

@ -305,7 +305,7 @@ class Event extends MatrixEvent {
/// from the database and the timelines. Returns false if not removed. /// from the database and the timelines. Returns false if not removed.
Future<bool> remove() async { Future<bool> remove() async {
if (status < 1) { if (status < 1) {
await room.client.database?.removeEvent(room.client.id, eventId, room.id); await room.client.database?.removeEvent(eventId, room.id);
room.client.onEvent.add(EventUpdate( room.client.onEvent.add(EventUpdate(
roomID: room.id, roomID: room.id,

View File

@ -286,7 +286,7 @@ class Room {
} }
final allStates = await client.database final allStates = await client.database
.getUnimportantRoomEventStatesForRoom( .getUnimportantRoomEventStatesForRoom(
client.id, client.importantStateEvents.toList(), this); client.importantStateEvents.toList(), this);
for (final state in allStates) { for (final state in allStates) {
setState(state); setState(state);
@ -342,7 +342,7 @@ class Room {
if (prevEvent != null && if (prevEvent != null &&
prevEvent.eventId != state.eventId && prevEvent.eventId != state.eventId &&
client.database != null && client.database != null &&
client.database.eventIsKnown(client.id, state.eventId, state.roomId)) { client.database.eventIsKnown(state.eventId, state.roomId)) {
return; return;
} }
@ -1053,7 +1053,7 @@ class Room {
/// Call the Matrix API to forget this room if you already left it. /// Call the Matrix API to forget this room if you already left it.
Future<void> forget() async { Future<void> forget() async {
await client.database?.forgetRoom(client.id, id); await client.database?.forgetRoom(id);
await client.forgetRoom(id); await client.forgetRoom(id);
return; return;
} }
@ -1135,7 +1135,7 @@ class Room {
if (client.database != null) { if (client.database != null) {
await client.database.transaction(() async { await client.database.transaction(() async {
await client.database.setRoomPrevBatch(resp.end, client.id, id); await client.database.setRoomPrevBatch(resp.end, id);
await loadFn(); await loadFn();
}); });
} else { } else {
@ -1188,7 +1188,7 @@ class Room {
Future<void> setReadMarker(String eventId, {String mRead}) async { Future<void> setReadMarker(String eventId, {String mRead}) async {
if (mRead != null) { if (mRead != null) {
notificationCount = 0; notificationCount = 0;
await client.database?.resetNotificationCount(client.id, id); await client.database?.resetNotificationCount(id);
} }
await client.setReadMarker( await client.setReadMarker(
id, id,
@ -1202,7 +1202,7 @@ class Room {
/// specified. /// specified.
Future<void> postReceipt(String eventId) async { Future<void> postReceipt(String eventId) async {
notificationCount = 0; notificationCount = 0;
await client.database?.resetNotificationCount(client.id, id); await client.database?.resetNotificationCount(id);
await client.postReceipt( await client.postReceipt(
id, id,
ReceiptType.mRead, ReceiptType.mRead,
@ -1216,7 +1216,7 @@ class Room {
@Deprecated('Use sendReadMarker instead') @Deprecated('Use sendReadMarker instead')
Future<void> sendReadReceipt(String eventID) async { Future<void> sendReadReceipt(String eventID) async {
notificationCount = 0; notificationCount = 0;
await client.database?.resetNotificationCount(client.id, id); await client.database?.resetNotificationCount(id);
await client.setReadMarker( await client.setReadMarker(
id, id,
eventID, eventID,
@ -1232,7 +1232,6 @@ class Room {
var events; var events;
if (client.database != null) { if (client.database != null) {
events = await client.database.getEventList( events = await client.database.getEventList(
client.id,
this, this,
limit: defaultHistoryCount, limit: defaultHistoryCount,
); );
@ -1286,7 +1285,7 @@ class Room {
Future<List<User>> requestParticipants() async { Future<List<User>> requestParticipants() async {
if (!participantListComplete && partial && client.database != null) { if (!participantListComplete && partial && client.database != null) {
// we aren't fully loaded, maybe the users are in the database // we aren't fully loaded, maybe the users are in the database
final users = await client.database.getUsers(client.id, this); final users = await client.database.getUsers(this);
for (final user in users) { for (final user in users) {
setState(user); setState(user);
} }
@ -1362,7 +1361,7 @@ class Room {
} }
if (client.database != null) { if (client.database != null) {
// it may be in the database // it may be in the database
final user = await client.database.getUser(client.id, mxID, this); final user = await client.database.getUser(mxID, this);
if (user != null) { if (user != null) {
setState(user); setState(user);
onUpdate.add(id); onUpdate.add(id);
@ -1419,7 +1418,6 @@ class Room {
'state_key': mxID, 'state_key': mxID,
}; };
await client.database.storeEventUpdate( await client.database.storeEventUpdate(
client.id,
EventUpdate( EventUpdate(
content: content, content: content,
roomID: id, roomID: id,

View File

@ -80,7 +80,6 @@ class Timeline {
try { try {
// Look up for events in hive first // Look up for events in hive first
final eventsFromStore = await room.client.database?.getEventList( final eventsFromStore = await room.client.database?.getEventList(
room.client.id,
room, room,
start: events.length, start: events.length,
limit: Room.defaultHistoryCount, limit: Room.defaultHistoryCount,

View File

@ -358,15 +358,15 @@ class CrossSigningKey extends SignableKey {
@override @override
Future<void> setVerified(bool newVerified, [bool sign = true]) async { Future<void> setVerified(bool newVerified, [bool sign = true]) async {
await super.setVerified(newVerified, sign); await super.setVerified(newVerified, sign);
return client.database?.setVerifiedUserCrossSigningKey( return client.database
newVerified, client.id, userId, publicKey); ?.setVerifiedUserCrossSigningKey(newVerified, userId, publicKey);
} }
@override @override
Future<void> setBlocked(bool newBlocked) { Future<void> setBlocked(bool newBlocked) {
blocked = newBlocked; blocked = newBlocked;
return client.database?.setBlockedUserCrossSigningKey( return client.database
newBlocked, client.id, userId, publicKey); ?.setBlockedUserCrossSigningKey(newBlocked, userId, publicKey);
} }
CrossSigningKey.fromMatrixCrossSigningKey(MatrixCrossSigningKey k, Client cl) CrossSigningKey.fromMatrixCrossSigningKey(MatrixCrossSigningKey k, Client cl)
@ -433,14 +433,14 @@ class DeviceKeys extends SignableKey {
Future<void> setVerified(bool newVerified, [bool sign = true]) async { Future<void> setVerified(bool newVerified, [bool sign = true]) async {
await super.setVerified(newVerified, sign); await super.setVerified(newVerified, sign);
return client?.database return client?.database
?.setVerifiedUserDeviceKey(newVerified, client.id, userId, deviceId); ?.setVerifiedUserDeviceKey(newVerified, userId, deviceId);
} }
@override @override
Future<void> setBlocked(bool newBlocked) { Future<void> setBlocked(bool newBlocked) {
blocked = newBlocked; blocked = newBlocked;
return client?.database return client?.database
?.setBlockedUserDeviceKey(newBlocked, client.id, userId, deviceId); ?.setBlockedUserDeviceKey(newBlocked, userId, deviceId);
} }
DeviceKeys.fromMatrixDeviceKeys(MatrixDeviceKeys k, Client cl, DeviceKeys.fromMatrixDeviceKeys(MatrixDeviceKeys k, Client cl,

View File

@ -29,7 +29,9 @@ import 'fake_database.dart';
void main() { void main() {
/// All Tests related to the ChatTime /// All Tests related to the ChatTime
group('Hive Database Test', () { group('Hive Database Test', () {
testDatabase(getHiveDatabase(null), 0); testDatabase(
getHiveDatabase(null),
);
}); });
} }
@ -44,7 +46,9 @@ Future<bool> olmEnabled() async {
return olmEnabled; return olmEnabled;
} }
void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) { void testDatabase(
Future<DatabaseApi> futureDatabase,
) {
DatabaseApi database; DatabaseApi database;
int toDeviceQueueIndex; int toDeviceQueueIndex;
test('Open', () async { test('Open', () async {
@ -76,19 +80,18 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('insertIntoToDeviceQueue', () async { test('insertIntoToDeviceQueue', () async {
toDeviceQueueIndex = await database.insertIntoToDeviceQueue( toDeviceQueueIndex = await database.insertIntoToDeviceQueue(
clientId,
'm.test', 'm.test',
'txnId', 'txnId',
'{"foo":"bar"}', '{"foo":"bar"}',
); );
}); });
test('getToDeviceEventQueue', () async { test('getToDeviceEventQueue', () async {
final toDeviceQueue = await database.getToDeviceEventQueue(clientId); final toDeviceQueue = await database.getToDeviceEventQueue();
expect(toDeviceQueue.first.type, 'm.test'); expect(toDeviceQueue.first.type, 'm.test');
}); });
test('deleteFromToDeviceQueue', () async { test('deleteFromToDeviceQueue', () async {
await database.deleteFromToDeviceQueue(clientId, toDeviceQueueIndex); await database.deleteFromToDeviceQueue(toDeviceQueueIndex);
final toDeviceQueue = await database.getToDeviceEventQueue(clientId); final toDeviceQueue = await database.getToDeviceEventQueue();
expect(toDeviceQueue.isEmpty, true); expect(toDeviceQueue.isEmpty, true);
}); });
test('storeFile', () async { test('storeFile', () async {
@ -112,7 +115,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
'limited_timeline': false, 'limited_timeline': false,
'membership': Membership.join, 'membership': Membership.join,
}); });
await database.storeRoomUpdate(clientId, '!testroom', roomUpdate); await database.storeRoomUpdate('!testroom', roomUpdate);
final rooms = await database.getRoomList(Client('testclient')); final rooms = await database.getRoomList(Client('testclient'));
expect(rooms.single.id, '!testroom'); expect(rooms.single.id, '!testroom');
}); });
@ -121,12 +124,12 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
expect(list.single.id, '!testroom'); expect(list.single.id, '!testroom');
}); });
test('setRoomPrevBatch', () async { test('setRoomPrevBatch', () async {
await database.setRoomPrevBatch('1234', clientId, '!testroom'); await database.setRoomPrevBatch('1234', '!testroom');
final rooms = await database.getRoomList(Client('testclient')); final rooms = await database.getRoomList(Client('testclient'));
expect(rooms.single.prev_batch, '1234'); expect(rooms.single.prev_batch, '1234');
}); });
test('forgetRoom', () async { test('forgetRoom', () async {
await database.forgetRoom(clientId, '!testroom'); await database.forgetRoom('!testroom');
final rooms = await database.getRoomList(Client('testclient')); final rooms = await database.getRoomList(Client('testclient'));
expect(rooms.isEmpty, true); expect(rooms.isEmpty, true);
}); });
@ -134,7 +137,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
await database.getClient('name'); await database.getClient('name');
}); });
test('insertClient', () async { test('insertClient', () async {
clientId = await database.insertClient( await database.insertClient(
'name', 'name',
'homeserverUrl', 'homeserverUrl',
'token', 'token',
@ -144,6 +147,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
'prevBatch', 'prevBatch',
'olmAccount', 'olmAccount',
); );
final client = await database.getClient('name'); final client = await database.getClient('name');
expect(client['token'], 'token'); expect(client['token'], 'token');
}); });
@ -156,36 +160,38 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
'deviceName', 'deviceName',
'prevBatch', 'prevBatch',
'olmAccount', 'olmAccount',
clientId,
); );
final client = await database.getClient('name'); final client = await database.getClient('name');
expect(client['token'], 'token_different'); expect(client['token'], 'token_different');
}); });
test('updateClientKeys', () async { test('updateClientKeys', () async {
await database.updateClientKeys('olmAccount2', clientId); await database.updateClientKeys(
'olmAccount2',
);
final client = await database.getClient('name'); final client = await database.getClient('name');
expect(client['olm_account'], 'olmAccount2'); expect(client['olm_account'], 'olmAccount2');
}); });
test('storeSyncFilterId', () async { test('storeSyncFilterId', () async {
await database.storeSyncFilterId('1234', clientId); await database.storeSyncFilterId(
'1234',
);
final client = await database.getClient('name'); final client = await database.getClient('name');
expect(client['sync_filter_id'], '1234'); expect(client['sync_filter_id'], '1234');
}); });
test('getAccountData', () async { test('getAccountData', () async {
await database.getAccountData(clientId); await database.getAccountData();
}); });
test('storeAccountData', () async { test('storeAccountData', () async {
await database.storeAccountData(clientId, 'm.test', '{"foo":"bar"}'); await database.storeAccountData('m.test', '{"foo":"bar"}');
final events = await database.getAccountData(clientId); final events = await database.getAccountData();
expect(events.values.single.type, 'm.test'); expect(events.values.single.type, 'm.test');
await database.storeAccountData(clientId, 'm.abc+de', '{"foo":"bar"}'); await database.storeAccountData('m.abc+de', '{"foo":"bar"}');
final events2 = await database.getAccountData(clientId); final events2 = await database.getAccountData();
expect(events2.values.any((element) => element.type == 'm.abc+de'), true); expect(events2.values.any((element) => element.type == 'm.abc+de'), true);
}); });
test('storeEventUpdate', () async { test('storeEventUpdate', () async {
await database.storeEventUpdate( await database.storeEventUpdate(
clientId,
EventUpdate( EventUpdate(
roomID: '!testroom:example.com', roomID: '!testroom:example.com',
type: EventUpdateType.timeline, type: EventUpdateType.timeline,
@ -211,45 +217,41 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getEventById', () async { test('getEventById', () async {
final event = await database.getEventById( final event = await database.getEventById(
clientId, '\$event:example.com', Room(id: '!testroom:example.com')); '\$event:example.com', Room(id: '!testroom:example.com'));
expect(event.type, EventTypes.Message); expect(event.type, EventTypes.Message);
}); });
test('getEventList', () async { test('getEventList', () async {
final events = await database.getEventList( final events =
clientId, Room(id: '!testroom:example.com')); await database.getEventList(Room(id: '!testroom:example.com'));
expect(events.single.type, EventTypes.Message); expect(events.single.type, EventTypes.Message);
}); });
test('getUser', () async { test('getUser', () async {
final user = await database.getUser( final user = await database.getUser(
clientId, '@bob:example.org', Room(id: '!testroom:example.com')); '@bob:example.org', Room(id: '!testroom:example.com'));
expect(user, null); expect(user, null);
}); });
test('getUsers', () async { test('getUsers', () async {
final users = final users = await database.getUsers(Room(id: '!testroom:example.com'));
await database.getUsers(clientId, Room(id: '!testroom:example.com'));
expect(users.isEmpty, true); expect(users.isEmpty, true);
}); });
test('removeEvent', () async { test('removeEvent', () async {
await database.removeEvent( await database.removeEvent('\$event:example.com', '!testroom:example.com');
clientId, '\$event:example.com', '!testroom:example.com');
final event = await database.getEventById( final event = await database.getEventById(
clientId, '\$event:example.com', Room(id: '!testroom:example.com')); '\$event:example.com', Room(id: '!testroom:example.com'));
expect(event, null); expect(event, null);
}); });
test('getAllInboundGroupSessions', () async { test('getAllInboundGroupSessions', () async {
final result = await database.getAllInboundGroupSessions(clientId); final result = await database.getAllInboundGroupSessions();
expect(result.isEmpty, true); expect(result.isEmpty, true);
}); });
test('getInboundGroupSession', () async { test('getInboundGroupSession', () async {
await database.getInboundGroupSession( await database.getInboundGroupSession('!testroom:example.com', 'sessionId');
clientId, '!testroom:example.com', 'sessionId');
}); });
test('getInboundGroupSessionsToUpload', () async { test('getInboundGroupSessionsToUpload', () async {
await database.getInboundGroupSessionsToUpload(); await database.getInboundGroupSessionsToUpload();
}); });
test('storeInboundGroupSession', () async { test('storeInboundGroupSession', () async {
await database.storeInboundGroupSession( await database.storeInboundGroupSession(
clientId,
'!testroom:example.com', '!testroom:example.com',
'sessionId', 'sessionId',
'pickle', 'pickle',
@ -260,7 +262,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
'{}', '{}',
); );
final session = await database.getInboundGroupSession( final session = await database.getInboundGroupSession(
clientId,
'!testroom:example.com', '!testroom:example.com',
'sessionId', 'sessionId',
); );
@ -268,15 +269,14 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('markInboundGroupSessionAsUploaded', () async { test('markInboundGroupSessionAsUploaded', () async {
await database.markInboundGroupSessionAsUploaded( await database.markInboundGroupSessionAsUploaded(
clientId, '!testroom:example.com', 'sessionId'); '!testroom:example.com', 'sessionId');
}); });
test('markInboundGroupSessionsAsNeedingUpload', () async { test('markInboundGroupSessionsAsNeedingUpload', () async {
await database.markInboundGroupSessionsAsNeedingUpload(clientId); await database.markInboundGroupSessionsAsNeedingUpload();
}); });
test('updateInboundGroupSessionAllowedAtIndex', () async { test('updateInboundGroupSessionAllowedAtIndex', () async {
await database.updateInboundGroupSessionAllowedAtIndex( await database.updateInboundGroupSessionAllowedAtIndex(
'{}', '{}',
clientId,
'!testroom:example.com', '!testroom:example.com',
'sessionId', 'sessionId',
); );
@ -284,19 +284,17 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('updateInboundGroupSessionIndexes', () async { test('updateInboundGroupSessionIndexes', () async {
await database.updateInboundGroupSessionIndexes( await database.updateInboundGroupSessionIndexes(
'{}', '{}',
clientId,
'!testroom:example.com', '!testroom:example.com',
'sessionId', 'sessionId',
); );
}); });
test('getSSSSCache', () async { test('getSSSSCache', () async {
final cache = await database.getSSSSCache(clientId, 'type'); final cache = await database.getSSSSCache('type');
expect(cache, null); expect(cache, null);
}); });
test('storeSSSSCache', () async { test('storeSSSSCache', () async {
await database.storeSSSSCache( await database.storeSSSSCache('type', 'keyId', 'ciphertext', '{}');
clientId, 'type', 'keyId', 'ciphertext', '{}'); final cache = await database.getSSSSCache('type');
final cache = await database.getSSSSCache(clientId, 'type');
expect(cache.type, 'type'); expect(cache.type, 'type');
expect(cache.keyId, 'keyId'); expect(cache.keyId, 'keyId');
expect(cache.ciphertext, 'ciphertext'); expect(cache.ciphertext, 'ciphertext');
@ -304,7 +302,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getOlmSessions', () async { test('getOlmSessions', () async {
final olm = await database.getOlmSessions( final olm = await database.getOlmSessions(
clientId,
'identityKey', 'identityKey',
'userId', 'userId',
); );
@ -312,7 +309,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getOlmSessionsForDevices', () async { test('getOlmSessionsForDevices', () async {
final olm = await database.getOlmSessionsForDevices( final olm = await database.getOlmSessionsForDevices(
clientId,
['identityKeys'], ['identityKeys'],
'userId', 'userId',
); );
@ -321,14 +317,12 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('storeOlmSession', () async { test('storeOlmSession', () async {
if (!(await olmEnabled())) return; if (!(await olmEnabled())) return;
await database.storeOlmSession( await database.storeOlmSession(
clientId,
'identityKey', 'identityKey',
'sessionId', 'sessionId',
'pickle', 'pickle',
0, 0,
); );
final olm = await database.getOlmSessions( final olm = await database.getOlmSessions(
clientId,
'identityKey', 'identityKey',
'userId', 'userId',
); );
@ -336,7 +330,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getOutboundGroupSession', () async { test('getOutboundGroupSession', () async {
final session = await database.getOutboundGroupSession( final session = await database.getOutboundGroupSession(
clientId,
'!testroom:example.com', '!testroom:example.com',
'@alice:example.com', '@alice:example.com',
); );
@ -345,7 +338,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('storeOutboundGroupSession', () async { test('storeOutboundGroupSession', () async {
if (!(await olmEnabled())) return; if (!(await olmEnabled())) return;
await database.storeOutboundGroupSession( await database.storeOutboundGroupSession(
clientId,
'!testroom:example.com', '!testroom:example.com',
'pickle', 'pickle',
'{}', '{}',
@ -353,7 +345,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
0, 0,
); );
final session = await database.getOutboundGroupSession( final session = await database.getOutboundGroupSession(
clientId,
'!testroom:example.com', '!testroom:example.com',
'@alice:example.com', '@alice:example.com',
); );
@ -361,7 +352,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getLastSentMessageUserDeviceKey', () async { test('getLastSentMessageUserDeviceKey', () async {
final list = await database.getLastSentMessageUserDeviceKey( final list = await database.getLastSentMessageUserDeviceKey(
clientId,
'userId', 'userId',
'deviceId', 'deviceId',
); );
@ -369,7 +359,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('getUnimportantRoomEventStatesForRoom', () async { test('getUnimportantRoomEventStatesForRoom', () async {
final events = await database.getUnimportantRoomEventStatesForRoom( final events = await database.getUnimportantRoomEventStatesForRoom(
clientId,
['events'], ['events'],
Room(id: '!mep'), Room(id: '!mep'),
); );
@ -380,7 +369,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
}); });
test('storeUserCrossSigningKey', () async { test('storeUserCrossSigningKey', () async {
await database.storeUserCrossSigningKey( await database.storeUserCrossSigningKey(
clientId,
'@alice:example.com', '@alice:example.com',
'publicKey', 'publicKey',
'{}', '{}',
@ -391,7 +379,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('setVerifiedUserCrossSigningKey', () async { test('setVerifiedUserCrossSigningKey', () async {
await database.setVerifiedUserCrossSigningKey( await database.setVerifiedUserCrossSigningKey(
true, true,
clientId,
'@alice:example.com', '@alice:example.com',
'publicKey', 'publicKey',
); );
@ -399,28 +386,24 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('setBlockedUserCrossSigningKey', () async { test('setBlockedUserCrossSigningKey', () async {
await database.setBlockedUserCrossSigningKey( await database.setBlockedUserCrossSigningKey(
true, true,
clientId,
'@alice:example.com', '@alice:example.com',
'publicKey', 'publicKey',
); );
}); });
test('removeUserCrossSigningKey', () async { test('removeUserCrossSigningKey', () async {
await database.removeUserCrossSigningKey( await database.removeUserCrossSigningKey(
clientId,
'@alice:example.com', '@alice:example.com',
'publicKey', 'publicKey',
); );
}); });
test('storeUserDeviceKeysInfo', () async { test('storeUserDeviceKeysInfo', () async {
await database.storeUserDeviceKeysInfo( await database.storeUserDeviceKeysInfo(
clientId,
'@alice:example.com', '@alice:example.com',
true, true,
); );
}); });
test('storeUserDeviceKey', () async { test('storeUserDeviceKey', () async {
await database.storeUserDeviceKey( await database.storeUserDeviceKey(
clientId,
'@alice:example.com', '@alice:example.com',
'deviceId', 'deviceId',
'{}', '{}',
@ -432,7 +415,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('setVerifiedUserDeviceKey', () async { test('setVerifiedUserDeviceKey', () async {
await database.setVerifiedUserDeviceKey( await database.setVerifiedUserDeviceKey(
true, true,
clientId,
'@alice:example.com', '@alice:example.com',
'deviceId', 'deviceId',
); );
@ -440,7 +422,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
test('setBlockedUserDeviceKey', () async { test('setBlockedUserDeviceKey', () async {
await database.setBlockedUserDeviceKey( await database.setBlockedUserDeviceKey(
true, true,
clientId,
'@alice:example.com', '@alice:example.com',
'deviceId', 'deviceId',
); );
@ -448,13 +429,13 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
// Clearing up from here // Clearing up from here
test('clearSSSSCache', () async { test('clearSSSSCache', () async {
await database.clearSSSSCache(clientId); await database.clearSSSSCache();
}); });
test('clearCache', () async { test('clearCache', () async {
await database.clearCache(clientId); await database.clearCache();
}); });
test('clear', () async { test('clear', () async {
await database.clear(clientId); await database.clear();
}); });
test('Close', () async { test('Close', () async {
await database.close(); await database.close();

View File

@ -166,7 +166,6 @@ void main() {
'floof': 'foxhole', 'floof': 'foxhole',
}, },
}), }),
client.id,
userId, userId,
deviceId); deviceId);
var event = ToDeviceEvent( var event = ToDeviceEvent(
@ -194,7 +193,6 @@ void main() {
'floof': 'foxhole', 'floof': 'foxhole',
}, },
}), }),
client.id,
userId, userId,
deviceId); deviceId);
event = ToDeviceEvent( event = ToDeviceEvent(
@ -218,7 +216,6 @@ void main() {
'floof': 'foxhole', 'floof': 'foxhole',
}, },
}), }),
client.id,
userId, userId,
deviceId); deviceId);
event = ToDeviceEvent( event = ToDeviceEvent(
@ -242,7 +239,6 @@ void main() {
'type': 'm.dummy', 'type': 'm.dummy',
'content': {}, 'content': {},
}), }),
client.id,
userId, userId,
deviceId); deviceId);
event = ToDeviceEvent( event = ToDeviceEvent(

View File

@ -26,11 +26,10 @@ import 'fake_database.dart';
void main() { void main() {
group('Databse', () { group('Databse', () {
Logs().level = Level.error; Logs().level = Level.error;
var clientId = -1;
final room = Room(id: '!room:blubb'); final room = Room(id: '!room:blubb');
test('setupDatabase', () async { test('setupDatabase', () async {
final database = await getDatabase(null); final database = await getDatabase(null);
clientId = await database.insertClient( await database.insertClient(
'testclient', 'testclient',
'https://example.org', 'https://example.org',
'blubb', 'blubb',
@ -38,8 +37,10 @@ void main() {
null, null,
null, null,
null, null,
null); null,
);
}); });
test('storeEventUpdate', () async { test('storeEventUpdate', () async {
final database = await getDatabase(null); final database = await getDatabase(null);
// store a simple update // store a simple update
@ -54,8 +55,8 @@ void main() {
'sender': '@blah:blubb', 'sender': '@blah:blubb',
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
var event = await database.getEventById(clientId, '\$event-1', room); var event = await database.getEventById('\$event-1', room);
expect(event.eventId, '\$event-1'); expect(event.eventId, '\$event-1');
// insert a transaction id // insert a transaction id
@ -71,8 +72,8 @@ void main() {
'status': 0, 'status': 0,
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, 'transaction-1', room); event = await database.getEventById('transaction-1', room);
expect(event.eventId, 'transaction-1'); expect(event.eventId, 'transaction-1');
update = EventUpdate( update = EventUpdate(
type: EventUpdateType.timeline, type: EventUpdateType.timeline,
@ -89,10 +90,10 @@ void main() {
'status': 1, 'status': 1,
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, 'transaction-1', room); event = await database.getEventById('transaction-1', room);
expect(event, null); expect(event, null);
event = await database.getEventById(clientId, '\$event-2', room); event = await database.getEventById('\$event-2', room);
// insert a transaction id if the event id for it already exists // insert a transaction id if the event id for it already exists
update = EventUpdate( update = EventUpdate(
@ -107,8 +108,8 @@ void main() {
'status': 0, 'status': 0,
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, '\$event-3', room); event = await database.getEventById('\$event-3', room);
expect(event.eventId, '\$event-3'); expect(event.eventId, '\$event-3');
update = EventUpdate( update = EventUpdate(
type: EventUpdateType.timeline, type: EventUpdateType.timeline,
@ -125,11 +126,11 @@ void main() {
}, },
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, '\$event-3', room); event = await database.getEventById('\$event-3', room);
expect(event.eventId, '\$event-3'); expect(event.eventId, '\$event-3');
expect(event.status, 1); expect(event.status, 1);
event = await database.getEventById(clientId, 'transaction-2', room); event = await database.getEventById('transaction-2', room);
expect(event, null); expect(event, null);
// insert transaction id and not update status // insert transaction id and not update status
@ -145,8 +146,8 @@ void main() {
'status': 2, 'status': 2,
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, '\$event-4', room); event = await database.getEventById('\$event-4', room);
expect(event.eventId, '\$event-4'); expect(event.eventId, '\$event-4');
update = EventUpdate( update = EventUpdate(
type: EventUpdateType.timeline, type: EventUpdateType.timeline,
@ -163,11 +164,11 @@ void main() {
}, },
}, },
); );
await database.storeEventUpdate(clientId, update); await database.storeEventUpdate(update);
event = await database.getEventById(clientId, '\$event-4', room); event = await database.getEventById('\$event-4', room);
expect(event.eventId, '\$event-4'); expect(event.eventId, '\$event-4');
expect(event.status, 2); expect(event.status, 2);
event = await database.getEventById(clientId, 'transaction-3', room); event = await database.getEventById('transaction-3', room);
expect(event, null); expect(event, null);
}); });
}); });