refactor(mobile): local_file_manager.interface.dart (#19340)

This commit is contained in:
Alex 2025-06-21 13:35:30 -05:00 committed by GitHub
parent 4c2ad44303
commit b606d4fe73
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 24 additions and 25 deletions

View File

@ -1,5 +0,0 @@
abstract interface class ILocalFilesManager {
Future<bool> moveToTrash(List<String> mediaUrls);
Future<bool> restoreFromTrash(String fileName, int type);
Future<bool> requestManageMediaPermission();
}

View File

@ -1,25 +1,25 @@
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/interfaces/local_files_manager.interface.dart'; import 'package:immich_mobile/services/local_files_manager.service.dart';
import 'package:immich_mobile/utils/local_files_manager.dart';
final localFilesManagerRepositoryProvider = final localFilesManagerRepositoryProvider = Provider(
Provider((ref) => const LocalFilesManagerRepository()); (ref) =>
LocalFilesManagerRepository(ref.watch(localFileManagerServiceProvider)),
);
class LocalFilesManagerRepository implements ILocalFilesManager { class LocalFilesManagerRepository {
const LocalFilesManagerRepository(); LocalFilesManagerRepository(this._service);
final LocalFilesManagerService _service;
@override
Future<bool> moveToTrash(List<String> mediaUrls) async { Future<bool> moveToTrash(List<String> mediaUrls) async {
return await LocalFilesManager.moveToTrash(mediaUrls); return await _service.moveToTrash(mediaUrls);
} }
@override
Future<bool> restoreFromTrash(String fileName, int type) async { Future<bool> restoreFromTrash(String fileName, int type) async {
return await LocalFilesManager.restoreFromTrash(fileName, type); return await _service.restoreFromTrash(fileName, type);
} }
@override
Future<bool> requestManageMediaPermission() async { Future<bool> requestManageMediaPermission() async {
return await LocalFilesManager.requestManageMediaPermission(); return await _service.requestManageMediaPermission();
} }
} }

View File

@ -1,11 +1,16 @@
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
abstract final class LocalFilesManager { final localFileManagerServiceProvider = Provider<LocalFilesManagerService>(
(ref) => LocalFilesManagerService(),
);
class LocalFilesManagerService {
static final Logger _logger = Logger('LocalFilesManager'); static final Logger _logger = Logger('LocalFilesManager');
static const MethodChannel _channel = MethodChannel('file_trash'); static const MethodChannel _channel = MethodChannel('file_trash');
static Future<bool> moveToTrash(List<String> mediaUrls) async { Future<bool> moveToTrash(List<String> mediaUrls) async {
try { try {
return await _channel return await _channel
.invokeMethod('moveToTrash', {'mediaUrls': mediaUrls}); .invokeMethod('moveToTrash', {'mediaUrls': mediaUrls});
@ -15,7 +20,7 @@ abstract final class LocalFilesManager {
} }
} }
static Future<bool> restoreFromTrash(String fileName, int type) async { Future<bool> restoreFromTrash(String fileName, int type) async {
try { try {
return await _channel.invokeMethod( return await _channel.invokeMethod(
'restoreFromTrash', 'restoreFromTrash',
@ -27,7 +32,7 @@ abstract final class LocalFilesManager {
} }
} }
static Future<bool> requestManageMediaPermission() async { Future<bool> requestManageMediaPermission() async {
try { try {
return await _channel.invokeMethod('requestManageMediaPermission'); return await _channel.invokeMethod('requestManageMediaPermission');
} catch (e, s) { } catch (e, s) {

View File

@ -16,7 +16,6 @@ import 'package:immich_mobile/infrastructure/repositories/user_api.repository.da
import 'package:immich_mobile/interfaces/album.interface.dart'; import 'package:immich_mobile/interfaces/album.interface.dart';
import 'package:immich_mobile/interfaces/asset.interface.dart'; import 'package:immich_mobile/interfaces/asset.interface.dart';
import 'package:immich_mobile/interfaces/etag.interface.dart'; import 'package:immich_mobile/interfaces/etag.interface.dart';
import 'package:immich_mobile/interfaces/local_files_manager.interface.dart';
import 'package:immich_mobile/providers/app_settings.provider.dart'; import 'package:immich_mobile/providers/app_settings.provider.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';
@ -74,7 +73,7 @@ class SyncService {
final AsyncMutex _lock = AsyncMutex(); final AsyncMutex _lock = AsyncMutex();
final Logger _log = Logger('SyncService'); final Logger _log = Logger('SyncService');
final AppSettingsService _appSettingsService; final AppSettingsService _appSettingsService;
final ILocalFilesManager _localFilesManager; final LocalFilesManagerRepository _localFilesManager;
SyncService( SyncService(
this._hashService, this._hashService,

View File

@ -8,11 +8,11 @@ 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/interfaces/file_media.interface.dart';
import 'package:immich_mobile/interfaces/local_files_manager.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:mocktail/mocktail.dart'; import 'package:mocktail/mocktail.dart';
class MockAlbumRepository extends Mock implements IAlbumRepository {} class MockAlbumRepository extends Mock implements IAlbumRepository {}
@ -47,4 +47,4 @@ class MockPartnerRepository extends Mock implements PartnerRepository {}
class MockPartnerApiRepository extends Mock implements PartnerApiRepository {} class MockPartnerApiRepository extends Mock implements PartnerApiRepository {}
class MockLocalFilesManagerRepository extends Mock class MockLocalFilesManagerRepository extends Mock
implements ILocalFilesManager {} implements LocalFilesManagerRepository {}