From 60d500956cbbffad7859e65b8b71cf4c1b5763ef Mon Sep 17 00:00:00 2001 From: Krille Date: Wed, 23 Oct 2024 17:30:16 +0200 Subject: [PATCH] feat: Add deleteFile() endpoint to database --- lib/src/database/database_api.dart | 2 ++ .../database/database_file_storage_io.dart | 24 ++++++++++++++----- .../database/database_file_storage_stub.dart | 2 ++ .../database/hive_collections_database.dart | 5 ++++ lib/src/database/hive_database.dart | 5 ++++ test/database_api_test.dart | 9 ++++++- 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/src/database/database_api.dart b/lib/src/database/database_api.dart index 6e3a9313e..8d3696fe9 100644 --- a/lib/src/database/database_api.dart +++ b/lib/src/database/database_api.dart @@ -121,6 +121,8 @@ abstract class DatabaseApi { Future storeFile(Uri mxcUri, Uint8List bytes, int time); + Future deleteFile(Uri mxcUri); + Future storeSyncFilterId( String syncFilterId, ); diff --git a/lib/src/database/database_file_storage_io.dart b/lib/src/database/database_file_storage_io.dart index 6a80efd79..898f074c0 100644 --- a/lib/src/database/database_file_storage_io.dart +++ b/lib/src/database/database_file_storage_io.dart @@ -9,13 +9,15 @@ mixin DatabaseFileStorage { late final Uri? fileStorageLocation; late final Duration? deleteFilesAfterDuration; + File _getFileFromMxc(Uri mxcUri) => File( + '${Directory.fromUri(fileStorageLocation!).path}/${mxcUri.toString().split('/').last}', + ); + Future storeFile(Uri mxcUri, Uint8List bytes, int time) async { final fileStorageLocation = this.fileStorageLocation; if (!supportsFileStoring || fileStorageLocation == null) return; - final dir = Directory.fromUri(fileStorageLocation); - - final file = File('${dir.path}/${mxcUri.toString().split('/').last}'); + final file = _getFileFromMxc(mxcUri); if (await file.exists()) return; await file.writeAsBytes(bytes); @@ -25,14 +27,24 @@ mixin DatabaseFileStorage { final fileStorageLocation = this.fileStorageLocation; if (!supportsFileStoring || fileStorageLocation == null) return null; - final dir = Directory.fromUri(fileStorageLocation); - - final file = File('${dir.path}/${mxcUri.toString().split('/').last}'); + final file = _getFileFromMxc(mxcUri); if (await file.exists()) return await file.readAsBytes(); return null; } + Future deleteFile(Uri mxcUri) async { + final fileStorageLocation = this.fileStorageLocation; + if (!supportsFileStoring || fileStorageLocation == null) return false; + + final file = _getFileFromMxc(mxcUri); + + if (await file.exists() == false) return false; + + await file.delete(); + return true; + } + Future deleteOldFiles(int savedAt) async { final dirUri = fileStorageLocation; final deleteFilesAfterDuration = this.deleteFilesAfterDuration; diff --git a/lib/src/database/database_file_storage_stub.dart b/lib/src/database/database_file_storage_stub.dart index 7addfe1ad..1aa9b1015 100644 --- a/lib/src/database/database_file_storage_stub.dart +++ b/lib/src/database/database_file_storage_stub.dart @@ -17,4 +17,6 @@ mixin DatabaseFileStorage { Future deleteOldFiles(int savedAt) async { return; } + + Future deleteFile(Uri mxcUri) async => false; } diff --git a/lib/src/database/hive_collections_database.dart b/lib/src/database/hive_collections_database.dart index b681de56d..738b43a11 100644 --- a/lib/src/database/hive_collections_database.dart +++ b/lib/src/database/hive_collections_database.dart @@ -462,6 +462,11 @@ class HiveCollectionsDatabase extends DatabaseApi { return null; } + @override + Future deleteFile(Uri mxcUri) async { + return false; + } + @override Future getInboundGroupSession( String roomId, diff --git a/lib/src/database/hive_database.dart b/lib/src/database/hive_database.dart index a8960b79d..65834cf97 100644 --- a/lib/src/database/hive_database.dart +++ b/lib/src/database/hive_database.dart @@ -479,6 +479,11 @@ class FamedlySdkHiveDatabase extends DatabaseApi with ZoneTransactionMixin { return null; } + @override + Future deleteFile(Uri mxcUri) async { + return false; + } + @override Future getInboundGroupSession( String roomId, diff --git a/test/database_api_test.dart b/test/database_api_test.dart index 5065f74ac..fcf25befd 100644 --- a/test/database_api_test.dart +++ b/test/database_api_test.dart @@ -78,7 +78,7 @@ void main() { final toDeviceQueue = await database.getToDeviceEventQueue(); expect(toDeviceQueue.isEmpty, true); }); - test('storeFile', () async { + test('storeFile and deleteFile', () async { await database.storeFile( Uri.parse('mxc://test'), Uint8List.fromList([0]), @@ -86,6 +86,13 @@ void main() { ); final file = await database.getFile(Uri.parse('mxc://test')); expect(file != null, database.supportsFileStoring); + + final result = await database.deleteFile(Uri.parse('mxc://test')); + expect(result, database.supportsFileStoring); + if (result) { + final file = await database.getFile(Uri.parse('mxc://test')); + expect(file, null); + } }); test('getFile', () async { await database.getFile(Uri.parse('mxc://test'));