refactor: remove unused clientId
This commit is contained in:
parent
42434761e8
commit
77ca7523d0
|
|
@ -220,10 +220,7 @@ class Encryption {
|
|||
// 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
|
||||
client.database?.updateInboundGroupSessionIndexes(
|
||||
json.encode(inboundGroupSession.indexes),
|
||||
client.id,
|
||||
roomId,
|
||||
sessionId);
|
||||
json.encode(inboundGroupSession.indexes), roomId, sessionId);
|
||||
}
|
||||
decryptedPayload = json.decode(decryptResult.plaintext);
|
||||
} catch (exception) {
|
||||
|
|
@ -301,7 +298,6 @@ class Encryption {
|
|||
event.room?.setState(event);
|
||||
}
|
||||
await client.database?.storeEventUpdate(
|
||||
client.id,
|
||||
EventUpdate(
|
||||
content: event.toJson(),
|
||||
roomID: event.roomId,
|
||||
|
|
|
|||
|
|
@ -149,7 +149,6 @@ class KeyManager {
|
|||
}
|
||||
client.database
|
||||
?.storeInboundGroupSession(
|
||||
client.id,
|
||||
roomId,
|
||||
sessionId,
|
||||
inboundGroupSession.pickle(client.userID),
|
||||
|
|
@ -164,8 +163,7 @@ class KeyManager {
|
|||
return;
|
||||
}
|
||||
if (uploaded) {
|
||||
client.database
|
||||
.markInboundGroupSessionAsUploaded(client.id, roomId, sessionId);
|
||||
client.database.markInboundGroupSessionAsUploaded(roomId, sessionId);
|
||||
} else {
|
||||
_haveKeysToUpload = true;
|
||||
}
|
||||
|
|
@ -238,8 +236,8 @@ class KeyManager {
|
|||
}
|
||||
return sess; // nothing to do
|
||||
}
|
||||
final session = await client.database
|
||||
?.getInboundGroupSession(client.id, roomId, sessionId);
|
||||
final session =
|
||||
await client.database?.getInboundGroupSession(roomId, sessionId);
|
||||
if (session == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -382,7 +380,6 @@ class KeyManager {
|
|||
if (client.database != null) {
|
||||
await client.database.updateInboundGroupSessionAllowedAtIndex(
|
||||
json.encode(inboundSess.allowedAtIndex),
|
||||
client.id,
|
||||
room.id,
|
||||
sess.outboundGroupSession.session_id());
|
||||
}
|
||||
|
|
@ -401,7 +398,7 @@ class KeyManager {
|
|||
}
|
||||
sess.dispose();
|
||||
_outboundGroupSessions.remove(roomId);
|
||||
await client.database?.removeOutboundGroupSession(client.id, roomId);
|
||||
await client.database?.removeOutboundGroupSession(roomId);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -412,7 +409,6 @@ class KeyManager {
|
|||
return;
|
||||
}
|
||||
await client.database?.storeOutboundGroupSession(
|
||||
client.id,
|
||||
roomId,
|
||||
sess.outboundGroupSession.pickle(client.userID),
|
||||
json.encode(sess.devices),
|
||||
|
|
@ -516,7 +512,6 @@ class KeyManager {
|
|||
}
|
||||
_loadedOutboundGroupSessions.add(roomId);
|
||||
final sess = await client.database.getOutboundGroupSession(
|
||||
client.id,
|
||||
roomId,
|
||||
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
|
||||
for (final dbSession in dbSessions) {
|
||||
await client.database.markInboundGroupSessionAsUploaded(
|
||||
client.id, dbSession.roomId, dbSession.sessionId);
|
||||
dbSession.roomId, dbSession.sessionId);
|
||||
}
|
||||
} finally {
|
||||
decryption.free();
|
||||
|
|
|
|||
|
|
@ -233,7 +233,9 @@ class OlmManager {
|
|||
// in case the app gets killed during upload or the upload fails due to bad network
|
||||
// we can still re-try later
|
||||
if (updateDatabase) {
|
||||
await client.database?.updateClientKeys(pickledOlmAccount, client.id);
|
||||
await client.database?.updateClientKeys(
|
||||
pickledOlmAccount,
|
||||
);
|
||||
}
|
||||
final response = await client.uploadKeys(
|
||||
deviceKeys: uploadDeviceKeys
|
||||
|
|
@ -245,7 +247,7 @@ class OlmManager {
|
|||
// mark the OTKs as published and save that to datbase
|
||||
_olmAccount.mark_keys_as_published();
|
||||
if (updateDatabase) {
|
||||
await client.database?.updateClientKeys(pickledOlmAccount, client.id);
|
||||
await client.database?.updateClientKeys(pickledOlmAccount);
|
||||
}
|
||||
return (uploadedOneTimeKeysCount != null &&
|
||||
response['signed_curve25519'] == uploadedOneTimeKeysCount) ||
|
||||
|
|
@ -309,7 +311,6 @@ class OlmManager {
|
|||
return;
|
||||
}
|
||||
await client.database.storeOlmSession(
|
||||
client.id,
|
||||
session.identityKey,
|
||||
session.sessionId,
|
||||
session.pickledSession,
|
||||
|
|
@ -346,7 +347,6 @@ class OlmManager {
|
|||
device.lastActive = DateTime.now();
|
||||
await client.database?.setLastActiveUserDeviceKey(
|
||||
device.lastActive.millisecondsSinceEpoch,
|
||||
client.id,
|
||||
device.userId,
|
||||
device.deviceId);
|
||||
}
|
||||
|
|
@ -383,7 +383,9 @@ class OlmManager {
|
|||
try {
|
||||
newSession.create_inbound_from(_olmAccount, senderKey, body);
|
||||
_olmAccount.remove_one_time_keys(newSession);
|
||||
client.database?.updateClientKeys(pickledOlmAccount, client.id);
|
||||
client.database?.updateClientKeys(
|
||||
pickledOlmAccount,
|
||||
);
|
||||
plaintext = newSession.decrypt(type, body);
|
||||
runInRoot(() => storeOlmSession(OlmSession(
|
||||
key: client.userID,
|
||||
|
|
@ -424,8 +426,8 @@ class OlmManager {
|
|||
if (client.database == null) {
|
||||
return [];
|
||||
}
|
||||
final olmSessions = await client.database
|
||||
.getOlmSessions(client.id, senderKey, client.userID);
|
||||
final olmSessions =
|
||||
await client.database.getOlmSessions(senderKey, client.userID);
|
||||
return olmSessions.where((sess) => sess.isValid).toList();
|
||||
}
|
||||
|
||||
|
|
@ -435,7 +437,6 @@ class OlmManager {
|
|||
return;
|
||||
}
|
||||
final rows = await client.database.getOlmSessionsForDevices(
|
||||
client.id,
|
||||
senderKeys,
|
||||
client.userID,
|
||||
);
|
||||
|
|
@ -596,7 +597,6 @@ class OlmManager {
|
|||
'type': type,
|
||||
'content': payload,
|
||||
}),
|
||||
client.id,
|
||||
device.userId,
|
||||
device.deviceId));
|
||||
}
|
||||
|
|
@ -660,8 +660,7 @@ class OlmManager {
|
|||
Logs().v(
|
||||
'[OlmManager] Device ${device.userId}:${device.deviceId} generated a new olm session, replaying last sent message...');
|
||||
final lastSentMessageRes = await client.database
|
||||
.getLastSentMessageUserDeviceKey(
|
||||
client.id, device.userId, device.deviceId);
|
||||
.getLastSentMessageUserDeviceKey(device.userId, device.deviceId);
|
||||
if (lastSentMessageRes.isEmpty ||
|
||||
(lastSentMessageRes.first?.isEmpty ?? true)) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class SSSS {
|
|||
|
||||
// for testing
|
||||
Future<void> clearCache() async {
|
||||
await client.database?.clearSSSSCache(client.id);
|
||||
await client.database?.clearSSSSCache();
|
||||
_cache.clear();
|
||||
}
|
||||
|
||||
|
|
@ -282,7 +282,7 @@ class SSSS {
|
|||
if (_cache.containsKey(type) && isValid(_cache[type])) {
|
||||
return _cache[type].content;
|
||||
}
|
||||
final ret = await client.database.getSSSSCache(client.id, type);
|
||||
final ret = await client.database.getSSSSCache(type);
|
||||
if (ret == null) {
|
||||
return null;
|
||||
}
|
||||
|
|
@ -311,7 +311,7 @@ class SSSS {
|
|||
if (cacheTypes.contains(type) && client.database != null) {
|
||||
// cache the thing
|
||||
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) {
|
||||
_cacheCallbacks[type](decrypted);
|
||||
}
|
||||
|
|
@ -344,7 +344,7 @@ class SSSS {
|
|||
if (cacheTypes.contains(type) && client.database != null) {
|
||||
// cache the thing
|
||||
await client.database
|
||||
.storeSSSSCache(client.id, type, keyId, encrypted.ciphertext, secret);
|
||||
.storeSSSSCache(type, keyId, encrypted.ciphertext, secret);
|
||||
if (triggerCacheCallback) {
|
||||
_cacheCallbacks[type](secret);
|
||||
}
|
||||
|
|
@ -369,8 +369,8 @@ class SSSS {
|
|||
await client.setAccountData(client.userID, type, content);
|
||||
if (cacheTypes.contains(type) && client.database != null) {
|
||||
// cache the thing
|
||||
await client.database.storeSSSSCache(client.id, type, keyId,
|
||||
content['encrypted'][keyId]['ciphertext'], secret);
|
||||
await client.database.storeSSSSCache(
|
||||
type, keyId, content['encrypted'][keyId]['ciphertext'], secret);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -532,8 +532,8 @@ class SSSS {
|
|||
if (keyId != null) {
|
||||
final ciphertext = client.accountData[request.type]
|
||||
.content['encrypted'][keyId]['ciphertext'];
|
||||
await client.database.storeSSSSCache(
|
||||
client.id, request.type, keyId, ciphertext, secret);
|
||||
await client.database
|
||||
.storeSSSSCache(request.type, keyId, ciphertext, secret);
|
||||
if (_cacheCallbacks.containsKey(request.type)) {
|
||||
_cacheCallbacks[request.type](secret);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -575,7 +575,7 @@ class Bootstrap {
|
|||
await newSsssKey.store(megolmKey, base64.encode(privKey));
|
||||
Logs().v(
|
||||
'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) {
|
||||
Logs().e('[Bootstrapping] Error setting up online key backup', e, s);
|
||||
state = BootstrapState.error;
|
||||
|
|
|
|||
|
|
@ -980,7 +980,6 @@ class Client extends MatrixApi {
|
|||
_deviceName,
|
||||
prevBatch,
|
||||
encryption?.pickledOlmAccount,
|
||||
id,
|
||||
);
|
||||
} else {
|
||||
_id = await database.insertClient(
|
||||
|
|
@ -997,7 +996,7 @@ class Client extends MatrixApi {
|
|||
_userDeviceKeys = await database.getUserDeviceKeys(this);
|
||||
_rooms = await database.getRoomList(this);
|
||||
_sortRooms();
|
||||
accountData = await database.getAccountData(id);
|
||||
accountData = await database.getAccountData();
|
||||
presences.clear();
|
||||
}
|
||||
_initLock = false;
|
||||
|
|
@ -1030,7 +1029,7 @@ class Client extends MatrixApi {
|
|||
Logs().outputEvents.clear();
|
||||
try {
|
||||
await abortSync();
|
||||
await database?.clear(id);
|
||||
await database?.clear();
|
||||
_backgroundSync = true;
|
||||
} catch (e, s) {
|
||||
Logs().e('Unable to clear database', e, s);
|
||||
|
|
@ -1093,7 +1092,7 @@ class Client extends MatrixApi {
|
|||
Future<void> _checkSyncFilter() async {
|
||||
if (syncFilterId == null) {
|
||||
syncFilterId = await defineFilter(userID, syncFilter);
|
||||
await database?.storeSyncFilterId(syncFilterId, id);
|
||||
await database?.storeSyncFilterId(syncFilterId);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -1132,7 +1131,7 @@ class Client extends MatrixApi {
|
|||
_currentTransaction = database.transaction(() async {
|
||||
await _handleSync(syncResp);
|
||||
if (prevBatch != syncResp.nextBatch) {
|
||||
await database.storePrevBatch(syncResp.nextBatch, id);
|
||||
await database.storePrevBatch(syncResp.nextBatch);
|
||||
}
|
||||
});
|
||||
await _currentTransaction;
|
||||
|
|
@ -1218,7 +1217,6 @@ class Client extends MatrixApi {
|
|||
for (final newAccountData in sync.accountData) {
|
||||
if (database != null) {
|
||||
await database.storeAccountData(
|
||||
id,
|
||||
newAccountData.type,
|
||||
jsonEncode(newAccountData.content),
|
||||
);
|
||||
|
|
@ -1243,7 +1241,7 @@ class Client extends MatrixApi {
|
|||
if (_userDeviceKeys.containsKey(userId)) {
|
||||
_userDeviceKeys[userId].outdated = true;
|
||||
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) {
|
||||
// TODO: This method seems to be rather slow for some updates
|
||||
// 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);
|
||||
|
||||
|
|
@ -1427,13 +1425,13 @@ class Client extends MatrixApi {
|
|||
database != 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
|
||||
final user = await database.getUser(id, event['sender'], room);
|
||||
final user = await database.getUser(event['sender'], room);
|
||||
if (user != null) {
|
||||
room.setState(user);
|
||||
}
|
||||
}
|
||||
if (type != EventUpdateType.ephemeral && database != null) {
|
||||
await database.storeEventUpdate(id, update);
|
||||
await database.storeEventUpdate(update);
|
||||
}
|
||||
_updateRoomsByEventUpdate(update);
|
||||
if (encryptionEnabled) {
|
||||
|
|
@ -1708,7 +1706,7 @@ class Client extends MatrixApi {
|
|||
// Check if deviceId or deviceKeys are known
|
||||
if (!oldKeys.containsKey(deviceId)) {
|
||||
final oldPublicKeys =
|
||||
await database.deviceIdSeen(id, userId, deviceId);
|
||||
await database.deviceIdSeen(userId, deviceId);
|
||||
if (oldPublicKeys != null &&
|
||||
oldPublicKeys != entry.curve25519Key + entry.ed25519Key) {
|
||||
Logs().w(
|
||||
|
|
@ -1716,25 +1714,24 @@ class Client extends MatrixApi {
|
|||
continue;
|
||||
}
|
||||
final oldDeviceId =
|
||||
await database.publicKeySeen(id, entry.ed25519Key);
|
||||
await database.publicKeySeen(entry.ed25519Key);
|
||||
if (oldDeviceId != null && oldDeviceId != deviceId) {
|
||||
Logs().w(
|
||||
'Already seen ED25519 has been added again. This might be an attack!');
|
||||
continue;
|
||||
}
|
||||
final oldDeviceId2 =
|
||||
await database.publicKeySeen(id, entry.curve25519Key);
|
||||
await database.publicKeySeen(entry.curve25519Key);
|
||||
if (oldDeviceId2 != null && oldDeviceId2 != deviceId) {
|
||||
Logs().w(
|
||||
'Already seen Curve25519 has been added again. This might be an attack!');
|
||||
continue;
|
||||
}
|
||||
await database.addSeenDeviceId(id, userId, deviceId,
|
||||
entry.curve25519Key + entry.ed25519Key);
|
||||
await database.addSeenDeviceId(
|
||||
userId, deviceId, entry.curve25519Key + entry.ed25519Key);
|
||||
await database.addSeenPublicKey(entry.ed25519Key, deviceId);
|
||||
await database.addSeenPublicKey(
|
||||
id, entry.ed25519Key, deviceId);
|
||||
await database.addSeenPublicKey(
|
||||
id, entry.curve25519Key, deviceId);
|
||||
entry.curve25519Key, deviceId);
|
||||
}
|
||||
|
||||
// is this a new key or the same one as an old one?
|
||||
|
|
@ -1756,7 +1753,6 @@ class Client extends MatrixApi {
|
|||
entry.setDirectVerified(true);
|
||||
}
|
||||
dbActions.add(() => database.storeUserDeviceKey(
|
||||
id,
|
||||
userId,
|
||||
deviceId,
|
||||
json.encode(entry.toJson()),
|
||||
|
|
@ -1780,14 +1776,14 @@ class Client extends MatrixApi {
|
|||
final deviceId = oldDeviceKeyEntry.key;
|
||||
if (!_userDeviceKeys[userId].deviceKeys.containsKey(deviceId)) {
|
||||
// we need to remove an old key
|
||||
dbActions.add(
|
||||
() => database.removeUserDeviceKey(id, userId, deviceId));
|
||||
dbActions
|
||||
.add(() => database.removeUserDeviceKey(userId, deviceId));
|
||||
}
|
||||
}
|
||||
_userDeviceKeys[userId].outdated = false;
|
||||
if (database != null) {
|
||||
dbActions.add(
|
||||
() => database.storeUserDeviceKeysInfo(id, userId, false));
|
||||
dbActions
|
||||
.add(() => database.storeUserDeviceKeysInfo(userId, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1819,8 +1815,8 @@ class Client extends MatrixApi {
|
|||
} else if (database != null) {
|
||||
// There is a previous cross-signing key with this usage, that we no
|
||||
// longer need/use. Clear it from the database.
|
||||
dbActions.add(() => database.removeUserCrossSigningKey(
|
||||
id, userId, oldEntry.key));
|
||||
dbActions.add(() =>
|
||||
database.removeUserCrossSigningKey(userId, oldEntry.key));
|
||||
}
|
||||
}
|
||||
final entry = CrossSigningKey.fromMatrixCrossSigningKey(
|
||||
|
|
@ -1845,7 +1841,6 @@ class Client extends MatrixApi {
|
|||
}
|
||||
if (database != null) {
|
||||
dbActions.add(() => database.storeUserCrossSigningKey(
|
||||
id,
|
||||
userId,
|
||||
publicKey,
|
||||
json.encode(entry.toJson()),
|
||||
|
|
@ -1856,8 +1851,8 @@ class Client extends MatrixApi {
|
|||
}
|
||||
_userDeviceKeys[userId].outdated = false;
|
||||
if (database != null) {
|
||||
dbActions.add(
|
||||
() => database.storeUserDeviceKeysInfo(id, userId, false));
|
||||
dbActions
|
||||
.add(() => database.storeUserDeviceKeysInfo(userId, false));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1892,7 +1887,7 @@ class Client extends MatrixApi {
|
|||
if (database == null || !_toDeviceQueueNeedsProcessing) {
|
||||
return;
|
||||
}
|
||||
final entries = await database.getToDeviceEventQueue(id);
|
||||
final entries = await database.getToDeviceEventQueue();
|
||||
if (entries.isEmpty) {
|
||||
_toDeviceQueueNeedsProcessing = false;
|
||||
return;
|
||||
|
|
@ -1907,7 +1902,7 @@ class Client extends MatrixApi {
|
|||
k, Map<String, dynamic>.from(v)))));
|
||||
|
||||
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) {
|
||||
_toDeviceQueueNeedsProcessing = true;
|
||||
await database.insertIntoToDeviceQueue(
|
||||
id, eventType, txnId, json.encode(messages));
|
||||
eventType, txnId, json.encode(messages));
|
||||
}
|
||||
rethrow;
|
||||
}
|
||||
|
|
@ -2140,7 +2135,7 @@ class Client extends MatrixApi {
|
|||
await abortSync();
|
||||
prevBatch = null;
|
||||
rooms.clear();
|
||||
await database?.clearCache(id);
|
||||
await database?.clearCache();
|
||||
encryption?.keyManager?.clearOutboundGroupSessions();
|
||||
onCacheCleared.add(true);
|
||||
// Restart the syncloop
|
||||
|
|
@ -2246,11 +2241,10 @@ class Client extends MatrixApi {
|
|||
);
|
||||
Logs().d('Migrate SSSSCache...');
|
||||
for (final type in cacheTypes) {
|
||||
final ssssCache = await legacyDatabase.getSSSSCache(_id, type);
|
||||
final ssssCache = await legacyDatabase.getSSSSCache(type);
|
||||
if (ssssCache != null) {
|
||||
Logs().d('Migrate $type...');
|
||||
await database.storeSSSSCache(
|
||||
_id,
|
||||
type,
|
||||
ssssCache.keyId,
|
||||
ssssCache.ciphertext,
|
||||
|
|
@ -2267,7 +2261,6 @@ class Client extends MatrixApi {
|
|||
Logs().d(
|
||||
'Migrate cross signing key with usage ${crossSigningKey.usage} and verified ${crossSigningKey.directVerified}...');
|
||||
await database.storeUserCrossSigningKey(
|
||||
_id,
|
||||
userId,
|
||||
crossSigningKey.publicKey,
|
||||
jsonEncode(crossSigningKey.toJson()),
|
||||
|
|
@ -2278,7 +2271,6 @@ class Client extends MatrixApi {
|
|||
for (final deviceKeys in deviceKeysList.deviceKeys.values) {
|
||||
Logs().d('Migrate device keys for ${deviceKeys.deviceId}...');
|
||||
await database.storeUserDeviceKey(
|
||||
_id,
|
||||
userId,
|
||||
deviceKeys.deviceId,
|
||||
jsonEncode(deviceKeys.toJson()),
|
||||
|
|
@ -2288,17 +2280,15 @@ class Client extends MatrixApi {
|
|||
);
|
||||
}
|
||||
Logs().d('Migrate user device keys info...');
|
||||
await database.storeUserDeviceKeysInfo(
|
||||
_id, userId, deviceKeysList.outdated);
|
||||
await database.storeUserDeviceKeysInfo(userId, deviceKeysList.outdated);
|
||||
}
|
||||
Logs().d('Migrate inbound group sessions...');
|
||||
try {
|
||||
final sessions = await legacyDatabase.getAllInboundGroupSessions(_id);
|
||||
final sessions = await legacyDatabase.getAllInboundGroupSessions();
|
||||
for (var i = 0; i < sessions.length; i++) {
|
||||
Logs().d('$i / ${sessions.length}');
|
||||
final session = sessions[i];
|
||||
await database.storeInboundGroupSession(
|
||||
_id,
|
||||
session.roomId,
|
||||
session.sessionId,
|
||||
session.pickle,
|
||||
|
|
@ -2313,7 +2303,7 @@ class Client extends MatrixApi {
|
|||
Logs().e('Unable to migrate inbound group sessions!', e, s);
|
||||
}
|
||||
|
||||
await legacyDatabase.clear(_id);
|
||||
await legacyDatabase.clear();
|
||||
await legacyDatabaseDestroyer?.call(this);
|
||||
}
|
||||
await legacyDatabase.close();
|
||||
|
|
|
|||
|
|
@ -39,7 +39,6 @@ abstract class DatabaseApi {
|
|||
String deviceName,
|
||||
String prevBatch,
|
||||
String olmAccount,
|
||||
int clientId,
|
||||
);
|
||||
|
||||
Future insertClient(
|
||||
|
|
@ -55,34 +54,32 @@ abstract class DatabaseApi {
|
|||
|
||||
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
|
||||
/// [transaction].
|
||||
Future<void> storeRoomUpdate(
|
||||
int clientId, String roomId, SyncRoomUpdate roomUpdate,
|
||||
Future<void> storeRoomUpdate(String roomId, SyncRoomUpdate roomUpdate,
|
||||
[Room oldRoom]);
|
||||
|
||||
/// Stores an EventUpdate object in the database. Must be called inside of
|
||||
/// [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(
|
||||
int clientId,
|
||||
Room room, {
|
||||
int start = 0,
|
||||
int limit,
|
||||
|
|
@ -92,39 +89,35 @@ abstract class DatabaseApi {
|
|||
|
||||
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<SSSSCache?> getSSSSCache(int clientId, String type);
|
||||
Future<SSSSCache?> getSSSSCache(String type);
|
||||
|
||||
Future<OutboundGroupSession?> getOutboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String userId,
|
||||
);
|
||||
|
||||
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions(
|
||||
int clientId,
|
||||
);
|
||||
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions();
|
||||
|
||||
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
);
|
||||
|
||||
Future updateInboundGroupSessionIndexes(
|
||||
String indexes,
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
);
|
||||
|
||||
Future storeInboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
String pickle,
|
||||
|
|
@ -136,22 +129,19 @@ abstract class DatabaseApi {
|
|||
);
|
||||
|
||||
Future markInboundGroupSessionAsUploaded(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
);
|
||||
|
||||
Future updateInboundGroupSessionAllowedAtIndex(
|
||||
String allowedAtIndex,
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
);
|
||||
|
||||
Future removeOutboundGroupSession(int clientId, String roomId);
|
||||
Future removeOutboundGroupSession(String roomId);
|
||||
|
||||
Future storeOutboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String pickle,
|
||||
String deviceIds,
|
||||
|
|
@ -159,10 +149,11 @@ abstract class DatabaseApi {
|
|||
int sentMessages,
|
||||
);
|
||||
|
||||
Future updateClientKeys(String olmAccount, int clientId);
|
||||
Future updateClientKeys(
|
||||
String olmAccount,
|
||||
);
|
||||
|
||||
Future storeOlmSession(
|
||||
int clientId,
|
||||
String identitiyKey,
|
||||
String sessionId,
|
||||
String pickle,
|
||||
|
|
@ -171,42 +162,39 @@ abstract class DatabaseApi {
|
|||
|
||||
Future setLastActiveUserDeviceKey(
|
||||
int lastActive,
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
||||
Future setLastSentMessageUserDeviceKey(
|
||||
String lastSentMessage,
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
||||
Future clearSSSSCache(int clientId);
|
||||
Future clearSSSSCache();
|
||||
|
||||
Future storeSSSSCache(
|
||||
int clientId,
|
||||
String type,
|
||||
String keyId,
|
||||
String ciphertext,
|
||||
String content,
|
||||
);
|
||||
|
||||
Future markInboundGroupSessionsAsNeedingUpload(int clientId);
|
||||
Future markInboundGroupSessionsAsNeedingUpload();
|
||||
|
||||
Future storePrevBatch(String prevBatch, int clientId);
|
||||
Future storePrevBatch(
|
||||
String prevBatch,
|
||||
);
|
||||
|
||||
Future deleteOldFiles(int savedAt);
|
||||
|
||||
Future storeUserDeviceKeysInfo(
|
||||
int clientId,
|
||||
String userId,
|
||||
bool outdated,
|
||||
);
|
||||
|
||||
Future storeUserDeviceKey(
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
String content,
|
||||
|
|
@ -216,19 +204,16 @@ abstract class DatabaseApi {
|
|||
);
|
||||
|
||||
Future removeUserDeviceKey(
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
||||
Future removeUserCrossSigningKey(
|
||||
int clientId,
|
||||
String userId,
|
||||
String publicKey,
|
||||
);
|
||||
|
||||
Future storeUserCrossSigningKey(
|
||||
int clientId,
|
||||
String userId,
|
||||
String publicKey,
|
||||
String content,
|
||||
|
|
@ -236,84 +221,73 @@ abstract class DatabaseApi {
|
|||
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(
|
||||
double oldestSortOrder,
|
||||
double newestSortOrder,
|
||||
int clientId,
|
||||
String roomId,
|
||||
);
|
||||
|
||||
Future setRoomPrevBatch(
|
||||
String prevBatch,
|
||||
int clientId,
|
||||
String roomId,
|
||||
);
|
||||
|
||||
Future resetNotificationCount(int clientId, String roomId);
|
||||
Future resetNotificationCount(String roomId);
|
||||
|
||||
Future setVerifiedUserCrossSigningKey(
|
||||
bool verified,
|
||||
int clientId,
|
||||
String userId,
|
||||
String publicKey,
|
||||
);
|
||||
|
||||
Future setBlockedUserCrossSigningKey(
|
||||
bool blocked,
|
||||
int clientId,
|
||||
String userId,
|
||||
String publicKey,
|
||||
);
|
||||
|
||||
Future setVerifiedUserDeviceKey(
|
||||
bool verified,
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
||||
Future setBlockedUserDeviceKey(
|
||||
bool blocked,
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
||||
Future<List<Event>> getUnimportantRoomEventStatesForRoom(
|
||||
int clientId,
|
||||
List<String> events,
|
||||
Room room,
|
||||
);
|
||||
|
||||
Future<List<OlmSession>> getOlmSessions(
|
||||
int clientId,
|
||||
String identityKey,
|
||||
String userId,
|
||||
);
|
||||
|
||||
Future<List<OlmSession>> getOlmSessionsForDevices(
|
||||
int clientId,
|
||||
List<String> identityKeys,
|
||||
String userId,
|
||||
);
|
||||
|
||||
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue(int clientId);
|
||||
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue();
|
||||
|
||||
/// Please do `jsonEncode(content)` in your code to stay compatible with
|
||||
/// auto generated methods here.
|
||||
Future insertIntoToDeviceQueue(
|
||||
int clientId,
|
||||
String type,
|
||||
String txnId,
|
||||
String content,
|
||||
);
|
||||
|
||||
Future<List<String>> getLastSentMessageUserDeviceKey(
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
);
|
||||
|
|
@ -321,14 +295,13 @@ abstract class DatabaseApi {
|
|||
Future<List<StoredInboundGroupSession>> getInboundGroupSessionsToUpload();
|
||||
|
||||
Future<void> addSeenDeviceId(
|
||||
int clientId, String userId, String deviceId, String publicKeys);
|
||||
String userId, String deviceId, String publicKeys);
|
||||
|
||||
Future<void> addSeenPublicKey(
|
||||
int clientId, String publicKey, String deviceId);
|
||||
Future<void> addSeenPublicKey(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();
|
||||
|
||||
|
|
|
|||
|
|
@ -231,22 +231,21 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
convertToJson(raw),
|
||||
Client(''),
|
||||
);
|
||||
await addSeenDeviceId(0, deviceKeys.userId, deviceKeys.deviceId,
|
||||
await addSeenDeviceId(deviceKeys.userId, deviceKeys.deviceId,
|
||||
deviceKeys.curve25519Key + deviceKeys.ed25519Key);
|
||||
await addSeenPublicKey(0, deviceKeys.ed25519Key, deviceKeys.deviceId);
|
||||
await addSeenPublicKey(
|
||||
0, deviceKeys.curve25519Key, deviceKeys.deviceId);
|
||||
await addSeenPublicKey(deviceKeys.ed25519Key, deviceKeys.deviceId);
|
||||
await addSeenPublicKey(deviceKeys.curve25519Key, deviceKeys.deviceId);
|
||||
} catch (e) {
|
||||
Logs().w('Can not migrate device $key', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
await clearCache(0);
|
||||
await clearCache();
|
||||
await _clientBox.put('version', version);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> clear(int clientId) async {
|
||||
Future<void> clear() async {
|
||||
Logs().i('Clear and close hive database...');
|
||||
await _actionOnAllBoxes((box) async {
|
||||
try {
|
||||
|
|
@ -261,7 +260,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> clearCache(int clientId) async {
|
||||
Future<void> clearCache() async {
|
||||
await _roomsBox.deleteAll(_roomsBox.keys);
|
||||
await _accountDataBox.deleteAll(_accountDataBox.keys);
|
||||
await _roomStateBox.deleteAll(_roomStateBox.keys);
|
||||
|
|
@ -274,7 +273,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> clearSSSSCache(int clientId) async {
|
||||
Future<void> clearSSSSCache() async {
|
||||
await _ssssCacheBox.deleteAll(_ssssCacheBox.keys);
|
||||
}
|
||||
|
||||
|
|
@ -282,7 +281,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
Future<void> close() => _actionOnAllBoxes((box) => box.close());
|
||||
|
||||
@override
|
||||
Future<void> deleteFromToDeviceQueue(int clientId, int id) async {
|
||||
Future<void> deleteFromToDeviceQueue(int id) async {
|
||||
await _toDeviceQueueBox.delete(id);
|
||||
return;
|
||||
}
|
||||
|
|
@ -293,7 +292,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> forgetRoom(int clientId, String roomId) async {
|
||||
Future<void> forgetRoom(String roomId) async {
|
||||
await _timelineFragmentsBox.delete(MultiKey(roomId, '').toString());
|
||||
for (final key in _eventsBox.keys) {
|
||||
final multiKey = MultiKey.fromString(key);
|
||||
|
|
@ -319,7 +318,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<Map<String, BasicEvent>> getAccountData(int clientId) async {
|
||||
Future<Map<String, BasicEvent>> getAccountData() async {
|
||||
final accountData = <String, BasicEvent>{};
|
||||
for (final key in _accountDataBox.keys) {
|
||||
final raw = await _accountDataBox.get(key);
|
||||
|
|
@ -343,14 +342,14 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@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());
|
||||
if (raw == null) return null;
|
||||
return Event.fromJson(convertToJson(raw), room);
|
||||
}
|
||||
|
||||
@override
|
||||
bool eventIsKnown(int clientId, String eventId, String roomId) =>
|
||||
bool eventIsKnown(String eventId, String roomId) =>
|
||||
_eventsBox.keys.contains(MultiKey(roomId, eventId).toString());
|
||||
|
||||
/// Loads a whole list of events at once from the store for a specific room
|
||||
|
|
@ -368,7 +367,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<List<Event>> getEventList(
|
||||
int clientId,
|
||||
Room room, {
|
||||
int start = 0,
|
||||
int? limit,
|
||||
|
|
@ -404,7 +402,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
) async {
|
||||
|
|
@ -432,7 +429,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<List<String>> getLastSentMessageUserDeviceKey(
|
||||
int clientId, String userId, String deviceId) async {
|
||||
String userId, String deviceId) async {
|
||||
final raw =
|
||||
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
|
||||
if (raw == null) return <String>[];
|
||||
|
|
@ -440,8 +437,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeOlmSession(int clientId, String identityKey,
|
||||
String sessionId, String pickle, int lastReceived) async {
|
||||
Future<void> storeOlmSession(String identityKey, String sessionId,
|
||||
String pickle, int lastReceived) async {
|
||||
final rawSessions =
|
||||
(await _olmSessionsBox.get(identityKey.toHiveKey) as Map?) ?? {};
|
||||
rawSessions[sessionId] = <String, dynamic>{
|
||||
|
|
@ -456,7 +453,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<List<OlmSession>> getOlmSessions(
|
||||
int clientId, String identityKey, String userId) async {
|
||||
String identityKey, String userId) async {
|
||||
final rawSessions =
|
||||
await _olmSessionsBox.get(identityKey.toHiveKey) as Map?;
|
||||
if (rawSessions == null || rawSessions.isEmpty) return <OlmSession>[];
|
||||
|
|
@ -467,15 +464,15 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<List<OlmSession>> getOlmSessionsForDevices(
|
||||
int clientId, List<String> identityKey, String userId) async {
|
||||
final sessions = await Future.wait(identityKey
|
||||
.map((identityKey) => getOlmSessions(clientId, identityKey, userId)));
|
||||
List<String> identityKey, String userId) async {
|
||||
final sessions = await Future.wait(
|
||||
identityKey.map((identityKey) => getOlmSessions(identityKey, userId)));
|
||||
return <OlmSession>[for (final sublist in sessions) ...sublist];
|
||||
}
|
||||
|
||||
@override
|
||||
Future<OutboundGroupSession?> getOutboundGroupSession(
|
||||
int clientId, String roomId, String userId) async {
|
||||
String roomId, String userId) async {
|
||||
final raw = await _outboundGroupSessionsBox.get(roomId.toHiveKey);
|
||||
if (raw == null) return null;
|
||||
return OutboundGroupSession.fromJson(convertToJson(raw), userId);
|
||||
|
|
@ -555,14 +552,14 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<SSSSCache?> getSSSSCache(int clientId, String type) async {
|
||||
Future<SSSSCache?> getSSSSCache(String type) async {
|
||||
final raw = await _ssssCacheBox.get(type);
|
||||
if (raw == null) return null;
|
||||
return SSSSCache.fromJson(convertToJson(raw));
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue(int clientId) async =>
|
||||
Future<List<QueuedToDeviceEvent>> getToDeviceEventQueue() async =>
|
||||
await Future.wait(_toDeviceQueueBox.keys.map((i) async {
|
||||
final raw = await _toDeviceQueueBox.get(i);
|
||||
raw['id'] = i;
|
||||
|
|
@ -571,7 +568,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
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 tuple = MultiKey.fromString(key);
|
||||
return tuple.parts.first == room.id && !events.contains(tuple.parts[1]);
|
||||
|
|
@ -587,7 +584,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<User?> getUser(int clientId, String userId, Room room) async {
|
||||
Future<User?> getUser(String userId, Room room) async {
|
||||
final state =
|
||||
await _roomMembersBox.get(MultiKey(room.id, userId).toString());
|
||||
if (state == null) return null;
|
||||
|
|
@ -627,7 +624,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<List<User>> getUsers(int clientId, Room room) async {
|
||||
Future<List<User>> getUsers(Room room) async {
|
||||
final users = <User>[];
|
||||
for (final key in _roomMembersBox.keys) {
|
||||
final statesKey = MultiKey.fromString(key);
|
||||
|
|
@ -661,7 +658,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
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>{
|
||||
'type': type,
|
||||
'txn_id': txnId,
|
||||
|
|
@ -671,7 +668,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> markInboundGroupSessionAsUploaded(
|
||||
int clientId, String roomId, String sessionId) async {
|
||||
String roomId, String sessionId) async {
|
||||
final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey);
|
||||
if (raw == null) {
|
||||
Logs().w(
|
||||
|
|
@ -684,7 +681,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> markInboundGroupSessionsAsNeedingUpload(int clientId) async {
|
||||
Future<void> markInboundGroupSessionsAsNeedingUpload() async {
|
||||
for (final sessionId in _inboundGroupSessionsBox.keys) {
|
||||
final raw = await _inboundGroupSessionsBox.get(sessionId);
|
||||
raw['uploaded'] = false;
|
||||
|
|
@ -694,7 +691,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@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());
|
||||
for (final key in _timelineFragmentsBox.keys) {
|
||||
final multiKey = MultiKey.fromString(key);
|
||||
|
|
@ -710,28 +707,27 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> removeOutboundGroupSession(int clientId, String roomId) async {
|
||||
Future<void> removeOutboundGroupSession(String roomId) async {
|
||||
await _outboundGroupSessionsBox.delete(roomId.toHiveKey);
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> removeUserCrossSigningKey(
|
||||
int clientId, String userId, String publicKey) async {
|
||||
String userId, String publicKey) async {
|
||||
await _userCrossSigningKeysBox
|
||||
.delete(MultiKey(userId, publicKey).toString());
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> removeUserDeviceKey(
|
||||
int clientId, String userId, String deviceId) async {
|
||||
Future<void> removeUserDeviceKey(String userId, String deviceId) async {
|
||||
await _userDeviceKeysBox.delete(MultiKey(userId, deviceId).toString());
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> resetNotificationCount(int clientId, String roomId) async {
|
||||
Future<void> resetNotificationCount(String roomId) async {
|
||||
final raw = await _roomsBox.get(roomId.toHiveKey);
|
||||
if (raw == null) return;
|
||||
raw['notification_count'] = raw['highlight_count'] = 0;
|
||||
|
|
@ -741,7 +737,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> setBlockedUserCrossSigningKey(
|
||||
bool blocked, int clientId, String userId, String publicKey) async {
|
||||
bool blocked, String userId, String publicKey) async {
|
||||
final raw = await _userCrossSigningKeysBox
|
||||
.get(MultiKey(userId, publicKey).toString());
|
||||
raw['blocked'] = blocked;
|
||||
|
|
@ -754,7 +750,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> setBlockedUserDeviceKey(
|
||||
bool blocked, int clientId, String userId, String deviceId) async {
|
||||
bool blocked, String userId, String deviceId) async {
|
||||
final raw =
|
||||
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
|
||||
raw['blocked'] = blocked;
|
||||
|
|
@ -767,7 +763,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> setLastActiveUserDeviceKey(
|
||||
int lastActive, int clientId, String userId, String deviceId) async {
|
||||
int lastActive, String userId, String deviceId) async {
|
||||
final raw =
|
||||
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
|
||||
raw['last_active'] = lastActive;
|
||||
|
|
@ -778,8 +774,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> setLastSentMessageUserDeviceKey(String lastSentMessage,
|
||||
int clientId, String userId, String deviceId) async {
|
||||
Future<void> setLastSentMessageUserDeviceKey(
|
||||
String lastSentMessage, String userId, String deviceId) async {
|
||||
final raw =
|
||||
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
|
||||
raw['last_sent_message'] = lastSentMessage;
|
||||
|
|
@ -790,8 +786,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> setRoomPrevBatch(
|
||||
String prevBatch, int clientId, String roomId) async {
|
||||
Future<void> setRoomPrevBatch(String prevBatch, String roomId) async {
|
||||
final raw = await _roomsBox.get(roomId.toHiveKey);
|
||||
if (raw == null) return;
|
||||
final room = Room.fromJson(convertToJson(raw));
|
||||
|
|
@ -802,7 +797,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> setVerifiedUserCrossSigningKey(
|
||||
bool verified, int clientId, String userId, String publicKey) async {
|
||||
bool verified, String userId, String publicKey) async {
|
||||
final raw = (await _userCrossSigningKeysBox
|
||||
.get(MultiKey(userId, publicKey).toString()) as Map?) ??
|
||||
{};
|
||||
|
|
@ -816,7 +811,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> setVerifiedUserDeviceKey(
|
||||
bool verified, int clientId, String userId, String deviceId) async {
|
||||
bool verified, String userId, String deviceId) async {
|
||||
final raw =
|
||||
await _userDeviceKeysBox.get(MultiKey(userId, deviceId).toString());
|
||||
raw['verified'] = verified;
|
||||
|
|
@ -828,23 +823,21 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeAccountData(
|
||||
int clientId, String type, String content) async {
|
||||
Future<void> storeAccountData(String type, String content) async {
|
||||
await _accountDataBox.put(
|
||||
type.toHiveKey, convertToJson(jsonDecode(content)));
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeEventUpdate(int clientId, EventUpdate eventUpdate) async {
|
||||
Future<void> storeEventUpdate(EventUpdate eventUpdate) async {
|
||||
// Ephemerals should not be stored
|
||||
if (eventUpdate.type == EventUpdateType.ephemeral) return;
|
||||
|
||||
// In case of this is a redaction event
|
||||
if (eventUpdate.content['type'] == EventTypes.Redaction) {
|
||||
final tmpRoom = Room(id: eventUpdate.roomID);
|
||||
final event =
|
||||
await getEventById(clientId, eventUpdate.content['redacts'], tmpRoom);
|
||||
final event = await getEventById(eventUpdate.content['redacts'], tmpRoom);
|
||||
if (event != null) {
|
||||
event.setRedactionEvent(Event.fromJson(eventUpdate.content, tmpRoom));
|
||||
await _eventsBox.put(
|
||||
|
|
@ -922,7 +915,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
// Is there a transaction id? Then delete the event with this id.
|
||||
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
|
||||
Future<void> storeInboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String sessionId,
|
||||
String pickle,
|
||||
|
|
@ -1003,7 +995,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
await _inboundGroupSessionsBox.put(
|
||||
sessionId.toHiveKey,
|
||||
StoredInboundGroupSession(
|
||||
clientId: clientId,
|
||||
roomId: roomId,
|
||||
sessionId: sessionId,
|
||||
pickle: pickle,
|
||||
|
|
@ -1018,13 +1009,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeOutboundGroupSession(
|
||||
int clientId,
|
||||
String roomId,
|
||||
String pickle,
|
||||
String deviceIds,
|
||||
int creationTime,
|
||||
int sentMessages) async {
|
||||
Future<void> storeOutboundGroupSession(String roomId, String pickle,
|
||||
String deviceIds, int creationTime, int sentMessages) async {
|
||||
await _outboundGroupSessionsBox.put(roomId.toHiveKey, <String, dynamic>{
|
||||
'room_id': roomId,
|
||||
'pickle': pickle,
|
||||
|
|
@ -1036,19 +1022,20 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storePrevBatch(String prevBatch, int clientId) async {
|
||||
Future<void> storePrevBatch(
|
||||
String prevBatch,
|
||||
) async {
|
||||
if (_clientBox.keys.isEmpty) return;
|
||||
await _clientBox.put('prev_batch', prevBatch);
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeRoomUpdate(
|
||||
int clientId, String roomId, SyncRoomUpdate roomUpdate,
|
||||
Future<void> storeRoomUpdate(String roomId, SyncRoomUpdate roomUpdate,
|
||||
[dynamic _]) async {
|
||||
// Leave room if membership is leave
|
||||
if (roomUpdate is LeftRoomUpdate) {
|
||||
await forgetRoom(clientId, roomId);
|
||||
await forgetRoom(roomId);
|
||||
return;
|
||||
}
|
||||
final membership = roomUpdate is LeftRoomUpdate
|
||||
|
|
@ -1106,8 +1093,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeSSSSCache(int clientId, String type, String keyId,
|
||||
String ciphertext, String content) async {
|
||||
Future<void> storeSSSSCache(
|
||||
String type, String keyId, String ciphertext, String content) async {
|
||||
await _ssssCacheBox.put(
|
||||
type,
|
||||
SSSSCache(
|
||||
|
|
@ -1119,13 +1106,15 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeSyncFilterId(String syncFilterId, int clientId) async {
|
||||
Future<void> storeSyncFilterId(
|
||||
String syncFilterId,
|
||||
) async {
|
||||
await _clientBox.put('sync_filter_id', syncFilterId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> storeUserCrossSigningKey(int clientId, String userId,
|
||||
String publicKey, String content, bool verified, bool blocked) async {
|
||||
Future<void> storeUserCrossSigningKey(String userId, String publicKey,
|
||||
String content, bool verified, bool blocked) async {
|
||||
await _userCrossSigningKeysBox.put(
|
||||
MultiKey(userId, publicKey).toString(),
|
||||
{
|
||||
|
|
@ -1139,7 +1128,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@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 {
|
||||
await _userDeviceKeysBox.put(MultiKey(userId, deviceId).toString(), {
|
||||
'user_id': userId,
|
||||
|
|
@ -1154,8 +1143,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> storeUserDeviceKeysInfo(
|
||||
int clientId, String userId, bool outdated) async {
|
||||
Future<void> storeUserDeviceKeysInfo(String userId, bool outdated) async {
|
||||
await _userDeviceKeysOutdatedBox.put(userId.toHiveKey, outdated);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1221,7 +1209,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
String deviceName,
|
||||
String prevBatch,
|
||||
String olmAccount,
|
||||
int clientId) async {
|
||||
) async {
|
||||
await _clientBox.put('homeserver_url', homeserverUrl);
|
||||
await _clientBox.put('token', token);
|
||||
await _clientBox.put('user_id', userId);
|
||||
|
|
@ -1233,14 +1221,16 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> updateClientKeys(String olmAccount, int clientId) async {
|
||||
Future<void> updateClientKeys(
|
||||
String olmAccount,
|
||||
) async {
|
||||
await _clientBox.put('olm_account', olmAccount);
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> updateInboundGroupSessionAllowedAtIndex(String allowedAtIndex,
|
||||
int clientId, String roomId, String sessionId) async {
|
||||
Future<void> updateInboundGroupSessionAllowedAtIndex(
|
||||
String allowedAtIndex, String roomId, String sessionId) async {
|
||||
final raw = await _inboundGroupSessionsBox.get(sessionId.toHiveKey);
|
||||
if (raw == null) {
|
||||
Logs().w(
|
||||
|
|
@ -1254,7 +1244,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
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);
|
||||
if (raw == null) {
|
||||
Logs().w(
|
||||
|
|
@ -1267,8 +1257,8 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> updateRoomSortOrder(double oldestSortOrder,
|
||||
double newestSortOrder, int clientId, String roomId) async {
|
||||
Future<void> updateRoomSortOrder(
|
||||
double oldestSortOrder, double newestSortOrder, String roomId) async {
|
||||
final raw = await _roomsBox.get(roomId.toHiveKey);
|
||||
raw['oldest_sort_order'] = oldestSortOrder;
|
||||
raw['newest_sort_order'] = newestSortOrder;
|
||||
|
|
@ -1277,8 +1267,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions(
|
||||
int clientId) async {
|
||||
Future<List<StoredInboundGroupSession>> getAllInboundGroupSessions() async {
|
||||
final rawSessions = await Future.wait(_inboundGroupSessionsBox.keys
|
||||
.map((key) => _inboundGroupSessionsBox.get(key)));
|
||||
return rawSessions
|
||||
|
|
@ -1288,7 +1277,6 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> addSeenDeviceId(
|
||||
int clientId,
|
||||
String userId,
|
||||
String deviceId,
|
||||
String publicKeysHash,
|
||||
|
|
@ -1298,14 +1286,13 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
|
||||
@override
|
||||
Future<void> addSeenPublicKey(
|
||||
int clientId,
|
||||
String publicKey,
|
||||
String deviceId,
|
||||
) =>
|
||||
_seenDeviceKeysBox.put(publicKey.toHiveKey, deviceId);
|
||||
|
||||
@override
|
||||
Future<String?> deviceIdSeen(int clientId, userId, deviceId) async {
|
||||
Future<String?> deviceIdSeen(userId, deviceId) async {
|
||||
final raw =
|
||||
await _seenDeviceIdsBox.get(MultiKey(userId, deviceId).toString());
|
||||
if (raw == null) return null;
|
||||
|
|
@ -1313,7 +1300,7 @@ class FamedlySdkHiveDatabase extends DatabaseApi {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<String?> publicKeySeen(int clientId, String publicKey) async {
|
||||
Future<String?> publicKeySeen(String publicKey) async {
|
||||
final raw = await _seenDeviceKeysBox.get(publicKey.toHiveKey);
|
||||
if (raw == null) return null;
|
||||
return raw as String;
|
||||
|
|
|
|||
|
|
@ -305,7 +305,7 @@ class Event extends MatrixEvent {
|
|||
/// from the database and the timelines. Returns false if not removed.
|
||||
Future<bool> remove() async {
|
||||
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(
|
||||
roomID: room.id,
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@ class Room {
|
|||
}
|
||||
final allStates = await client.database
|
||||
.getUnimportantRoomEventStatesForRoom(
|
||||
client.id, client.importantStateEvents.toList(), this);
|
||||
client.importantStateEvents.toList(), this);
|
||||
|
||||
for (final state in allStates) {
|
||||
setState(state);
|
||||
|
|
@ -342,7 +342,7 @@ class Room {
|
|||
if (prevEvent != null &&
|
||||
prevEvent.eventId != state.eventId &&
|
||||
client.database != null &&
|
||||
client.database.eventIsKnown(client.id, state.eventId, state.roomId)) {
|
||||
client.database.eventIsKnown(state.eventId, state.roomId)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1053,7 +1053,7 @@ class Room {
|
|||
|
||||
/// Call the Matrix API to forget this room if you already left it.
|
||||
Future<void> forget() async {
|
||||
await client.database?.forgetRoom(client.id, id);
|
||||
await client.database?.forgetRoom(id);
|
||||
await client.forgetRoom(id);
|
||||
return;
|
||||
}
|
||||
|
|
@ -1135,7 +1135,7 @@ class Room {
|
|||
|
||||
if (client.database != null) {
|
||||
await client.database.transaction(() async {
|
||||
await client.database.setRoomPrevBatch(resp.end, client.id, id);
|
||||
await client.database.setRoomPrevBatch(resp.end, id);
|
||||
await loadFn();
|
||||
});
|
||||
} else {
|
||||
|
|
@ -1188,7 +1188,7 @@ class Room {
|
|||
Future<void> setReadMarker(String eventId, {String mRead}) async {
|
||||
if (mRead != null) {
|
||||
notificationCount = 0;
|
||||
await client.database?.resetNotificationCount(client.id, id);
|
||||
await client.database?.resetNotificationCount(id);
|
||||
}
|
||||
await client.setReadMarker(
|
||||
id,
|
||||
|
|
@ -1202,7 +1202,7 @@ class Room {
|
|||
/// specified.
|
||||
Future<void> postReceipt(String eventId) async {
|
||||
notificationCount = 0;
|
||||
await client.database?.resetNotificationCount(client.id, id);
|
||||
await client.database?.resetNotificationCount(id);
|
||||
await client.postReceipt(
|
||||
id,
|
||||
ReceiptType.mRead,
|
||||
|
|
@ -1216,7 +1216,7 @@ class Room {
|
|||
@Deprecated('Use sendReadMarker instead')
|
||||
Future<void> sendReadReceipt(String eventID) async {
|
||||
notificationCount = 0;
|
||||
await client.database?.resetNotificationCount(client.id, id);
|
||||
await client.database?.resetNotificationCount(id);
|
||||
await client.setReadMarker(
|
||||
id,
|
||||
eventID,
|
||||
|
|
@ -1232,7 +1232,6 @@ class Room {
|
|||
var events;
|
||||
if (client.database != null) {
|
||||
events = await client.database.getEventList(
|
||||
client.id,
|
||||
this,
|
||||
limit: defaultHistoryCount,
|
||||
);
|
||||
|
|
@ -1286,7 +1285,7 @@ class Room {
|
|||
Future<List<User>> requestParticipants() async {
|
||||
if (!participantListComplete && partial && client.database != null) {
|
||||
// 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) {
|
||||
setState(user);
|
||||
}
|
||||
|
|
@ -1362,7 +1361,7 @@ class Room {
|
|||
}
|
||||
if (client.database != null) {
|
||||
// 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) {
|
||||
setState(user);
|
||||
onUpdate.add(id);
|
||||
|
|
@ -1419,7 +1418,6 @@ class Room {
|
|||
'state_key': mxID,
|
||||
};
|
||||
await client.database.storeEventUpdate(
|
||||
client.id,
|
||||
EventUpdate(
|
||||
content: content,
|
||||
roomID: id,
|
||||
|
|
|
|||
|
|
@ -80,7 +80,6 @@ class Timeline {
|
|||
try {
|
||||
// Look up for events in hive first
|
||||
final eventsFromStore = await room.client.database?.getEventList(
|
||||
room.client.id,
|
||||
room,
|
||||
start: events.length,
|
||||
limit: Room.defaultHistoryCount,
|
||||
|
|
|
|||
|
|
@ -358,15 +358,15 @@ class CrossSigningKey extends SignableKey {
|
|||
@override
|
||||
Future<void> setVerified(bool newVerified, [bool sign = true]) async {
|
||||
await super.setVerified(newVerified, sign);
|
||||
return client.database?.setVerifiedUserCrossSigningKey(
|
||||
newVerified, client.id, userId, publicKey);
|
||||
return client.database
|
||||
?.setVerifiedUserCrossSigningKey(newVerified, userId, publicKey);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setBlocked(bool newBlocked) {
|
||||
blocked = newBlocked;
|
||||
return client.database?.setBlockedUserCrossSigningKey(
|
||||
newBlocked, client.id, userId, publicKey);
|
||||
return client.database
|
||||
?.setBlockedUserCrossSigningKey(newBlocked, userId, publicKey);
|
||||
}
|
||||
|
||||
CrossSigningKey.fromMatrixCrossSigningKey(MatrixCrossSigningKey k, Client cl)
|
||||
|
|
@ -433,14 +433,14 @@ class DeviceKeys extends SignableKey {
|
|||
Future<void> setVerified(bool newVerified, [bool sign = true]) async {
|
||||
await super.setVerified(newVerified, sign);
|
||||
return client?.database
|
||||
?.setVerifiedUserDeviceKey(newVerified, client.id, userId, deviceId);
|
||||
?.setVerifiedUserDeviceKey(newVerified, userId, deviceId);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> setBlocked(bool newBlocked) {
|
||||
blocked = newBlocked;
|
||||
return client?.database
|
||||
?.setBlockedUserDeviceKey(newBlocked, client.id, userId, deviceId);
|
||||
?.setBlockedUserDeviceKey(newBlocked, userId, deviceId);
|
||||
}
|
||||
|
||||
DeviceKeys.fromMatrixDeviceKeys(MatrixDeviceKeys k, Client cl,
|
||||
|
|
|
|||
|
|
@ -29,7 +29,9 @@ import 'fake_database.dart';
|
|||
void main() {
|
||||
/// All Tests related to the ChatTime
|
||||
group('Hive Database Test', () {
|
||||
testDatabase(getHiveDatabase(null), 0);
|
||||
testDatabase(
|
||||
getHiveDatabase(null),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +46,9 @@ Future<bool> olmEnabled() async {
|
|||
return olmEnabled;
|
||||
}
|
||||
|
||||
void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
||||
void testDatabase(
|
||||
Future<DatabaseApi> futureDatabase,
|
||||
) {
|
||||
DatabaseApi database;
|
||||
int toDeviceQueueIndex;
|
||||
test('Open', () async {
|
||||
|
|
@ -76,19 +80,18 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('insertIntoToDeviceQueue', () async {
|
||||
toDeviceQueueIndex = await database.insertIntoToDeviceQueue(
|
||||
clientId,
|
||||
'm.test',
|
||||
'txnId',
|
||||
'{"foo":"bar"}',
|
||||
);
|
||||
});
|
||||
test('getToDeviceEventQueue', () async {
|
||||
final toDeviceQueue = await database.getToDeviceEventQueue(clientId);
|
||||
final toDeviceQueue = await database.getToDeviceEventQueue();
|
||||
expect(toDeviceQueue.first.type, 'm.test');
|
||||
});
|
||||
test('deleteFromToDeviceQueue', () async {
|
||||
await database.deleteFromToDeviceQueue(clientId, toDeviceQueueIndex);
|
||||
final toDeviceQueue = await database.getToDeviceEventQueue(clientId);
|
||||
await database.deleteFromToDeviceQueue(toDeviceQueueIndex);
|
||||
final toDeviceQueue = await database.getToDeviceEventQueue();
|
||||
expect(toDeviceQueue.isEmpty, true);
|
||||
});
|
||||
test('storeFile', () async {
|
||||
|
|
@ -112,7 +115,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
'limited_timeline': false,
|
||||
'membership': Membership.join,
|
||||
});
|
||||
await database.storeRoomUpdate(clientId, '!testroom', roomUpdate);
|
||||
await database.storeRoomUpdate('!testroom', roomUpdate);
|
||||
final rooms = await database.getRoomList(Client('testclient'));
|
||||
expect(rooms.single.id, '!testroom');
|
||||
});
|
||||
|
|
@ -121,12 +124,12 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
expect(list.single.id, '!testroom');
|
||||
});
|
||||
test('setRoomPrevBatch', () async {
|
||||
await database.setRoomPrevBatch('1234', clientId, '!testroom');
|
||||
await database.setRoomPrevBatch('1234', '!testroom');
|
||||
final rooms = await database.getRoomList(Client('testclient'));
|
||||
expect(rooms.single.prev_batch, '1234');
|
||||
});
|
||||
test('forgetRoom', () async {
|
||||
await database.forgetRoom(clientId, '!testroom');
|
||||
await database.forgetRoom('!testroom');
|
||||
final rooms = await database.getRoomList(Client('testclient'));
|
||||
expect(rooms.isEmpty, true);
|
||||
});
|
||||
|
|
@ -134,7 +137,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
await database.getClient('name');
|
||||
});
|
||||
test('insertClient', () async {
|
||||
clientId = await database.insertClient(
|
||||
await database.insertClient(
|
||||
'name',
|
||||
'homeserverUrl',
|
||||
'token',
|
||||
|
|
@ -144,6 +147,7 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
'prevBatch',
|
||||
'olmAccount',
|
||||
);
|
||||
|
||||
final client = await database.getClient('name');
|
||||
expect(client['token'], 'token');
|
||||
});
|
||||
|
|
@ -156,36 +160,38 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
'deviceName',
|
||||
'prevBatch',
|
||||
'olmAccount',
|
||||
clientId,
|
||||
);
|
||||
final client = await database.getClient('name');
|
||||
expect(client['token'], 'token_different');
|
||||
});
|
||||
test('updateClientKeys', () async {
|
||||
await database.updateClientKeys('olmAccount2', clientId);
|
||||
await database.updateClientKeys(
|
||||
'olmAccount2',
|
||||
);
|
||||
final client = await database.getClient('name');
|
||||
expect(client['olm_account'], 'olmAccount2');
|
||||
});
|
||||
test('storeSyncFilterId', () async {
|
||||
await database.storeSyncFilterId('1234', clientId);
|
||||
await database.storeSyncFilterId(
|
||||
'1234',
|
||||
);
|
||||
final client = await database.getClient('name');
|
||||
expect(client['sync_filter_id'], '1234');
|
||||
});
|
||||
test('getAccountData', () async {
|
||||
await database.getAccountData(clientId);
|
||||
await database.getAccountData();
|
||||
});
|
||||
test('storeAccountData', () async {
|
||||
await database.storeAccountData(clientId, 'm.test', '{"foo":"bar"}');
|
||||
final events = await database.getAccountData(clientId);
|
||||
await database.storeAccountData('m.test', '{"foo":"bar"}');
|
||||
final events = await database.getAccountData();
|
||||
expect(events.values.single.type, 'm.test');
|
||||
|
||||
await database.storeAccountData(clientId, 'm.abc+de', '{"foo":"bar"}');
|
||||
final events2 = await database.getAccountData(clientId);
|
||||
await database.storeAccountData('m.abc+de', '{"foo":"bar"}');
|
||||
final events2 = await database.getAccountData();
|
||||
expect(events2.values.any((element) => element.type == 'm.abc+de'), true);
|
||||
});
|
||||
test('storeEventUpdate', () async {
|
||||
await database.storeEventUpdate(
|
||||
clientId,
|
||||
EventUpdate(
|
||||
roomID: '!testroom:example.com',
|
||||
type: EventUpdateType.timeline,
|
||||
|
|
@ -211,45 +217,41 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getEventById', () async {
|
||||
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);
|
||||
});
|
||||
test('getEventList', () async {
|
||||
final events = await database.getEventList(
|
||||
clientId, Room(id: '!testroom:example.com'));
|
||||
final events =
|
||||
await database.getEventList(Room(id: '!testroom:example.com'));
|
||||
expect(events.single.type, EventTypes.Message);
|
||||
});
|
||||
test('getUser', () async {
|
||||
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);
|
||||
});
|
||||
test('getUsers', () async {
|
||||
final users =
|
||||
await database.getUsers(clientId, Room(id: '!testroom:example.com'));
|
||||
final users = await database.getUsers(Room(id: '!testroom:example.com'));
|
||||
expect(users.isEmpty, true);
|
||||
});
|
||||
test('removeEvent', () async {
|
||||
await database.removeEvent(
|
||||
clientId, '\$event:example.com', '!testroom:example.com');
|
||||
await database.removeEvent('\$event:example.com', '!testroom:example.com');
|
||||
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);
|
||||
});
|
||||
test('getAllInboundGroupSessions', () async {
|
||||
final result = await database.getAllInboundGroupSessions(clientId);
|
||||
final result = await database.getAllInboundGroupSessions();
|
||||
expect(result.isEmpty, true);
|
||||
});
|
||||
test('getInboundGroupSession', () async {
|
||||
await database.getInboundGroupSession(
|
||||
clientId, '!testroom:example.com', 'sessionId');
|
||||
await database.getInboundGroupSession('!testroom:example.com', 'sessionId');
|
||||
});
|
||||
test('getInboundGroupSessionsToUpload', () async {
|
||||
await database.getInboundGroupSessionsToUpload();
|
||||
});
|
||||
test('storeInboundGroupSession', () async {
|
||||
await database.storeInboundGroupSession(
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'sessionId',
|
||||
'pickle',
|
||||
|
|
@ -260,7 +262,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
'{}',
|
||||
);
|
||||
final session = await database.getInboundGroupSession(
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'sessionId',
|
||||
);
|
||||
|
|
@ -268,15 +269,14 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('markInboundGroupSessionAsUploaded', () async {
|
||||
await database.markInboundGroupSessionAsUploaded(
|
||||
clientId, '!testroom:example.com', 'sessionId');
|
||||
'!testroom:example.com', 'sessionId');
|
||||
});
|
||||
test('markInboundGroupSessionsAsNeedingUpload', () async {
|
||||
await database.markInboundGroupSessionsAsNeedingUpload(clientId);
|
||||
await database.markInboundGroupSessionsAsNeedingUpload();
|
||||
});
|
||||
test('updateInboundGroupSessionAllowedAtIndex', () async {
|
||||
await database.updateInboundGroupSessionAllowedAtIndex(
|
||||
'{}',
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'sessionId',
|
||||
);
|
||||
|
|
@ -284,19 +284,17 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('updateInboundGroupSessionIndexes', () async {
|
||||
await database.updateInboundGroupSessionIndexes(
|
||||
'{}',
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'sessionId',
|
||||
);
|
||||
});
|
||||
test('getSSSSCache', () async {
|
||||
final cache = await database.getSSSSCache(clientId, 'type');
|
||||
final cache = await database.getSSSSCache('type');
|
||||
expect(cache, null);
|
||||
});
|
||||
test('storeSSSSCache', () async {
|
||||
await database.storeSSSSCache(
|
||||
clientId, 'type', 'keyId', 'ciphertext', '{}');
|
||||
final cache = await database.getSSSSCache(clientId, 'type');
|
||||
await database.storeSSSSCache('type', 'keyId', 'ciphertext', '{}');
|
||||
final cache = await database.getSSSSCache('type');
|
||||
expect(cache.type, 'type');
|
||||
expect(cache.keyId, 'keyId');
|
||||
expect(cache.ciphertext, 'ciphertext');
|
||||
|
|
@ -304,7 +302,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getOlmSessions', () async {
|
||||
final olm = await database.getOlmSessions(
|
||||
clientId,
|
||||
'identityKey',
|
||||
'userId',
|
||||
);
|
||||
|
|
@ -312,7 +309,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getOlmSessionsForDevices', () async {
|
||||
final olm = await database.getOlmSessionsForDevices(
|
||||
clientId,
|
||||
['identityKeys'],
|
||||
'userId',
|
||||
);
|
||||
|
|
@ -321,14 +317,12 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('storeOlmSession', () async {
|
||||
if (!(await olmEnabled())) return;
|
||||
await database.storeOlmSession(
|
||||
clientId,
|
||||
'identityKey',
|
||||
'sessionId',
|
||||
'pickle',
|
||||
0,
|
||||
);
|
||||
final olm = await database.getOlmSessions(
|
||||
clientId,
|
||||
'identityKey',
|
||||
'userId',
|
||||
);
|
||||
|
|
@ -336,7 +330,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getOutboundGroupSession', () async {
|
||||
final session = await database.getOutboundGroupSession(
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'@alice:example.com',
|
||||
);
|
||||
|
|
@ -345,7 +338,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('storeOutboundGroupSession', () async {
|
||||
if (!(await olmEnabled())) return;
|
||||
await database.storeOutboundGroupSession(
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'pickle',
|
||||
'{}',
|
||||
|
|
@ -353,7 +345,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
0,
|
||||
);
|
||||
final session = await database.getOutboundGroupSession(
|
||||
clientId,
|
||||
'!testroom:example.com',
|
||||
'@alice:example.com',
|
||||
);
|
||||
|
|
@ -361,7 +352,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getLastSentMessageUserDeviceKey', () async {
|
||||
final list = await database.getLastSentMessageUserDeviceKey(
|
||||
clientId,
|
||||
'userId',
|
||||
'deviceId',
|
||||
);
|
||||
|
|
@ -369,7 +359,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('getUnimportantRoomEventStatesForRoom', () async {
|
||||
final events = await database.getUnimportantRoomEventStatesForRoom(
|
||||
clientId,
|
||||
['events'],
|
||||
Room(id: '!mep'),
|
||||
);
|
||||
|
|
@ -380,7 +369,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
});
|
||||
test('storeUserCrossSigningKey', () async {
|
||||
await database.storeUserCrossSigningKey(
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'publicKey',
|
||||
'{}',
|
||||
|
|
@ -391,7 +379,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('setVerifiedUserCrossSigningKey', () async {
|
||||
await database.setVerifiedUserCrossSigningKey(
|
||||
true,
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'publicKey',
|
||||
);
|
||||
|
|
@ -399,28 +386,24 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('setBlockedUserCrossSigningKey', () async {
|
||||
await database.setBlockedUserCrossSigningKey(
|
||||
true,
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'publicKey',
|
||||
);
|
||||
});
|
||||
test('removeUserCrossSigningKey', () async {
|
||||
await database.removeUserCrossSigningKey(
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'publicKey',
|
||||
);
|
||||
});
|
||||
test('storeUserDeviceKeysInfo', () async {
|
||||
await database.storeUserDeviceKeysInfo(
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
true,
|
||||
);
|
||||
});
|
||||
test('storeUserDeviceKey', () async {
|
||||
await database.storeUserDeviceKey(
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'deviceId',
|
||||
'{}',
|
||||
|
|
@ -432,7 +415,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('setVerifiedUserDeviceKey', () async {
|
||||
await database.setVerifiedUserDeviceKey(
|
||||
true,
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'deviceId',
|
||||
);
|
||||
|
|
@ -440,7 +422,6 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
test('setBlockedUserDeviceKey', () async {
|
||||
await database.setBlockedUserDeviceKey(
|
||||
true,
|
||||
clientId,
|
||||
'@alice:example.com',
|
||||
'deviceId',
|
||||
);
|
||||
|
|
@ -448,13 +429,13 @@ void testDatabase(Future<DatabaseApi> futureDatabase, int clientId) {
|
|||
|
||||
// Clearing up from here
|
||||
test('clearSSSSCache', () async {
|
||||
await database.clearSSSSCache(clientId);
|
||||
await database.clearSSSSCache();
|
||||
});
|
||||
test('clearCache', () async {
|
||||
await database.clearCache(clientId);
|
||||
await database.clearCache();
|
||||
});
|
||||
test('clear', () async {
|
||||
await database.clear(clientId);
|
||||
await database.clear();
|
||||
});
|
||||
test('Close', () async {
|
||||
await database.close();
|
||||
|
|
|
|||
|
|
@ -166,7 +166,6 @@ void main() {
|
|||
'floof': 'foxhole',
|
||||
},
|
||||
}),
|
||||
client.id,
|
||||
userId,
|
||||
deviceId);
|
||||
var event = ToDeviceEvent(
|
||||
|
|
@ -194,7 +193,6 @@ void main() {
|
|||
'floof': 'foxhole',
|
||||
},
|
||||
}),
|
||||
client.id,
|
||||
userId,
|
||||
deviceId);
|
||||
event = ToDeviceEvent(
|
||||
|
|
@ -218,7 +216,6 @@ void main() {
|
|||
'floof': 'foxhole',
|
||||
},
|
||||
}),
|
||||
client.id,
|
||||
userId,
|
||||
deviceId);
|
||||
event = ToDeviceEvent(
|
||||
|
|
@ -242,7 +239,6 @@ void main() {
|
|||
'type': 'm.dummy',
|
||||
'content': {},
|
||||
}),
|
||||
client.id,
|
||||
userId,
|
||||
deviceId);
|
||||
event = ToDeviceEvent(
|
||||
|
|
|
|||
|
|
@ -26,11 +26,10 @@ import 'fake_database.dart';
|
|||
void main() {
|
||||
group('Databse', () {
|
||||
Logs().level = Level.error;
|
||||
var clientId = -1;
|
||||
final room = Room(id: '!room:blubb');
|
||||
test('setupDatabase', () async {
|
||||
final database = await getDatabase(null);
|
||||
clientId = await database.insertClient(
|
||||
await database.insertClient(
|
||||
'testclient',
|
||||
'https://example.org',
|
||||
'blubb',
|
||||
|
|
@ -38,8 +37,10 @@ void main() {
|
|||
null,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
null,
|
||||
);
|
||||
});
|
||||
|
||||
test('storeEventUpdate', () async {
|
||||
final database = await getDatabase(null);
|
||||
// store a simple update
|
||||
|
|
@ -54,8 +55,8 @@ void main() {
|
|||
'sender': '@blah:blubb',
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
var event = await database.getEventById(clientId, '\$event-1', room);
|
||||
await database.storeEventUpdate(update);
|
||||
var event = await database.getEventById('\$event-1', room);
|
||||
expect(event.eventId, '\$event-1');
|
||||
|
||||
// insert a transaction id
|
||||
|
|
@ -71,8 +72,8 @@ void main() {
|
|||
'status': 0,
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, 'transaction-1', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('transaction-1', room);
|
||||
expect(event.eventId, 'transaction-1');
|
||||
update = EventUpdate(
|
||||
type: EventUpdateType.timeline,
|
||||
|
|
@ -89,10 +90,10 @@ void main() {
|
|||
'status': 1,
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, 'transaction-1', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('transaction-1', room);
|
||||
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
|
||||
update = EventUpdate(
|
||||
|
|
@ -107,8 +108,8 @@ void main() {
|
|||
'status': 0,
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, '\$event-3', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('\$event-3', room);
|
||||
expect(event.eventId, '\$event-3');
|
||||
update = EventUpdate(
|
||||
type: EventUpdateType.timeline,
|
||||
|
|
@ -125,11 +126,11 @@ void main() {
|
|||
},
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, '\$event-3', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('\$event-3', room);
|
||||
expect(event.eventId, '\$event-3');
|
||||
expect(event.status, 1);
|
||||
event = await database.getEventById(clientId, 'transaction-2', room);
|
||||
event = await database.getEventById('transaction-2', room);
|
||||
expect(event, null);
|
||||
|
||||
// insert transaction id and not update status
|
||||
|
|
@ -145,8 +146,8 @@ void main() {
|
|||
'status': 2,
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, '\$event-4', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('\$event-4', room);
|
||||
expect(event.eventId, '\$event-4');
|
||||
update = EventUpdate(
|
||||
type: EventUpdateType.timeline,
|
||||
|
|
@ -163,11 +164,11 @@ void main() {
|
|||
},
|
||||
},
|
||||
);
|
||||
await database.storeEventUpdate(clientId, update);
|
||||
event = await database.getEventById(clientId, '\$event-4', room);
|
||||
await database.storeEventUpdate(update);
|
||||
event = await database.getEventById('\$event-4', room);
|
||||
expect(event.eventId, '\$event-4');
|
||||
expect(event.status, 2);
|
||||
event = await database.getEventById(clientId, 'transaction-3', room);
|
||||
event = await database.getEventById('transaction-3', room);
|
||||
expect(event, null);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue