LCOV - code coverage report
Current view: top level - lib/src/database - database_file_storage_io.dart (source / functions) Coverage Total Hit
Test: merged.info Lines: 43.8 % 32 14
Test Date: 2025-01-14 13:39:53 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            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           32 :   Future<void> deleteOldFiles(int savedAt) async {
      49           32 :     final dirUri = fileStorageLocation;
      50           32 :     final deleteFilesAfterDuration = this.deleteFilesAfterDuration;
      51           32 :     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 2.0-1