Merge pull request #1946 from famedly/krille/delete-file
feat: Add deleteFile() endpoint to database
This commit is contained in:
commit
fd2f90903f
|
|
@ -121,6 +121,8 @@ abstract class DatabaseApi {
|
||||||
|
|
||||||
Future storeFile(Uri mxcUri, Uint8List bytes, int time);
|
Future storeFile(Uri mxcUri, Uint8List bytes, int time);
|
||||||
|
|
||||||
|
Future<bool> deleteFile(Uri mxcUri);
|
||||||
|
|
||||||
Future storeSyncFilterId(
|
Future storeSyncFilterId(
|
||||||
String syncFilterId,
|
String syncFilterId,
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,15 @@ mixin DatabaseFileStorage {
|
||||||
late final Uri? fileStorageLocation;
|
late final Uri? fileStorageLocation;
|
||||||
late final Duration? deleteFilesAfterDuration;
|
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 {
|
Future<void> storeFile(Uri mxcUri, Uint8List bytes, int time) async {
|
||||||
final fileStorageLocation = this.fileStorageLocation;
|
final fileStorageLocation = this.fileStorageLocation;
|
||||||
if (!supportsFileStoring || fileStorageLocation == null) return;
|
if (!supportsFileStoring || fileStorageLocation == null) return;
|
||||||
|
|
||||||
final dir = Directory.fromUri(fileStorageLocation);
|
final file = _getFileFromMxc(mxcUri);
|
||||||
|
|
||||||
final file = File('${dir.path}/${mxcUri.toString().split('/').last}');
|
|
||||||
|
|
||||||
if (await file.exists()) return;
|
if (await file.exists()) return;
|
||||||
await file.writeAsBytes(bytes);
|
await file.writeAsBytes(bytes);
|
||||||
|
|
@ -25,14 +27,24 @@ mixin DatabaseFileStorage {
|
||||||
final fileStorageLocation = this.fileStorageLocation;
|
final fileStorageLocation = this.fileStorageLocation;
|
||||||
if (!supportsFileStoring || fileStorageLocation == null) return null;
|
if (!supportsFileStoring || fileStorageLocation == null) return null;
|
||||||
|
|
||||||
final dir = Directory.fromUri(fileStorageLocation);
|
final file = _getFileFromMxc(mxcUri);
|
||||||
|
|
||||||
final file = File('${dir.path}/${mxcUri.toString().split('/').last}');
|
|
||||||
|
|
||||||
if (await file.exists()) return await file.readAsBytes();
|
if (await file.exists()) return await file.readAsBytes();
|
||||||
return null;
|
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 {
|
Future<void> deleteOldFiles(int savedAt) async {
|
||||||
final dirUri = fileStorageLocation;
|
final dirUri = fileStorageLocation;
|
||||||
final deleteFilesAfterDuration = this.deleteFilesAfterDuration;
|
final deleteFilesAfterDuration = this.deleteFilesAfterDuration;
|
||||||
|
|
|
||||||
|
|
@ -17,4 +17,6 @@ mixin DatabaseFileStorage {
|
||||||
Future<void> deleteOldFiles(int savedAt) async {
|
Future<void> deleteOldFiles(int savedAt) async {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<bool> deleteFile(Uri mxcUri) async => false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -462,6 +462,11 @@ class HiveCollectionsDatabase extends DatabaseApi {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> deleteFile(Uri mxcUri) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
||||||
String roomId,
|
String roomId,
|
||||||
|
|
|
||||||
|
|
@ -479,6 +479,11 @@ class FamedlySdkHiveDatabase extends DatabaseApi with ZoneTransactionMixin {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<bool> deleteFile(Uri mxcUri) async {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
Future<StoredInboundGroupSession?> getInboundGroupSession(
|
||||||
String roomId,
|
String roomId,
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@ void main() {
|
||||||
final toDeviceQueue = await database.getToDeviceEventQueue();
|
final toDeviceQueue = await database.getToDeviceEventQueue();
|
||||||
expect(toDeviceQueue.isEmpty, true);
|
expect(toDeviceQueue.isEmpty, true);
|
||||||
});
|
});
|
||||||
test('storeFile', () async {
|
test('storeFile and deleteFile', () async {
|
||||||
await database.storeFile(
|
await database.storeFile(
|
||||||
Uri.parse('mxc://test'),
|
Uri.parse('mxc://test'),
|
||||||
Uint8List.fromList([0]),
|
Uint8List.fromList([0]),
|
||||||
|
|
@ -86,6 +86,13 @@ void main() {
|
||||||
);
|
);
|
||||||
final file = await database.getFile(Uri.parse('mxc://test'));
|
final file = await database.getFile(Uri.parse('mxc://test'));
|
||||||
expect(file != null, database.supportsFileStoring);
|
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 {
|
test('getFile', () async {
|
||||||
await database.getFile(Uri.parse('mxc://test'));
|
await database.getFile(Uri.parse('mxc://test'));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue