Merge pull request #1946 from famedly/krille/delete-file

feat: Add deleteFile() endpoint to database
This commit is contained in:
Nicolas Werner 2024-11-12 08:35:32 +01:00 committed by GitHub
commit fd2f90903f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 40 additions and 7 deletions

View File

@ -121,6 +121,8 @@ abstract class DatabaseApi {
Future storeFile(Uri mxcUri, Uint8List bytes, int time);
Future<bool> deleteFile(Uri mxcUri);
Future storeSyncFilterId(
String syncFilterId,
);

View File

@ -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<void> 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<bool> 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<void> deleteOldFiles(int savedAt) async {
final dirUri = fileStorageLocation;
final deleteFilesAfterDuration = this.deleteFilesAfterDuration;

View File

@ -17,4 +17,6 @@ mixin DatabaseFileStorage {
Future<void> deleteOldFiles(int savedAt) async {
return;
}
Future<bool> deleteFile(Uri mxcUri) async => false;
}

View File

@ -462,6 +462,11 @@ class HiveCollectionsDatabase extends DatabaseApi {
return null;
}
@override
Future<bool> deleteFile(Uri mxcUri) async {
return false;
}
@override
Future<StoredInboundGroupSession?> getInboundGroupSession(
String roomId,

View File

@ -479,6 +479,11 @@ class FamedlySdkHiveDatabase extends DatabaseApi with ZoneTransactionMixin {
return null;
}
@override
Future<bool> deleteFile(Uri mxcUri) async {
return false;
}
@override
Future<StoredInboundGroupSession?> getInboundGroupSession(
String roomId,

View File

@ -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'));