LCOV - code coverage report
Current view: top level - lib/src/database - database_file_storage_io.dart (source / functions) Hit Total Coverage
Test: merged.info Lines: 14 32 43.8 %
Date: 2025-01-06 12:44:40 Functions: 0 0 -

          Line data    Source code
       1             : import 'dart:io';
       2             : import 'dart:typed_data';
       3             : 
       4             : import 'package:matrix/matrix.dart';
       5             : 
       6             : mixin DatabaseFileStorage {
       7          68 :   bool get supportsFileStoring => fileStorageLocation != null;
       8             : 
       9             :   late final Uri? fileStorageLocation;
      10             :   late final Duration? deleteFilesAfterDuration;
      11             : 
      12           0 :   File _getFileFromMxc(Uri mxcUri) => File(
      13           0 :         '${Directory.fromUri(fileStorageLocation!).path}/${mxcUri.toString().split('/').last}',
      14             :       );
      15             : 
      16           5 :   Future<void> storeFile(Uri mxcUri, Uint8List bytes, int time) async {
      17           5 :     final fileStorageLocation = this.fileStorageLocation;
      18           5 :     if (!supportsFileStoring || fileStorageLocation == null) return;
      19             : 
      20           0 :     final file = _getFileFromMxc(mxcUri);
      21             : 
      22           0 :     if (await file.exists()) return;
      23           0 :     await file.writeAsBytes(bytes);
      24             :   }
      25             : 
      26           2 :   Future<Uint8List?> getFile(Uri mxcUri) async {
      27           2 :     final fileStorageLocation = this.fileStorageLocation;
      28           2 :     if (!supportsFileStoring || fileStorageLocation == null) return null;
      29             : 
      30           0 :     final file = _getFileFromMxc(mxcUri);
      31             : 
      32           0 :     if (await file.exists()) return await file.readAsBytes();
      33             :     return null;
      34             :   }
      35             : 
      36           1 :   Future<bool> deleteFile(Uri mxcUri) async {
      37           1 :     final fileStorageLocation = this.fileStorageLocation;
      38           1 :     if (!supportsFileStoring || fileStorageLocation == null) return false;
      39             : 
      40           0 :     final file = _getFileFromMxc(mxcUri);
      41             : 
      42           0 :     if (await file.exists() == false) return false;
      43             : 
      44           0 :     await file.delete();
      45             :     return true;
      46             :   }
      47             : 
      48          34 :   Future<void> deleteOldFiles(int savedAt) async {
      49          34 :     final dirUri = fileStorageLocation;
      50          34 :     final deleteFilesAfterDuration = this.deleteFilesAfterDuration;
      51          34 :     if (!supportsFileStoring ||
      52             :         dirUri == null ||
      53             :         deleteFilesAfterDuration == null) {
      54             :       return;
      55             :     }
      56           0 :     final dir = Directory.fromUri(dirUri);
      57           0 :     final entities = await dir.list().toList();
      58           0 :     for (final file in entities) {
      59           0 :       if (file is! File) continue;
      60           0 :       final stat = await file.stat();
      61           0 :       if (DateTime.now().difference(stat.modified) > deleteFilesAfterDuration) {
      62           0 :         Logs().v('Delete old file', file.path);
      63           0 :         await file.delete();
      64             :       }
      65             :     }
      66             :   }
      67             : }

Generated by: LCOV version 1.14