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

Generated by: LCOV version 1.14