diff --git a/mobile/lib/domain/interfaces/asset_media.interface.dart b/mobile/lib/domain/interfaces/asset_media.interface.dart deleted file mode 100644 index 93f99827ee..0000000000 --- a/mobile/lib/domain/interfaces/asset_media.interface.dart +++ /dev/null @@ -1,10 +0,0 @@ -import 'dart:typed_data'; -import 'dart:ui'; - -abstract interface class IAssetMediaRepository { - Future getThumbnail( - String id, { - int quality = 80, - Size size = const Size.square(256), - }); -} diff --git a/mobile/lib/domain/interfaces/device_asset.interface.dart b/mobile/lib/domain/interfaces/device_asset.interface.dart deleted file mode 100644 index 1df8cc2250..0000000000 --- a/mobile/lib/domain/interfaces/device_asset.interface.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'dart:async'; - -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/device_asset.model.dart'; - -abstract interface class IDeviceAssetRepository implements IDatabaseRepository { - Future updateAll(List assetHash); - - Future> getByIds(List localIds); - - Future deleteIds(List ids); -} diff --git a/mobile/lib/domain/interfaces/exif.interface.dart b/mobile/lib/domain/interfaces/exif.interface.dart deleted file mode 100644 index a5de6167e9..0000000000 --- a/mobile/lib/domain/interfaces/exif.interface.dart +++ /dev/null @@ -1,14 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/exif.model.dart'; - -abstract interface class IExifInfoRepository implements IDatabaseRepository { - Future get(int assetId); - - Future update(ExifInfo exifInfo); - - Future> updateAll(List exifInfos); - - Future delete(int assetId); - - Future deleteAll(); -} diff --git a/mobile/lib/domain/interfaces/local_album.interface.dart b/mobile/lib/domain/interfaces/local_album.interface.dart deleted file mode 100644 index 1df62954d2..0000000000 --- a/mobile/lib/domain/interfaces/local_album.interface.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; -import 'package:immich_mobile/domain/models/local_album.model.dart'; - -abstract interface class ILocalAlbumRepository implements IDatabaseRepository { - Future> getAll({Set sortBy = const {}}); - - Future> getAssets(String albumId); - - Future> getAssetIds(String albumId); - - Future upsert( - LocalAlbum album, { - Iterable toUpsert = const [], - Iterable toDelete = const [], - }); - - Future updateAll(Iterable albums); - - Future delete(String albumId); - - Future processDelta({ - required List updates, - required List deletes, - required Map> assetAlbums, - }); - - Future syncDeletes(String albumId, Iterable assetIdsToKeep); - - Future> getAssetsToHash(String albumId); -} - -enum SortLocalAlbumsBy { id, backupSelection, isIosSharedAlbum } diff --git a/mobile/lib/domain/interfaces/local_asset.interface.dart b/mobile/lib/domain/interfaces/local_asset.interface.dart deleted file mode 100644 index 5792ebe5d9..0000000000 --- a/mobile/lib/domain/interfaces/local_asset.interface.dart +++ /dev/null @@ -1,6 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; - -abstract interface class ILocalAssetRepository implements IDatabaseRepository { - Future updateHashes(Iterable hashes); -} diff --git a/mobile/lib/domain/interfaces/log.interface.dart b/mobile/lib/domain/interfaces/log.interface.dart deleted file mode 100644 index 27e91c5488..0000000000 --- a/mobile/lib/domain/interfaces/log.interface.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'dart:async'; - -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/log.model.dart'; - -abstract interface class ILogRepository implements IDatabaseRepository { - Future insert(LogMessage log); - - Future insertAll(Iterable logs); - - Future> getAll(); - - Future deleteAll(); - - /// Truncates the logs to the most recent [limit]. Defaults to recent 250 logs - Future truncate({int limit = 250}); -} diff --git a/mobile/lib/domain/interfaces/storage.interface.dart b/mobile/lib/domain/interfaces/storage.interface.dart deleted file mode 100644 index ea6513e7f2..0000000000 --- a/mobile/lib/domain/interfaces/storage.interface.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'dart:io'; - -import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; - -abstract interface class IStorageRepository { - Future getFileForAsset(LocalAsset asset); -} diff --git a/mobile/lib/domain/interfaces/store.interface.dart b/mobile/lib/domain/interfaces/store.interface.dart deleted file mode 100644 index b0a6762566..0000000000 --- a/mobile/lib/domain/interfaces/store.interface.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/store.model.dart'; - -abstract interface class IStoreRepository implements IDatabaseRepository { - Future insert(StoreKey key, T value); - - Future tryGet(StoreKey key); - - Future>> getAll(); - - Stream watch(StoreKey key); - - Stream> watchAll(); - - Future update(StoreKey key, T value); - - Future delete(StoreKey key); - - Future deleteAll(); -} diff --git a/mobile/lib/domain/interfaces/sync_api.interface.dart b/mobile/lib/domain/interfaces/sync_api.interface.dart deleted file mode 100644 index 57abed2e7f..0000000000 --- a/mobile/lib/domain/interfaces/sync_api.interface.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:http/http.dart' as http; -import 'package:immich_mobile/domain/models/sync_event.model.dart'; - -abstract interface class ISyncApiRepository { - Future ack(List data); - - Future streamChanges( - Function(List, Function() abort) onData, { - int batchSize, - http.Client? httpClient, - }); -} diff --git a/mobile/lib/domain/interfaces/timeline.interface.dart b/mobile/lib/domain/interfaces/timeline.interface.dart deleted file mode 100644 index e60dd83b50..0000000000 --- a/mobile/lib/domain/interfaces/timeline.interface.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:immich_mobile/domain/interfaces/db.interface.dart'; -import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; -import 'package:immich_mobile/domain/models/timeline.model.dart'; - -abstract interface class ITimelineRepository implements IDatabaseRepository { - Stream> watchMainBucket( - List timelineUsers, { - GroupAssetsBy groupBy = GroupAssetsBy.day, - }); - - Future> getMainBucketAssets( - List timelineUsers, { - required int offset, - required int count, - }); - - Stream> watchLocalBucket( - String albumId, { - GroupAssetsBy groupBy = GroupAssetsBy.day, - }); - - Future> getLocalBucketAssets( - String albumId, { - required int offset, - required int count, - }); -} diff --git a/mobile/lib/domain/services/hash.service.dart b/mobile/lib/domain/services/hash.service.dart index d8ad3dc2dc..87579067c8 100644 --- a/mobile/lib/domain/services/hash.service.dart +++ b/mobile/lib/domain/services/hash.service.dart @@ -1,10 +1,10 @@ import 'dart:convert'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; -import 'package:immich_mobile/domain/interfaces/local_asset.interface.dart'; -import 'package:immich_mobile/domain/interfaces/storage.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart'; import 'package:immich_mobile/platform/native_sync_api.g.dart'; import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart'; import 'package:logging/logging.dart'; @@ -12,16 +12,16 @@ import 'package:logging/logging.dart'; class HashService { final int batchSizeLimit; final int batchFileLimit; - final ILocalAlbumRepository _localAlbumRepository; - final ILocalAssetRepository _localAssetRepository; - final IStorageRepository _storageRepository; + final DriftLocalAlbumRepository _localAlbumRepository; + final DriftLocalAssetRepository _localAssetRepository; + final StorageRepository _storageRepository; final NativeSyncApi _nativeSyncApi; final _log = Logger('HashService'); HashService({ - required ILocalAlbumRepository localAlbumRepository, - required ILocalAssetRepository localAssetRepository, - required IStorageRepository storageRepository, + required DriftLocalAlbumRepository localAlbumRepository, + required DriftLocalAssetRepository localAssetRepository, + required StorageRepository storageRepository, required NativeSyncApi nativeSyncApi, this.batchSizeLimit = kBatchHashSizeLimit, this.batchFileLimit = kBatchHashFileLimit, diff --git a/mobile/lib/domain/services/local_sync.service.dart b/mobile/lib/domain/services/local_sync.service.dart index ff77ebd83e..2fdb0e82c5 100644 --- a/mobile/lib/domain/services/local_sync.service.dart +++ b/mobile/lib/domain/services/local_sync.service.dart @@ -2,11 +2,11 @@ import 'dart:async'; import 'package:collection/collection.dart'; import 'package:flutter/widgets.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/local_album.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/services/store.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; import 'package:immich_mobile/platform/native_sync_api.g.dart'; import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart'; import 'package:immich_mobile/utils/diff.dart'; @@ -14,14 +14,14 @@ import 'package:logging/logging.dart'; import 'package:platform/platform.dart'; class LocalSyncService { - final ILocalAlbumRepository _localAlbumRepository; + final DriftLocalAlbumRepository _localAlbumRepository; final NativeSyncApi _nativeSyncApi; final Platform _platform; final StoreService _storeService; final Logger _log = Logger("DeviceSyncService"); LocalSyncService({ - required ILocalAlbumRepository localAlbumRepository, + required DriftLocalAlbumRepository localAlbumRepository, required NativeSyncApi nativeSyncApi, required StoreService storeService, Platform? platform, diff --git a/mobile/lib/domain/services/log.service.dart b/mobile/lib/domain/services/log.service.dart index a25147d185..c52665f093 100644 --- a/mobile/lib/domain/services/log.service.dart +++ b/mobile/lib/domain/services/log.service.dart @@ -2,10 +2,10 @@ import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/log.interface.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/log.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/log.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; import 'package:logging/logging.dart'; /// Service responsible for handling application logging. @@ -14,8 +14,8 @@ import 'package:logging/logging.dart'; /// writes them to a persistent [ILogRepository], and manages log levels /// via [IStoreRepository] class LogService { - final ILogRepository _logRepository; - final IStoreRepository _storeRepository; + final IsarLogRepository _logRepository; + final IsarStoreRepository _storeRepository; final List _msgBuffer = []; @@ -37,8 +37,8 @@ class LogService { } static Future init({ - required ILogRepository logRepository, - required IStoreRepository storeRepository, + required IsarLogRepository logRepository, + required IsarStoreRepository storeRepository, bool shouldBuffer = true, }) async { _instance ??= await create( @@ -50,8 +50,8 @@ class LogService { } static Future create({ - required ILogRepository logRepository, - required IStoreRepository storeRepository, + required IsarLogRepository logRepository, + required IsarStoreRepository storeRepository, bool shouldBuffer = true, }) async { final instance = LogService._(logRepository, storeRepository, shouldBuffer); diff --git a/mobile/lib/domain/services/store.service.dart b/mobile/lib/domain/services/store.service.dart index 7b71acd254..359ce8cf60 100644 --- a/mobile/lib/domain/services/store.service.dart +++ b/mobile/lib/domain/services/store.service.dart @@ -1,18 +1,18 @@ import 'dart:async'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; /// Provides access to a persistent key-value store with an in-memory cache. /// Listens for repository changes to keep the cache updated. class StoreService { - final IStoreRepository _storeRepository; + final IsarStoreRepository _storeRepository; /// In-memory cache. Keys are [StoreKey.id] final Map _cache = {}; late final StreamSubscription _storeUpdateSubscription; - StoreService._({required IStoreRepository storeRepository}) + StoreService._({required IsarStoreRepository storeRepository}) : _storeRepository = storeRepository; // TODO: Temporary typedef to make minimal changes. Remove this and make the presentation layer access store through a provider @@ -26,14 +26,14 @@ class StoreService { // TODO: Replace the implementation with the one from create after removing the typedef static Future init({ - required IStoreRepository storeRepository, + required IsarStoreRepository storeRepository, }) async { _instance ??= await create(storeRepository: storeRepository); return _instance!; } static Future create({ - required IStoreRepository storeRepository, + required IsarStoreRepository storeRepository, }) async { final instance = StoreService._(storeRepository: storeRepository); await instance._populateCache(); diff --git a/mobile/lib/domain/services/sync_stream.service.dart b/mobile/lib/domain/services/sync_stream.service.dart index f8c76b9543..d612e83368 100644 --- a/mobile/lib/domain/services/sync_stream.service.dart +++ b/mobile/lib/domain/services/sync_stream.service.dart @@ -1,7 +1,7 @@ import 'dart:async'; -import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; import 'package:immich_mobile/domain/models/sync_event.model.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; @@ -9,12 +9,12 @@ import 'package:openapi/api.dart'; class SyncStreamService { final Logger _logger = Logger('SyncStreamService'); - final ISyncApiRepository _syncApiRepository; + final SyncApiRepository _syncApiRepository; final SyncStreamRepository _syncStreamRepository; final bool Function()? _cancelChecker; SyncStreamService({ - required ISyncApiRepository syncApiRepository, + required SyncApiRepository syncApiRepository, required SyncStreamRepository syncStreamRepository, bool Function()? cancelChecker, }) : _syncApiRepository = syncApiRepository, diff --git a/mobile/lib/domain/services/timeline.service.dart b/mobile/lib/domain/services/timeline.service.dart index d1211f46e2..225f7a89b1 100644 --- a/mobile/lib/domain/services/timeline.service.dart +++ b/mobile/lib/domain/services/timeline.service.dart @@ -3,11 +3,11 @@ import 'dart:math' as math; import 'package:collection/collection.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/timeline.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/setting.model.dart'; import 'package:immich_mobile/domain/models/timeline.model.dart'; import 'package:immich_mobile/domain/services/setting.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/timeline.repository.dart'; import 'package:immich_mobile/utils/async_mutex.dart'; typedef TimelineAssetSource = Future> Function( @@ -18,11 +18,11 @@ typedef TimelineAssetSource = Future> Function( typedef TimelineBucketSource = Stream> Function(); class TimelineFactory { - final ITimelineRepository _timelineRepository; + final DriftTimelineRepository _timelineRepository; final SettingsService _settingsService; const TimelineFactory({ - required ITimelineRepository timelineRepository, + required DriftTimelineRepository timelineRepository, required SettingsService settingsService, }) : _timelineRepository = timelineRepository, _settingsService = settingsService; diff --git a/mobile/lib/infrastructure/repositories/asset_media.repository.dart b/mobile/lib/infrastructure/repositories/asset_media.repository.dart index d46c340028..e8bf9ace43 100644 --- a/mobile/lib/infrastructure/repositories/asset_media.repository.dart +++ b/mobile/lib/infrastructure/repositories/asset_media.repository.dart @@ -1,13 +1,11 @@ import 'dart:typed_data'; import 'dart:ui'; -import 'package:immich_mobile/domain/interfaces/asset_media.interface.dart'; import 'package:photo_manager/photo_manager.dart'; -class AssetMediaRepository implements IAssetMediaRepository { +class AssetMediaRepository { const AssetMediaRepository(); - @override Future getThumbnail( String id, { int quality = 80, diff --git a/mobile/lib/infrastructure/repositories/device_asset.repository.dart b/mobile/lib/infrastructure/repositories/device_asset.repository.dart index 87784ecaab..4e72d4a7f6 100644 --- a/mobile/lib/infrastructure/repositories/device_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/device_asset.repository.dart @@ -1,23 +1,19 @@ -import 'package:immich_mobile/domain/interfaces/device_asset.interface.dart'; import 'package:immich_mobile/domain/models/device_asset.model.dart'; import 'package:immich_mobile/infrastructure/entities/device_asset.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:isar/isar.dart'; -class IsarDeviceAssetRepository extends IsarDatabaseRepository - implements IDeviceAssetRepository { +class IsarDeviceAssetRepository extends IsarDatabaseRepository { final Isar _db; const IsarDeviceAssetRepository(this._db) : super(_db); - @override Future deleteIds(List ids) { return transaction(() async { await _db.deviceAssetEntitys.deleteAllByAssetId(ids.toList()); }); } - @override Future> getByIds(List localIds) { return _db.deviceAssetEntitys .where() @@ -26,7 +22,6 @@ class IsarDeviceAssetRepository extends IsarDatabaseRepository .then((value) => value.map((e) => e.toModel()).toList()); } - @override Future updateAll(List assetHash) { return transaction(() async { await _db.deviceAssetEntitys diff --git a/mobile/lib/infrastructure/repositories/exif.repository.dart b/mobile/lib/infrastructure/repositories/exif.repository.dart index 2b4276dd57..0012e329ca 100644 --- a/mobile/lib/infrastructure/repositories/exif.repository.dart +++ b/mobile/lib/infrastructure/repositories/exif.repository.dart @@ -1,36 +1,30 @@ -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/domain/models/exif.model.dart'; import 'package:immich_mobile/infrastructure/entities/exif.entity.dart' as entity; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:isar/isar.dart'; -class IsarExifRepository extends IsarDatabaseRepository - implements IExifInfoRepository { +class IsarExifRepository extends IsarDatabaseRepository { final Isar _db; const IsarExifRepository(this._db) : super(_db); - @override Future delete(int assetId) async { await transaction(() async { await _db.exifInfos.delete(assetId); }); } - @override Future deleteAll() async { await transaction(() async { await _db.exifInfos.clear(); }); } - @override Future get(int assetId) async { return (await _db.exifInfos.get(assetId))?.toDto(); } - @override Future update(ExifInfo exifInfo) { return transaction(() async { await _db.exifInfos.put(entity.ExifInfo.fromDto(exifInfo)); @@ -38,7 +32,6 @@ class IsarExifRepository extends IsarDatabaseRepository }); } - @override Future> updateAll(List exifInfos) { return transaction(() async { await _db.exifInfos.putAll( diff --git a/mobile/lib/infrastructure/repositories/local_album.repository.dart b/mobile/lib/infrastructure/repositories/local_album.repository.dart index 4f46b9b408..e5f8c7b526 100644 --- a/mobile/lib/infrastructure/repositories/local_album.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_album.repository.dart @@ -1,5 +1,4 @@ import 'package:drift/drift.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/local_album.model.dart'; import 'package:immich_mobile/infrastructure/entities/local_album.entity.drift.dart'; @@ -8,15 +7,15 @@ import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.d import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:platform/platform.dart'; -class DriftLocalAlbumRepository extends DriftDatabaseRepository - implements ILocalAlbumRepository { +enum SortLocalAlbumsBy { id, backupSelection, isIosSharedAlbum } + +class DriftLocalAlbumRepository extends DriftDatabaseRepository { final Drift _db; final Platform _platform; const DriftLocalAlbumRepository(this._db, {Platform? platform}) : _platform = platform ?? const LocalPlatform(), super(_db); - @override Future> getAll({Set sortBy = const {}}) { final assetCount = _db.localAlbumAssetEntity.assetId.count(); @@ -56,7 +55,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository .get(); } - @override Future delete(String albumId) => transaction(() async { // Remove all assets that are only in this particular album // We cannot remove all assets in the album because they might be in other albums in iOS @@ -72,7 +70,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository .delete(); }); - @override Future syncDeletes( String albumId, Iterable assetIdsToKeep, @@ -101,7 +98,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository await deleteSmt.go(); } - @override Future upsert( LocalAlbum localAlbum, { Iterable toUpsert = const [], @@ -134,7 +130,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository }); } - @override Future updateAll(Iterable albums) { return _db.transaction(() async { await _db.localAlbumEntity @@ -185,7 +180,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository }); } - @override Future> getAssets(String albumId) { final query = _db.localAlbumAssetEntity.select().join( [ @@ -202,7 +196,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository .get(); } - @override Future> getAssetIds(String albumId) { final query = _db.localAlbumAssetEntity.selectOnly() ..addColumns([_db.localAlbumAssetEntity.assetId]) @@ -212,7 +205,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository .get(); } - @override Future processDelta({ required List updates, required List deletes, @@ -253,7 +245,6 @@ class DriftLocalAlbumRepository extends DriftDatabaseRepository }); } - @override Future> getAssetsToHash(String albumId) { final query = _db.localAlbumAssetEntity.select().join( [ diff --git a/mobile/lib/infrastructure/repositories/local_asset.repository.dart b/mobile/lib/infrastructure/repositories/local_asset.repository.dart index 350a8dcd32..2efa04cc1b 100644 --- a/mobile/lib/infrastructure/repositories/local_asset.repository.dart +++ b/mobile/lib/infrastructure/repositories/local_asset.repository.dart @@ -1,15 +1,12 @@ import 'package:drift/drift.dart'; -import 'package:immich_mobile/domain/interfaces/local_asset.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/infrastructure/entities/local_asset.entity.drift.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; -class DriftLocalAssetRepository extends DriftDatabaseRepository - implements ILocalAssetRepository { +class DriftLocalAssetRepository extends DriftDatabaseRepository { final Drift _db; const DriftLocalAssetRepository(this._db) : super(_db); - @override Future updateHashes(Iterable hashes) { if (hashes.isEmpty) { return Future.value(); diff --git a/mobile/lib/infrastructure/repositories/log.repository.dart b/mobile/lib/infrastructure/repositories/log.repository.dart index 6ff128f93b..717900910a 100644 --- a/mobile/lib/infrastructure/repositories/log.repository.dart +++ b/mobile/lib/infrastructure/repositories/log.repository.dart @@ -1,28 +1,23 @@ -import 'package:immich_mobile/domain/interfaces/log.interface.dart'; import 'package:immich_mobile/domain/models/log.model.dart'; import 'package:immich_mobile/infrastructure/entities/log.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:isar/isar.dart'; -class IsarLogRepository extends IsarDatabaseRepository - implements ILogRepository { +class IsarLogRepository extends IsarDatabaseRepository { final Isar _db; const IsarLogRepository(super.db) : _db = db; - @override Future deleteAll() async { await transaction(() async => await _db.loggerMessages.clear()); return true; } - @override Future> getAll() async { final logs = await _db.loggerMessages.where().sortByCreatedAtDesc().findAll(); return logs.map((l) => l.toDto()).toList(); } - @override Future insert(LogMessage log) async { final logEntity = LoggerMessage.fromDto(log); await transaction(() async { @@ -31,7 +26,6 @@ class IsarLogRepository extends IsarDatabaseRepository return true; } - @override Future insertAll(Iterable logs) async { await transaction(() async { final logEntities = @@ -41,7 +35,6 @@ class IsarLogRepository extends IsarDatabaseRepository return true; } - @override Future truncate({int limit = 250}) async { await transaction(() async { final count = await _db.loggerMessages.count(); diff --git a/mobile/lib/infrastructure/repositories/storage.repository.dart b/mobile/lib/infrastructure/repositories/storage.repository.dart index 57dfc42135..2b6b616d87 100644 --- a/mobile/lib/infrastructure/repositories/storage.repository.dart +++ b/mobile/lib/infrastructure/repositories/storage.repository.dart @@ -1,14 +1,12 @@ import 'dart:io'; -import 'package:immich_mobile/domain/interfaces/storage.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:logging/logging.dart'; import 'package:photo_manager/photo_manager.dart'; -class StorageRepository implements IStorageRepository { +class StorageRepository { final _log = Logger('StorageRepository'); - @override Future getFileForAsset(LocalAsset asset) async { File? file; try { diff --git a/mobile/lib/infrastructure/repositories/store.repository.dart b/mobile/lib/infrastructure/repositories/store.repository.dart index fec36193bc..400c8ccf7d 100644 --- a/mobile/lib/infrastructure/repositories/store.repository.dart +++ b/mobile/lib/infrastructure/repositories/store.repository.dart @@ -1,4 +1,3 @@ -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/infrastructure/entities/store.entity.dart'; @@ -6,14 +5,12 @@ import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:isar/isar.dart'; -class IsarStoreRepository extends IsarDatabaseRepository - implements IStoreRepository { +class IsarStoreRepository extends IsarDatabaseRepository { final Isar _db; final validStoreKeys = StoreKey.values.map((e) => e.id).toSet(); IsarStoreRepository(super.db) : _db = db; - @override Future deleteAll() async { return await transaction(() async { await _db.storeValues.clear(); @@ -21,7 +18,6 @@ class IsarStoreRepository extends IsarDatabaseRepository }); } - @override Stream> watchAll() { return _db.storeValues .filter() @@ -34,12 +30,10 @@ class IsarStoreRepository extends IsarDatabaseRepository ); } - @override Future delete(StoreKey key) async { return await transaction(() async => await _db.storeValues.delete(key.id)); } - @override Future insert(StoreKey key, T value) async { return await transaction(() async { await _db.storeValues.put(await _fromValue(key, value)); @@ -47,7 +41,6 @@ class IsarStoreRepository extends IsarDatabaseRepository }); } - @override Future tryGet(StoreKey key) async { final entity = (await _db.storeValues.get(key.id)); if (entity == null) { @@ -56,7 +49,6 @@ class IsarStoreRepository extends IsarDatabaseRepository return await _toValue(key, entity); } - @override Future update(StoreKey key, T value) async { return await transaction(() async { await _db.storeValues.put(await _fromValue(key, value)); @@ -64,7 +56,6 @@ class IsarStoreRepository extends IsarDatabaseRepository }); } - @override Stream watch(StoreKey key) async* { yield* _db.storeValues .watchObject(key.id, fireImmediately: true) @@ -109,7 +100,6 @@ class IsarStoreRepository extends IsarDatabaseRepository return StoreValue(key.id, intValue: intValue, strValue: strValue); } - @override Future>> getAll() async { final entities = await _db.storeValues .filter() diff --git a/mobile/lib/infrastructure/repositories/sync_api.repository.dart b/mobile/lib/infrastructure/repositories/sync_api.repository.dart index ca24eef60f..f14773fc4d 100644 --- a/mobile/lib/infrastructure/repositories/sync_api.repository.dart +++ b/mobile/lib/infrastructure/repositories/sync_api.repository.dart @@ -3,24 +3,21 @@ import 'dart:convert'; import 'package:http/http.dart' as http; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; import 'package:immich_mobile/domain/models/sync_event.model.dart'; import 'package:immich_mobile/presentation/pages/dev/dev_logger.dart'; import 'package:immich_mobile/services/api.service.dart'; import 'package:logging/logging.dart'; import 'package:openapi/api.dart'; -class SyncApiRepository implements ISyncApiRepository { +class SyncApiRepository { final Logger _logger = Logger('SyncApiRepository'); final ApiService _api; SyncApiRepository(this._api); - @override Future ack(List data) { return _api.syncApi.sendSyncAck(SyncAckSetDto(acks: data)); } - @override Future streamChanges( Function(List, Function() abort) onData, { int batchSize = kSyncEventBatchSize, diff --git a/mobile/lib/infrastructure/repositories/timeline.repository.dart b/mobile/lib/infrastructure/repositories/timeline.repository.dart index 909332ec6e..add327cf00 100644 --- a/mobile/lib/infrastructure/repositories/timeline.repository.dart +++ b/mobile/lib/infrastructure/repositories/timeline.repository.dart @@ -3,15 +3,13 @@ import 'dart:async'; import 'package:drift/drift.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/timeline.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/timeline.model.dart'; import 'package:immich_mobile/infrastructure/entities/local_asset.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:stream_transform/stream_transform.dart'; -class DriftTimelineRepository extends DriftDatabaseRepository - implements ITimelineRepository { +class DriftTimelineRepository extends DriftDatabaseRepository { final Drift _db; const DriftTimelineRepository(super._db) : _db = _db; @@ -28,7 +26,6 @@ class DriftTimelineRepository extends DriftDatabaseRepository return buckets; } - @override Stream> watchMainBucket( List userIds, { GroupAssetsBy groupBy = GroupAssetsBy.day, @@ -49,7 +46,6 @@ class DriftTimelineRepository extends DriftDatabaseRepository .throttle(const Duration(seconds: 3), trailing: true); } - @override Future> getMainBucketAssets( List userIds, { required int offset, @@ -90,7 +86,6 @@ class DriftTimelineRepository extends DriftDatabaseRepository .get(); } - @override Stream> watchLocalBucket( String albumId, { GroupAssetsBy groupBy = GroupAssetsBy.day, @@ -124,7 +119,6 @@ class DriftTimelineRepository extends DriftDatabaseRepository }).watch(); } - @override Future> getLocalBucketAssets( String albumId, { required int offset, diff --git a/mobile/lib/interfaces/upload.interface.dart b/mobile/lib/interfaces/upload.interface.dart deleted file mode 100644 index d4b2298a14..0000000000 --- a/mobile/lib/interfaces/upload.interface.dart +++ /dev/null @@ -1,11 +0,0 @@ -import 'package:background_downloader/background_downloader.dart'; - -abstract interface class IUploadRepository { - void Function(TaskStatusUpdate)? onUploadStatus; - void Function(TaskProgressUpdate)? onTaskProgress; - - Future upload(UploadTask task); - Future cancel(String id); - Future deleteAllTrackingRecords(); - Future deleteRecordsWithIds(List id); -} diff --git a/mobile/lib/interfaces/widget.interface.dart b/mobile/lib/interfaces/widget.interface.dart deleted file mode 100644 index f76fbef8de..0000000000 --- a/mobile/lib/interfaces/widget.interface.dart +++ /dev/null @@ -1,5 +0,0 @@ -abstract interface class IWidgetRepository { - Future saveData(String key, String value); - Future refresh(String name); - Future setAppGroupId(String appGroupId); -} diff --git a/mobile/lib/presentation/widgets/images/local_thumb_provider.dart b/mobile/lib/presentation/widgets/images/local_thumb_provider.dart index 607057cf44..11b2f2b08e 100644 --- a/mobile/lib/presentation/widgets/images/local_thumb_provider.dart +++ b/mobile/lib/presentation/widgets/images/local_thumb_provider.dart @@ -4,14 +4,13 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; -import 'package:immich_mobile/domain/interfaces/asset_media.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/infrastructure/repositories/asset_media.repository.dart'; import 'package:immich_mobile/presentation/widgets/timeline/constants.dart'; import 'package:immich_mobile/providers/image/cache/thumbnail_image_cache_manager.dart'; class LocalThumbProvider extends ImageProvider { - final IAssetMediaRepository _assetMediaRepository = + final AssetMediaRepository _assetMediaRepository = const AssetMediaRepository(); final CacheManager? cacheManager; diff --git a/mobile/lib/providers/infrastructure/album.provider.dart b/mobile/lib/providers/infrastructure/album.provider.dart index cb4aadb8a7..6a48073196 100644 --- a/mobile/lib/providers/infrastructure/album.provider.dart +++ b/mobile/lib/providers/infrastructure/album.provider.dart @@ -1,8 +1,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; -final localAlbumRepository = Provider( +final localAlbumRepository = Provider( (ref) => DriftLocalAlbumRepository(ref.watch(driftProvider)), ); diff --git a/mobile/lib/providers/infrastructure/asset.provider.dart b/mobile/lib/providers/infrastructure/asset.provider.dart index d714571473..9faef5a53f 100644 --- a/mobile/lib/providers/infrastructure/asset.provider.dart +++ b/mobile/lib/providers/infrastructure/asset.provider.dart @@ -1,8 +1,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/local_asset.interface.dart'; import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; -final localAssetRepository = Provider( +final localAssetRepository = Provider( (ref) => DriftLocalAssetRepository(ref.watch(driftProvider)), ); diff --git a/mobile/lib/providers/infrastructure/device_asset.provider.dart b/mobile/lib/providers/infrastructure/device_asset.provider.dart index 5fa532b9ec..7854af016a 100644 --- a/mobile/lib/providers/infrastructure/device_asset.provider.dart +++ b/mobile/lib/providers/infrastructure/device_asset.provider.dart @@ -1,8 +1,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/device_asset.interface.dart'; import 'package:immich_mobile/infrastructure/repositories/device_asset.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; -final deviceAssetRepositoryProvider = Provider( +final deviceAssetRepositoryProvider = Provider( (ref) => IsarDeviceAssetRepository(ref.watch(isarProvider)), ); diff --git a/mobile/lib/providers/infrastructure/exif.provider.dart b/mobile/lib/providers/infrastructure/exif.provider.dart index ecb67dd2fe..59ad632927 100644 --- a/mobile/lib/providers/infrastructure/exif.provider.dart +++ b/mobile/lib/providers/infrastructure/exif.provider.dart @@ -1,5 +1,4 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -7,5 +6,5 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'exif.provider.g.dart'; @Riverpod(keepAlive: true) -IExifInfoRepository exifRepository(Ref ref) => +IsarExifRepository exifRepository(Ref ref) => IsarExifRepository(ref.watch(isarProvider)); diff --git a/mobile/lib/providers/infrastructure/exif.provider.g.dart b/mobile/lib/providers/infrastructure/exif.provider.g.dart index 053abf18cc..0261558707 100644 --- a/mobile/lib/providers/infrastructure/exif.provider.g.dart +++ b/mobile/lib/providers/infrastructure/exif.provider.g.dart @@ -6,11 +6,11 @@ part of 'exif.provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$exifRepositoryHash() => r'f0abe778ed61fbb257001fdf2ac6e17814011fee'; +String _$exifRepositoryHash() => r'bf4a3f6a50d954a23d317659b4f3e2f381066463'; /// See also [exifRepository]. @ProviderFor(exifRepository) -final exifRepositoryProvider = Provider.internal( +final exifRepositoryProvider = Provider.internal( exifRepository, name: r'exifRepositoryProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') @@ -22,6 +22,6 @@ final exifRepositoryProvider = Provider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef ExifRepositoryRef = ProviderRef; +typedef ExifRepositoryRef = ProviderRef; // ignore_for_file: type=lint // ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package diff --git a/mobile/lib/providers/infrastructure/storage.provider.dart b/mobile/lib/providers/infrastructure/storage.provider.dart index d8ac79f1c1..f9ac10b461 100644 --- a/mobile/lib/providers/infrastructure/storage.provider.dart +++ b/mobile/lib/providers/infrastructure/storage.provider.dart @@ -1,7 +1,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/storage.interface.dart'; import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart'; -final storageRepositoryProvider = Provider( +final storageRepositoryProvider = Provider( (ref) => StorageRepository(), ); diff --git a/mobile/lib/providers/infrastructure/store.provider.dart b/mobile/lib/providers/infrastructure/store.provider.dart index c7f0c04a4f..6ae7ff987b 100644 --- a/mobile/lib/providers/infrastructure/store.provider.dart +++ b/mobile/lib/providers/infrastructure/store.provider.dart @@ -1,5 +1,4 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/services/store.service.dart'; import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; @@ -8,7 +7,7 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'store.provider.g.dart'; @Riverpod(keepAlive: true) -IStoreRepository storeRepository(Ref ref) => +IsarStoreRepository storeRepository(Ref ref) => IsarStoreRepository(ref.watch(isarProvider)); @Riverpod(keepAlive: true) diff --git a/mobile/lib/providers/infrastructure/store.provider.g.dart b/mobile/lib/providers/infrastructure/store.provider.g.dart index ffdcd291b6..22b783013a 100644 --- a/mobile/lib/providers/infrastructure/store.provider.g.dart +++ b/mobile/lib/providers/infrastructure/store.provider.g.dart @@ -6,11 +6,11 @@ part of 'store.provider.dart'; // RiverpodGenerator // ************************************************************************** -String _$storeRepositoryHash() => r'99d24875d30c5e86b1c6caa352a0026167114e62'; +String _$storeRepositoryHash() => r'659cb134466e4b0d5f04e2fc93e426350d99545f'; /// See also [storeRepository]. @ProviderFor(storeRepository) -final storeRepositoryProvider = Provider.internal( +final storeRepositoryProvider = Provider.internal( storeRepository, name: r'storeRepositoryProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') @@ -22,7 +22,7 @@ final storeRepositoryProvider = Provider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef StoreRepositoryRef = ProviderRef; +typedef StoreRepositoryRef = ProviderRef; String _$storeServiceHash() => r'250e10497c42df360e9e1f9a618d0b19c1b5b0a0'; /// See also [storeService]. diff --git a/mobile/lib/providers/infrastructure/timeline.provider.dart b/mobile/lib/providers/infrastructure/timeline.provider.dart index 7004dd0262..4172e559c4 100644 --- a/mobile/lib/providers/infrastructure/timeline.provider.dart +++ b/mobile/lib/providers/infrastructure/timeline.provider.dart @@ -1,12 +1,11 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/timeline.interface.dart'; import 'package:immich_mobile/domain/services/timeline.service.dart'; import 'package:immich_mobile/infrastructure/repositories/timeline.repository.dart'; import 'package:immich_mobile/presentation/widgets/timeline/timeline.state.dart'; import 'package:immich_mobile/providers/infrastructure/db.provider.dart'; import 'package:immich_mobile/providers/infrastructure/setting.provider.dart'; -final timelineRepositoryProvider = Provider( +final timelineRepositoryProvider = Provider( (ref) => DriftTimelineRepository(ref.watch(driftProvider)), ); diff --git a/mobile/lib/repositories/upload.repository.dart b/mobile/lib/repositories/upload.repository.dart index 6445d144f6..4f840fa3c6 100644 --- a/mobile/lib/repositories/upload.repository.dart +++ b/mobile/lib/repositories/upload.repository.dart @@ -1,15 +1,12 @@ import 'package:background_downloader/background_downloader.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/interfaces/upload.interface.dart'; import 'package:immich_mobile/utils/upload.dart'; final uploadRepositoryProvider = Provider((ref) => UploadRepository()); -class UploadRepository implements IUploadRepository { - @override +class UploadRepository { void Function(TaskStatusUpdate)? onUploadStatus; - @override void Function(TaskProgressUpdate)? onTaskProgress; UploadRepository() { @@ -20,22 +17,18 @@ class UploadRepository implements IUploadRepository { ); } - @override Future upload(UploadTask task) { return FileDownloader().enqueue(task); } - @override Future deleteAllTrackingRecords() { return FileDownloader().database.deleteAllRecords(); } - @override Future cancel(String id) { return FileDownloader().cancelTaskWithId(id); } - @override Future deleteRecordsWithIds(List ids) { return FileDownloader().database.deleteRecordsWithIds(ids); } diff --git a/mobile/lib/repositories/widget.repository.dart b/mobile/lib/repositories/widget.repository.dart index a813bc56d6..630c47fcec 100644 --- a/mobile/lib/repositories/widget.repository.dart +++ b/mobile/lib/repositories/widget.repository.dart @@ -1,23 +1,19 @@ import 'package:home_widget/home_widget.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/interfaces/widget.interface.dart'; final widgetRepositoryProvider = Provider((_) => WidgetRepository()); -class WidgetRepository implements IWidgetRepository { +class WidgetRepository { WidgetRepository(); - @override Future saveData(String key, String value) async { await HomeWidget.saveWidgetData(key, value); } - @override Future refresh(String name) async { await HomeWidget.updateWidget(name: name, iOSName: name); } - @override Future setAppGroupId(String appGroupId) async { await HomeWidget.setAppGroupId(appGroupId); } diff --git a/mobile/lib/services/asset.service.dart b/mobile/lib/services/asset.service.dart index cd582b94ac..b761ebb39b 100644 --- a/mobile/lib/services/asset.service.dart +++ b/mobile/lib/services/asset.service.dart @@ -4,11 +4,11 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/backup_album.entity.dart'; +import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/models/backup/backup_candidate.model.dart'; import 'package:immich_mobile/providers/api.provider.dart'; @@ -47,7 +47,7 @@ final assetServiceProvider = Provider( class AssetService { final AssetApiRepository _assetApiRepository; final AssetRepository _assetRepository; - final IExifInfoRepository _exifInfoRepository; + final IsarExifRepository _exifInfoRepository; final IsarUserRepository _isarUserRepository; final ETagRepository _etagRepository; final BackupAlbumRepository _backupRepository; diff --git a/mobile/lib/services/backup_verification.service.dart b/mobile/lib/services/backup_verification.service.dart index 5e3ec667da..6d6884eb00 100644 --- a/mobile/lib/services/backup_verification.service.dart +++ b/mobile/lib/services/backup_verification.service.dart @@ -5,12 +5,12 @@ import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/domain/models/exif.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/store.entity.dart'; +import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:immich_mobile/infrastructure/utils/exif.converter.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; import 'package:immich_mobile/providers/infrastructure/user.provider.dart'; @@ -25,7 +25,7 @@ class BackupVerificationService { final UserService _userService; final FileMediaRepository _fileMediaRepository; final AssetRepository _assetRepository; - final IExifInfoRepository _exifInfoRepository; + final IsarExifRepository _exifInfoRepository; const BackupVerificationService( this._userService, diff --git a/mobile/lib/services/exif.service.dart b/mobile/lib/services/exif.service.dart index 973f04303e..4d21614ec5 100644 --- a/mobile/lib/services/exif.service.dart +++ b/mobile/lib/services/exif.service.dart @@ -1,12 +1,12 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; +import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:immich_mobile/providers/infrastructure/exif.provider.dart'; final exifServiceProvider = Provider((ref) => ExifService(ref.watch(exifRepositoryProvider))); class ExifService { - final IExifInfoRepository _exifInfoRepository; + final IsarExifRepository _exifInfoRepository; const ExifService(this._exifInfoRepository); diff --git a/mobile/lib/services/hash.service.dart b/mobile/lib/services/hash.service.dart index f8a09471e4..f0554bf00b 100644 --- a/mobile/lib/services/hash.service.dart +++ b/mobile/lib/services/hash.service.dart @@ -4,23 +4,23 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/device_asset.interface.dart'; import 'package:immich_mobile/domain/models/device_asset.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; +import 'package:immich_mobile/infrastructure/repositories/device_asset.repository.dart'; import 'package:immich_mobile/providers/infrastructure/device_asset.provider.dart'; import 'package:immich_mobile/services/background.service.dart'; import 'package:logging/logging.dart'; class HashService { HashService({ - required IDeviceAssetRepository deviceAssetRepository, + required IsarDeviceAssetRepository deviceAssetRepository, required BackgroundService backgroundService, this.batchSizeLimit = kBatchHashSizeLimit, this.batchFileLimit = kBatchHashFileLimit, }) : _deviceAssetRepository = deviceAssetRepository, _backgroundService = backgroundService; - final IDeviceAssetRepository _deviceAssetRepository; + final IsarDeviceAssetRepository _deviceAssetRepository; final BackgroundService _backgroundService; final int batchSizeLimit; final int batchFileLimit; diff --git a/mobile/lib/services/sync.service.dart b/mobile/lib/services/sync.service.dart index cdf7340958..5a95be2237 100644 --- a/mobile/lib/services/sync.service.dart +++ b/mobile/lib/services/sync.service.dart @@ -4,13 +4,13 @@ import 'dart:io'; import 'package:collection/collection.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/enums.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/domain/services/user.service.dart'; import 'package:immich_mobile/entities/album.entity.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; import 'package:immich_mobile/entities/etag.entity.dart'; import 'package:immich_mobile/extensions/collection_extensions.dart'; +import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:immich_mobile/providers/app_settings.provider.dart'; @@ -60,7 +60,7 @@ class SyncService { final AlbumApiRepository _albumApiRepository; final AlbumRepository _albumRepository; final AssetRepository _assetRepository; - final IExifInfoRepository _exifInfoRepository; + final IsarExifRepository _exifInfoRepository; final IsarUserRepository _isarUserRepository; final UserService _userService; final PartnerRepository _partnerRepository; diff --git a/mobile/lib/services/upload.service.dart b/mobile/lib/services/upload.service.dart index 0734e57212..18f90ab844 100644 --- a/mobile/lib/services/upload.service.dart +++ b/mobile/lib/services/upload.service.dart @@ -4,7 +4,6 @@ import 'package:background_downloader/background_downloader.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/entities/store.entity.dart'; -import 'package:immich_mobile/interfaces/upload.interface.dart'; import 'package:immich_mobile/repositories/upload.repository.dart'; import 'package:immich_mobile/services/api.service.dart'; import 'package:immich_mobile/utils/upload.dart'; @@ -18,7 +17,7 @@ final uploadServiceProvider = Provider( ); class UploadService { - final IUploadRepository _uploadRepository; + final UploadRepository _uploadRepository; // final Logger _log = Logger("UploadService"); void Function(TaskStatusUpdate)? onUploadStatus; void Function(TaskProgressUpdate)? onTaskProgress; diff --git a/mobile/lib/services/widget.service.dart b/mobile/lib/services/widget.service.dart index bb7b367c27..e71733f4b9 100644 --- a/mobile/lib/services/widget.service.dart +++ b/mobile/lib/services/widget.service.dart @@ -1,6 +1,5 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/interfaces/widget.interface.dart'; import 'package:immich_mobile/repositories/widget.repository.dart'; final widgetServiceProvider = Provider((ref) { @@ -10,7 +9,7 @@ final widgetServiceProvider = Provider((ref) { }); class WidgetService { - final IWidgetRepository _repository; + final WidgetRepository _repository; WidgetService(this._repository); diff --git a/mobile/test/domain/services/hash_service_test.dart b/mobile/test/domain/services/hash_service_test.dart index 623aed5409..2a7ea740bf 100644 --- a/mobile/test/domain/services/hash_service_test.dart +++ b/mobile/test/domain/services/hash_service_test.dart @@ -3,9 +3,9 @@ import 'dart:io'; import 'dart:typed_data'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/services/hash.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; import 'package:mocktail/mocktail.dart'; import '../../fixtures/album.stub.dart'; diff --git a/mobile/test/domain/services/log_service_test.dart b/mobile/test/domain/services/log_service_test.dart index fd9a86ce4e..23bdcc9909 100644 --- a/mobile/test/domain/services/log_service_test.dart +++ b/mobile/test/domain/services/log_service_test.dart @@ -1,11 +1,11 @@ import 'package:collection/collection.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:immich_mobile/constants/constants.dart'; -import 'package:immich_mobile/domain/interfaces/log.interface.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/log.model.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/services/log.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/log.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; import 'package:logging/logging.dart'; import 'package:mocktail/mocktail.dart'; @@ -28,8 +28,8 @@ final _kWarnLog = LogMessage( void main() { late LogService sut; - late ILogRepository mockLogRepo; - late IStoreRepository mockStoreRepo; + late IsarLogRepository mockLogRepo; + late IsarStoreRepository mockStoreRepo; setUp(() async { mockLogRepo = MockLogRepository(); diff --git a/mobile/test/domain/services/store_service_test.dart b/mobile/test/domain/services/store_service_test.dart index 8f4749ac62..7eab532ef3 100644 --- a/mobile/test/domain/services/store_service_test.dart +++ b/mobile/test/domain/services/store_service_test.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/services/store.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; import 'package:mocktail/mocktail.dart'; import '../../infrastructure/repository.mock.dart'; @@ -15,7 +15,7 @@ final _kBackupFailedSince = DateTime.utc(2023); void main() { late StoreService sut; - late IStoreRepository mockStoreRepo; + late IsarStoreRepository mockStoreRepo; late StreamController> controller; setUp(() async { diff --git a/mobile/test/domain/services/sync_stream_service_test.dart b/mobile/test/domain/services/sync_stream_service_test.dart index 3e19306bdb..03d481f9f3 100644 --- a/mobile/test/domain/services/sync_stream_service_test.dart +++ b/mobile/test/domain/services/sync_stream_service_test.dart @@ -3,9 +3,9 @@ import 'dart:async'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; import 'package:immich_mobile/domain/models/sync_event.model.dart'; import 'package:immich_mobile/domain/services/sync_stream.service.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; import 'package:mocktail/mocktail.dart'; @@ -31,7 +31,7 @@ class _MockCancellationWrapper extends Mock implements _CancellationWrapper {} void main() { late SyncStreamService sut; late SyncStreamRepository mockSyncStreamRepo; - late ISyncApiRepository mockSyncApiRepo; + late SyncApiRepository mockSyncApiRepo; late Function(List, Function()) handleEventsCallback; late _MockAbortCallbackWrapper mockAbortCallbackWrapper; diff --git a/mobile/test/infrastructure/repositories/exif_repository_test.dart b/mobile/test/infrastructure/repositories/exif_repository_test.dart index e267d2dac4..4e7ee4d79d 100644 --- a/mobile/test/infrastructure/repositories/exif_repository_test.dart +++ b/mobile/test/infrastructure/repositories/exif_repository_test.dart @@ -1,5 +1,4 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; import 'package:immich_mobile/infrastructure/entities/exif.entity.dart'; import 'package:immich_mobile/infrastructure/repositories/exif.repository.dart'; import 'package:isar/isar.dart'; @@ -20,7 +19,7 @@ Future _populateExifTable(Isar db) async { void main() { late Isar db; - late IExifInfoRepository sut; + late IsarExifRepository sut; setUp(() async { db = await TestUtils.initIsar(); diff --git a/mobile/test/infrastructure/repositories/local_album_repository_test.dart b/mobile/test/infrastructure/repositories/local_album_repository_test.dart index 827d81c79b..f6c82c1be8 100644 --- a/mobile/test/infrastructure/repositories/local_album_repository_test.dart +++ b/mobile/test/infrastructure/repositories/local_album_repository_test.dart @@ -1,9 +1,9 @@ import 'package:drift/drift.dart'; import 'package:drift/native.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/domain/models/local_album.model.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; import '../../test_utils/medium_factory.dart'; @@ -24,7 +24,7 @@ void main() { group('getAll', () { test('sorts albums by backupSelection & isIosSharedAlbum', () async { final localAlbumRepo = - mediumFactory.getRepository(); + mediumFactory.getRepository(); await localAlbumRepo.upsert( mediumFactory.localAlbum( id: '1', diff --git a/mobile/test/infrastructure/repositories/store_repository_test.dart b/mobile/test/infrastructure/repositories/store_repository_test.dart index 528e17ba3d..ce13c1ecdd 100644 --- a/mobile/test/infrastructure/repositories/store_repository_test.dart +++ b/mobile/test/infrastructure/repositories/store_repository_test.dart @@ -1,5 +1,4 @@ import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; import 'package:immich_mobile/domain/models/store.model.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/infrastructure/entities/store.entity.dart'; @@ -42,7 +41,7 @@ Future _populateStore(Isar db) async { void main() { late Isar db; - late IStoreRepository sut; + late IsarStoreRepository sut; setUp(() async { db = await TestUtils.initIsar(); diff --git a/mobile/test/infrastructure/repository.mock.dart b/mobile/test/infrastructure/repository.mock.dart index e41b89f16a..1fde303863 100644 --- a/mobile/test/infrastructure/repository.mock.dart +++ b/mobile/test/infrastructure/repository.mock.dart @@ -1,33 +1,35 @@ -import 'package:immich_mobile/domain/interfaces/device_asset.interface.dart'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; -import 'package:immich_mobile/domain/interfaces/local_asset.interface.dart'; -import 'package:immich_mobile/domain/interfaces/log.interface.dart'; -import 'package:immich_mobile/domain/interfaces/storage.interface.dart'; -import 'package:immich_mobile/domain/interfaces/store.interface.dart'; -import 'package:immich_mobile/domain/interfaces/sync_api.interface.dart'; +import 'package:immich_mobile/infrastructure/repositories/device_asset.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_album.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/local_asset.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/log.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/storage.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/store.repository.dart'; +import 'package:immich_mobile/infrastructure/repositories/sync_api.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/sync_stream.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user.repository.dart'; import 'package:immich_mobile/infrastructure/repositories/user_api.repository.dart'; import 'package:mocktail/mocktail.dart'; -class MockStoreRepository extends Mock implements IStoreRepository {} +class MockStoreRepository extends Mock implements IsarStoreRepository {} -class MockLogRepository extends Mock implements ILogRepository {} +class MockLogRepository extends Mock implements IsarLogRepository {} class MockIsarUserRepository extends Mock implements IsarUserRepository {} class MockDeviceAssetRepository extends Mock - implements IDeviceAssetRepository {} + implements IsarDeviceAssetRepository {} class MockSyncStreamRepository extends Mock implements SyncStreamRepository {} -class MockLocalAlbumRepository extends Mock implements ILocalAlbumRepository {} +class MockLocalAlbumRepository extends Mock + implements DriftLocalAlbumRepository {} -class MockLocalAssetRepository extends Mock implements ILocalAssetRepository {} +class MockLocalAssetRepository extends Mock + implements DriftLocalAssetRepository {} -class MockStorageRepository extends Mock implements IStorageRepository {} +class MockStorageRepository extends Mock implements StorageRepository {} // API Repos class MockUserApiRepository extends Mock implements UserApiRepository {} -class MockSyncApiRepository extends Mock implements ISyncApiRepository {} +class MockSyncApiRepository extends Mock implements SyncApiRepository {} diff --git a/mobile/test/repository.mocks.dart b/mobile/test/repository.mocks.dart index e0a12e97cf..54a7e2d4a4 100644 --- a/mobile/test/repository.mocks.dart +++ b/mobile/test/repository.mocks.dart @@ -1,4 +1,4 @@ -import 'package:immich_mobile/domain/interfaces/exif.interface.dart'; +import 'package:immich_mobile/infrastructure/repositories/exif.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_api.repository.dart'; @@ -21,7 +21,7 @@ class MockAssetRepository extends Mock implements AssetRepository {} class MockBackupRepository extends Mock implements BackupAlbumRepository {} -class MockExifInfoRepository extends Mock implements IExifInfoRepository {} +class MockExifInfoRepository extends Mock implements IsarExifRepository {} class MockETagRepository extends Mock implements ETagRepository {} diff --git a/mobile/test/services/hash_service_test.dart b/mobile/test/services/hash_service_test.dart index e278199e4f..2ba9c356a0 100644 --- a/mobile/test/services/hash_service_test.dart +++ b/mobile/test/services/hash_service_test.dart @@ -6,9 +6,9 @@ import 'package:collection/collection.dart'; import 'package:file/memory.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:immich_mobile/domain/interfaces/device_asset.interface.dart'; import 'package:immich_mobile/domain/models/device_asset.model.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; +import 'package:immich_mobile/infrastructure/repositories/device_asset.repository.dart'; import 'package:immich_mobile/services/background.service.dart'; import 'package:immich_mobile/services/hash.service.dart'; import 'package:mocktail/mocktail.dart'; @@ -25,7 +25,7 @@ class MockAssetEntity extends Mock implements AssetEntity {} void main() { late HashService sut; late BackgroundService mockBackgroundService; - late IDeviceAssetRepository mockDeviceAssetRepository; + late IsarDeviceAssetRepository mockDeviceAssetRepository; setUp(() { mockBackgroundService = MockBackgroundService(); diff --git a/mobile/test/test_utils/medium_factory.dart b/mobile/test/test_utils/medium_factory.dart index 64c23321aa..affe9c9b39 100644 --- a/mobile/test/test_utils/medium_factory.dart +++ b/mobile/test/test_utils/medium_factory.dart @@ -1,6 +1,5 @@ import 'dart:math'; -import 'package:immich_mobile/domain/interfaces/local_album.interface.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; import 'package:immich_mobile/domain/models/local_album.model.dart'; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; @@ -56,7 +55,7 @@ class MediumFactory { T getRepository() { switch (T) { - case const (ILocalAlbumRepository): + case const (DriftLocalAlbumRepository): return DriftLocalAlbumRepository(_db) as T; default: throw Exception('Unknown repository: $T');