Merge pull request #1886 from famedly/td/deleteOverride
fix: also delete db on logout
This commit is contained in:
commit
be43ddae14
|
|
@ -1799,6 +1799,7 @@ class Client extends MatrixApi {
|
|||
} catch (e, s) {
|
||||
Logs().e('Unable to clear database', e, s);
|
||||
} finally {
|
||||
await database?.delete();
|
||||
_database = null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -335,6 +335,6 @@ abstract class DatabaseApi {
|
|||
Future<CachedPresence?> getPresence(String userId);
|
||||
|
||||
/// Deletes the whole database. The database needs to be created again after
|
||||
/// this. Used for migration only.
|
||||
/// this.
|
||||
Future<void> delete();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,8 +83,14 @@ class BoxCollection with ZoneTransactionMixin {
|
|||
return _db.close();
|
||||
}
|
||||
|
||||
static Future<void> delete(String path, [dynamic factory]) =>
|
||||
(factory ?? window.indexedDB!).deleteDatabase(path);
|
||||
@Deprecated('use collection.deleteDatabase now')
|
||||
static Future<void> delete(String name, [dynamic factory]) =>
|
||||
(factory ?? window.indexedDB!).deleteDatabase(name);
|
||||
|
||||
Future<void> deleteDatabase(String name, [dynamic factory]) async {
|
||||
await close();
|
||||
await (factory ?? window.indexedDB).deleteDatabase(name);
|
||||
}
|
||||
}
|
||||
|
||||
class Box<V> {
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@ import 'package:matrix/src/database/database_file_storage_stub.dart'
|
|||
class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage {
|
||||
static const int version = 9;
|
||||
final String name;
|
||||
|
||||
late BoxCollection _collection;
|
||||
late Box<String> _clientBox;
|
||||
late Box<Map> _accountDataBox;
|
||||
|
|
@ -1623,10 +1624,13 @@ class MatrixSdkDatabase extends DatabaseApi with DatabaseFileStorage {
|
|||
}
|
||||
|
||||
@override
|
||||
Future<void> delete() => BoxCollection.delete(
|
||||
name,
|
||||
sqfliteFactory ?? idbFactory,
|
||||
);
|
||||
Future<void> delete() async {
|
||||
// database?.path is null on web
|
||||
await _collection.deleteDatabase(
|
||||
database?.path ?? name,
|
||||
sqfliteFactory ?? idbFactory,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> markUserProfileAsOutdated(userId) async {
|
||||
|
|
|
|||
|
|
@ -68,8 +68,14 @@ class BoxCollection with ZoneTransactionMixin {
|
|||
|
||||
Future<void> close() => _db.close();
|
||||
|
||||
@Deprecated('use collection.deleteDatabase now')
|
||||
static Future<void> delete(String path, [dynamic factory]) =>
|
||||
(factory ?? databaseFactory).deleteDatabase(path);
|
||||
|
||||
Future<void> deleteDatabase(String path, [dynamic factory]) async {
|
||||
await close();
|
||||
await (factory ?? databaseFactory).deleteDatabase(path);
|
||||
}
|
||||
}
|
||||
|
||||
class Box<V> {
|
||||
|
|
|
|||
|
|
@ -41,5 +41,6 @@ dev_dependencies:
|
|||
file: ">=6.1.1 <8.0.0"
|
||||
import_sorter: ^4.6.0
|
||||
lints: ^4.0.0
|
||||
path: ^1.9.0
|
||||
sqflite_common_ffi: 2.3.2+1 # v2.3.3 doesn't support dart v3.2.x
|
||||
test: ^1.15.7
|
||||
|
|
|
|||
|
|
@ -100,9 +100,9 @@ void main() {
|
|||
});
|
||||
|
||||
test(
|
||||
'Box.delete',
|
||||
'Collection.deleteDatabase',
|
||||
() async {
|
||||
await BoxCollection.delete(
|
||||
await collection.deleteDatabase(
|
||||
db?.path ?? '',
|
||||
isWeb ? null : databaseFactoryFfi,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -18,11 +18,13 @@
|
|||
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
|
||||
import 'package:canonical_json/canonical_json.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:olm/olm.dart' as olm;
|
||||
import 'package:path/path.dart' show join;
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
|
@ -31,16 +33,35 @@ import 'fake_client.dart';
|
|||
import 'fake_database.dart';
|
||||
|
||||
void main() {
|
||||
late Client matrix;
|
||||
|
||||
// key @test:fakeServer.notExisting
|
||||
const pickledOlmAccount =
|
||||
'N2v1MkIFGcl0mQpo2OCwSopxPQJ0wnl7oe7PKiT4141AijfdTIhRu+ceXzXKy3Kr00nLqXtRv7kid6hU4a+V0rfJWLL0Y51+3Rp/ORDVnQy+SSeo6Fn4FHcXrxifJEJ0djla5u98fBcJ8BSkhIDmtXRPi5/oJAvpiYn+8zMjFHobOeZUAxYR0VfQ9JzSYBsSovoQ7uFkNks1M4EDUvHtuyg3RxViwdNxs3718fyAqQ/VSwbXsY0Nl+qQbF+nlVGHenGqk5SuNl1P6e1PzZxcR0IfXA94Xij1Ob5gDv5YH4UCn9wRMG0abZsQP0YzpDM0FLaHSCyo9i5JD/vMlhH+nZWrgAzPPCTNGYewNV8/h3c+VyJh8ZTx/fVi6Yq46Fv+27Ga2ETRZ3Qn+Oyx6dLBjnBZ9iUvIhqpe2XqaGA1PopOz8iDnaZitw';
|
||||
const identityKey = '7rvl3jORJkBiK4XX1e5TnGnqz068XfYJ0W++Ml63rgk';
|
||||
const fingerprintKey = 'gjL//fyaFHADt9KBADGag8g7F8Up78B/K1zXeiEPLJo';
|
||||
|
||||
group('client path', () {
|
||||
late Client clientOnPath;
|
||||
|
||||
final dbPath = join(Directory.current.path, 'test.sqlite');
|
||||
|
||||
setUp(() async {
|
||||
expect(await File(dbPath).exists(), false);
|
||||
clientOnPath = await getClient(
|
||||
databasePath: dbPath,
|
||||
);
|
||||
expect(await File(dbPath).exists(), true);
|
||||
});
|
||||
test('logout', () async {
|
||||
expect(await File(dbPath).exists(), true);
|
||||
await clientOnPath.logout();
|
||||
expect(await File(dbPath).exists(), false);
|
||||
});
|
||||
});
|
||||
|
||||
/// All Tests related to the Login
|
||||
group('Client', tags: 'olm', () {
|
||||
group('client mem', tags: 'olm', () {
|
||||
late Client matrix;
|
||||
|
||||
Logs().level = Level.error;
|
||||
|
||||
/// Check if all Elements get created
|
||||
|
|
|
|||
|
|
@ -26,12 +26,16 @@ const ssssKey = 'EsT9 RzbW VhPW yqNp cC7j ViiW 5TZB LuY4 ryyv 9guN Ysmr WDPH';
|
|||
const pickledOlmAccount =
|
||||
'N2v1MkIFGcl0mQpo2OCwSopxPQJ0wnl7oe7PKiT4141AijfdTIhRu+ceXzXKy3Kr00nLqXtRv7kid6hU4a+V0rfJWLL0Y51+3Rp/ORDVnQy+SSeo6Fn4FHcXrxifJEJ0djla5u98fBcJ8BSkhIDmtXRPi5/oJAvpiYn+8zMjFHobOeZUAxYR0VfQ9JzSYBsSovoQ7uFkNks1M4EDUvHtuyg3RxViwdNxs3718fyAqQ/VSwbXsY0Nl+qQbF+nlVGHenGqk5SuNl1P6e1PzZxcR0IfXA94Xij1Ob5gDv5YH4UCn9wRMG0abZsQP0YzpDM0FLaHSCyo9i5JD/vMlhH+nZWrgAzPPCTNGYewNV8/h3c+VyJh8ZTx/fVi6Yq46Fv+27Ga2ETRZ3Qn+Oyx6dLBjnBZ9iUvIhqpe2XqaGA1PopOz8iDnaZitw';
|
||||
|
||||
Future<Client> getClient(
|
||||
{Duration sendTimelineEventTimeout = const Duration(minutes: 1)}) async {
|
||||
/// only use `path` if you explicitly if you need a db on path instead of in mem
|
||||
Future<Client> getClient({
|
||||
Duration sendTimelineEventTimeout = const Duration(minutes: 1),
|
||||
String? databasePath,
|
||||
}) async {
|
||||
final client = Client(
|
||||
'testclient',
|
||||
httpClient: FakeMatrixApi(),
|
||||
databaseBuilder: getDatabase,
|
||||
databaseBuilder: (client) =>
|
||||
getDatabase(client, databasePath: databasePath),
|
||||
onSoftLogout: (client) => client.refreshAccessToken(),
|
||||
sendTimelineEventTimeout: sendTimelineEventTimeout,
|
||||
);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
|||
|
||||
import 'package:matrix/matrix.dart';
|
||||
|
||||
Future<DatabaseApi> getDatabase(Client? c) => getMatrixSdkDatabase(c);
|
||||
Future<DatabaseApi> getDatabase(Client? c, {String? databasePath}) =>
|
||||
getMatrixSdkDatabase(c, path: databasePath);
|
||||
|
||||
bool hiveInitialized = false;
|
||||
|
||||
|
|
@ -44,9 +45,10 @@ Future<HiveCollectionsDatabase> getHiveCollectionsDatabase(Client? c) async {
|
|||
}
|
||||
|
||||
// ignore: deprecated_member_use_from_same_package
|
||||
Future<MatrixSdkDatabase> getMatrixSdkDatabase(Client? c) async {
|
||||
Future<MatrixSdkDatabase> getMatrixSdkDatabase(Client? c,
|
||||
{String? path}) async {
|
||||
final database = await databaseFactoryFfi.openDatabase(
|
||||
':memory:',
|
||||
path ?? ':memory:',
|
||||
options: OpenDatabaseOptions(singleInstance: false),
|
||||
);
|
||||
final db = MatrixSdkDatabase(
|
||||
|
|
|
|||
Loading…
Reference in New Issue