refactor(mobile): file_media.interface.dart (#19343)

* refactor(mobile): file_media.interface.dart

* merge main
This commit is contained in:
Alex 2025-06-21 14:24:59 -05:00 committed by GitHub
parent b606d4fe73
commit c10b795e99
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 8 additions and 56 deletions

View File

@ -1,36 +0,0 @@
import 'dart:io';
import 'dart:typed_data';
import 'package:immich_mobile/entities/asset.entity.dart';
abstract interface class IFileMediaRepository {
Future<Asset?> saveImage(
Uint8List data, {
required String title,
String? relativePath,
});
Future<Asset?> saveImageWithFile(
String filePath, {
String? title,
String? relativePath,
});
Future<Asset?> saveVideo(
File file, {
required String title,
String? relativePath,
});
Future<Asset?> saveLivePhoto({
required File image,
required File video,
required String title,
});
Future<void> clearFileCache();
Future<void> enableBackgroundAccess();
Future<void> requestExtendedPermissions();
}

View File

@ -10,7 +10,6 @@ import 'package:immich_mobile/entities/album.entity.dart';
import 'package:immich_mobile/entities/backup_album.entity.dart'; import 'package:immich_mobile/entities/backup_album.entity.dart';
import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/interfaces/backup_album.interface.dart'; import 'package:immich_mobile/interfaces/backup_album.interface.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/models/auth/auth_state.model.dart'; import 'package:immich_mobile/models/auth/auth_state.model.dart';
import 'package:immich_mobile/models/backup/available_album.model.dart'; import 'package:immich_mobile/models/backup/available_album.model.dart';
import 'package:immich_mobile/models/backup/backup_candidate.model.dart'; import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
@ -108,7 +107,7 @@ class BackupNotifier extends StateNotifier<BackUpState> {
final BackgroundService _backgroundService; final BackgroundService _backgroundService;
final GalleryPermissionNotifier _galleryPermissionNotifier; final GalleryPermissionNotifier _galleryPermissionNotifier;
final AlbumMediaRepository _albumMediaRepository; final AlbumMediaRepository _albumMediaRepository;
final IFileMediaRepository _fileMediaRepository; final FileMediaRepository _fileMediaRepository;
final BackupAlbumService _backupAlbumService; final BackupAlbumService _backupAlbumService;
final Ref ref; final Ref ref;

View File

@ -3,14 +3,12 @@ import 'dart:io';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/repositories/asset_media.repository.dart'; import 'package:immich_mobile/repositories/asset_media.repository.dart';
import 'package:photo_manager/photo_manager.dart' hide AssetType; import 'package:photo_manager/photo_manager.dart' hide AssetType;
final fileMediaRepositoryProvider = Provider((ref) => FileMediaRepository()); final fileMediaRepositoryProvider = Provider((ref) => FileMediaRepository());
class FileMediaRepository implements IFileMediaRepository { class FileMediaRepository {
@override
Future<Asset?> saveImage( Future<Asset?> saveImage(
Uint8List data, { Uint8List data, {
required String title, required String title,
@ -25,7 +23,6 @@ class FileMediaRepository implements IFileMediaRepository {
return AssetMediaRepository.toAsset(entity); return AssetMediaRepository.toAsset(entity);
} }
@override
Future<Asset?> saveImageWithFile( Future<Asset?> saveImageWithFile(
String filePath, { String filePath, {
String? title, String? title,
@ -39,7 +36,6 @@ class FileMediaRepository implements IFileMediaRepository {
return AssetMediaRepository.toAsset(entity); return AssetMediaRepository.toAsset(entity);
} }
@override
Future<Asset?> saveLivePhoto({ Future<Asset?> saveLivePhoto({
required File image, required File image,
required File video, required File video,
@ -53,7 +49,6 @@ class FileMediaRepository implements IFileMediaRepository {
return AssetMediaRepository.toAsset(entity); return AssetMediaRepository.toAsset(entity);
} }
@override
Future<Asset?> saveVideo( Future<Asset?> saveVideo(
File file, { File file, {
required String title, required String title,
@ -67,14 +62,11 @@ class FileMediaRepository implements IFileMediaRepository {
return AssetMediaRepository.toAsset(entity); return AssetMediaRepository.toAsset(entity);
} }
@override
Future<void> clearFileCache() => PhotoManager.clearFileCache(); Future<void> clearFileCache() => PhotoManager.clearFileCache();
@override
Future<void> enableBackgroundAccess() => Future<void> enableBackgroundAccess() =>
PhotoManager.setIgnorePermissionCheck(true); PhotoManager.setIgnorePermissionCheck(true);
@override
Future<void> requestExtendedPermissions() => Future<void> requestExtendedPermissions() =>
PhotoManager.requestPermissionExtend(); PhotoManager.requestPermissionExtend();
} }

View File

@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/backup_album.entity.dart';
import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset.interface.dart';
import 'package:immich_mobile/interfaces/asset_media.interface.dart'; import 'package:immich_mobile/interfaces/asset_media.interface.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/models/backup/backup_candidate.model.dart'; import 'package:immich_mobile/models/backup/backup_candidate.model.dart';
import 'package:immich_mobile/models/backup/current_upload_asset.model.dart'; import 'package:immich_mobile/models/backup/current_upload_asset.model.dart';
import 'package:immich_mobile/models/backup/error_upload_asset.model.dart'; import 'package:immich_mobile/models/backup/error_upload_asset.model.dart';
@ -52,7 +51,7 @@ class BackupService {
final AppSettingsService _appSetting; final AppSettingsService _appSetting;
final AlbumService _albumService; final AlbumService _albumService;
final AlbumMediaRepository _albumMediaRepository; final AlbumMediaRepository _albumMediaRepository;
final IFileMediaRepository _fileMediaRepository; final FileMediaRepository _fileMediaRepository;
final IAssetRepository _assetRepository; final IAssetRepository _assetRepository;
final IAssetMediaRepository _assetMediaRepository; final IAssetMediaRepository _assetMediaRepository;

View File

@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/infrastructure/utils/exif.converter.dart'; import 'package:immich_mobile/infrastructure/utils/exif.converter.dart';
import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset.interface.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart';
import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart';
import 'package:immich_mobile/repositories/asset.repository.dart'; import 'package:immich_mobile/repositories/asset.repository.dart';
@ -25,7 +24,7 @@ import 'package:immich_mobile/utils/diff.dart';
/// Finds duplicates originating from missing EXIF information /// Finds duplicates originating from missing EXIF information
class BackupVerificationService { class BackupVerificationService {
final UserService _userService; final UserService _userService;
final IFileMediaRepository _fileMediaRepository; final FileMediaRepository _fileMediaRepository;
final IAssetRepository _assetRepository; final IAssetRepository _assetRepository;
final IExifInfoRepository _exifInfoRepository; final IExifInfoRepository _exifInfoRepository;
@ -123,7 +122,7 @@ class BackupVerificationService {
String auth, String auth,
String endpoint, String endpoint,
RootIsolateToken rootIsolateToken, RootIsolateToken rootIsolateToken,
IFileMediaRepository fileMediaRepository, FileMediaRepository fileMediaRepository,
}) tuple, }) tuple,
) async { ) async {
assert(tuple.deleteCandidates.length == tuple.originals.length); assert(tuple.deleteCandidates.length == tuple.originals.length);

View File

@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart';
import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/entities/store.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/models/download/livephotos_medatada.model.dart'; import 'package:immich_mobile/models/download/livephotos_medatada.model.dart';
import 'package:immich_mobile/repositories/download.repository.dart'; import 'package:immich_mobile/repositories/download.repository.dart';
import 'package:immich_mobile/repositories/file_media.repository.dart'; import 'package:immich_mobile/repositories/file_media.repository.dart';
@ -23,7 +22,7 @@ final downloadServiceProvider = Provider(
class DownloadService { class DownloadService {
final DownloadRepository _downloadRepository; final DownloadRepository _downloadRepository;
final IFileMediaRepository _fileMediaRepository; final FileMediaRepository _fileMediaRepository;
final Logger _log = Logger("DownloadService"); final Logger _log = Logger("DownloadService");
void Function(TaskStatusUpdate)? onImageDownloadStatus; void Function(TaskStatusUpdate)? onImageDownloadStatus;
void Function(TaskStatusUpdate)? onVideoDownloadStatus; void Function(TaskStatusUpdate)? onVideoDownloadStatus;

View File

@ -7,12 +7,12 @@ import 'package:immich_mobile/interfaces/auth.interface.dart';
import 'package:immich_mobile/interfaces/auth_api.interface.dart'; import 'package:immich_mobile/interfaces/auth_api.interface.dart';
import 'package:immich_mobile/interfaces/backup_album.interface.dart'; import 'package:immich_mobile/interfaces/backup_album.interface.dart';
import 'package:immich_mobile/interfaces/etag.interface.dart'; import 'package:immich_mobile/interfaces/etag.interface.dart';
import 'package:immich_mobile/interfaces/file_media.interface.dart';
import 'package:immich_mobile/repositories/partner_api.repository.dart'; import 'package:immich_mobile/repositories/partner_api.repository.dart';
import 'package:immich_mobile/repositories/album_media.repository.dart'; import 'package:immich_mobile/repositories/album_media.repository.dart';
import 'package:immich_mobile/repositories/album_api.repository.dart'; import 'package:immich_mobile/repositories/album_api.repository.dart';
import 'package:immich_mobile/repositories/partner.repository.dart'; import 'package:immich_mobile/repositories/partner.repository.dart';
import 'package:immich_mobile/repositories/local_files_manager.repository.dart'; import 'package:immich_mobile/repositories/local_files_manager.repository.dart';
import 'package:immich_mobile/repositories/file_media.repository.dart';
import 'package:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
class MockAlbumRepository extends Mock implements IAlbumRepository {} class MockAlbumRepository extends Mock implements IAlbumRepository {}
@ -34,7 +34,7 @@ class MockAssetApiRepository extends Mock implements IAssetApiRepository {}
class MockAssetMediaRepository extends Mock implements IAssetMediaRepository {} class MockAssetMediaRepository extends Mock implements IAssetMediaRepository {}
class MockFileMediaRepository extends Mock implements IFileMediaRepository {} class MockFileMediaRepository extends Mock implements FileMediaRepository {}
class MockAlbumApiRepository extends Mock implements AlbumApiRepository {} class MockAlbumApiRepository extends Mock implements AlbumApiRepository {}