mirror of
https://github.com/immich-app/immich.git
synced 2025-07-09 03:04:16 -04:00
refactor(mobile): album.interface.dart (#19354)
This commit is contained in:
parent
2b03802e9c
commit
81eb98d4e5
@ -1,55 +0,0 @@
|
|||||||
import 'package:immich_mobile/domain/models/user.model.dart';
|
|
||||||
import 'package:immich_mobile/entities/album.entity.dart';
|
|
||||||
import 'package:immich_mobile/entities/asset.entity.dart';
|
|
||||||
import 'package:immich_mobile/interfaces/database.interface.dart';
|
|
||||||
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
|
||||||
|
|
||||||
abstract interface class IAlbumRepository implements IDatabaseRepository {
|
|
||||||
Future<Album> create(Album album);
|
|
||||||
|
|
||||||
Future<Album?> get(int id);
|
|
||||||
|
|
||||||
Future<Album?> getByName(
|
|
||||||
String name, {
|
|
||||||
bool? shared,
|
|
||||||
bool? remote,
|
|
||||||
bool? owner,
|
|
||||||
});
|
|
||||||
|
|
||||||
Future<List<Album>> getAll({
|
|
||||||
bool? shared,
|
|
||||||
bool? remote,
|
|
||||||
int? ownerId,
|
|
||||||
AlbumSort? sortBy,
|
|
||||||
});
|
|
||||||
|
|
||||||
Future<Album> update(Album album);
|
|
||||||
|
|
||||||
Future<void> delete(int albumId);
|
|
||||||
|
|
||||||
Future<void> deleteAllLocal();
|
|
||||||
|
|
||||||
Future<int> count({bool? local});
|
|
||||||
|
|
||||||
Future<void> addUsers(Album album, List<UserDto> users);
|
|
||||||
|
|
||||||
Future<void> removeUsers(Album album, List<UserDto> users);
|
|
||||||
|
|
||||||
Future<void> addAssets(Album album, List<Asset> assets);
|
|
||||||
|
|
||||||
Future<void> removeAssets(Album album, List<Asset> assets);
|
|
||||||
|
|
||||||
Future<Album> recalculateMetadata(Album album);
|
|
||||||
|
|
||||||
Future<List<Album>> search(String searchTerm, QuickFilterMode filterMode);
|
|
||||||
|
|
||||||
Stream<List<Album>> watchRemoteAlbums();
|
|
||||||
|
|
||||||
Stream<List<Album>> watchLocalAlbums();
|
|
||||||
|
|
||||||
Stream<Album?> watchAlbum(int id);
|
|
||||||
|
|
||||||
Future<void> clearTable();
|
|
||||||
}
|
|
||||||
|
|
||||||
enum AlbumSort { remoteId, localId }
|
|
@ -6,20 +6,20 @@ 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/entities/user.entity.dart'
|
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
||||||
as entity;
|
as entity;
|
||||||
import 'package:immich_mobile/interfaces/album.interface.dart';
|
|
||||||
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
||||||
import 'package:immich_mobile/providers/db.provider.dart';
|
import 'package:immich_mobile/providers/db.provider.dart';
|
||||||
import 'package:immich_mobile/repositories/database.repository.dart';
|
import 'package:immich_mobile/repositories/database.repository.dart';
|
||||||
import 'package:immich_mobile/utils/hash.dart';
|
import 'package:immich_mobile/utils/hash.dart';
|
||||||
import 'package:isar/isar.dart';
|
import 'package:isar/isar.dart';
|
||||||
|
|
||||||
|
enum AlbumSort { remoteId, localId }
|
||||||
|
|
||||||
final albumRepositoryProvider =
|
final albumRepositoryProvider =
|
||||||
Provider((ref) => AlbumRepository(ref.watch(dbProvider)));
|
Provider((ref) => AlbumRepository(ref.watch(dbProvider)));
|
||||||
|
|
||||||
class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
class AlbumRepository extends DatabaseRepository {
|
||||||
AlbumRepository(super.db);
|
AlbumRepository(super.db);
|
||||||
|
|
||||||
@override
|
|
||||||
Future<int> count({bool? local}) {
|
Future<int> count({bool? local}) {
|
||||||
final baseQuery = db.albums.where();
|
final baseQuery = db.albums.where();
|
||||||
final QueryBuilder<Album, Album, QAfterWhereClause> query = switch (local) {
|
final QueryBuilder<Album, Album, QAfterWhereClause> query = switch (local) {
|
||||||
@ -30,10 +30,8 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
|||||||
return query.count();
|
return query.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Album> create(Album album) => txn(() => db.albums.store(album));
|
Future<Album> create(Album album) => txn(() => db.albums.store(album));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Album?> getByName(
|
Future<Album?> getByName(
|
||||||
String name, {
|
String name, {
|
||||||
bool? shared,
|
bool? shared,
|
||||||
@ -58,13 +56,10 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
|||||||
return query.findFirst();
|
return query.findFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Album> update(Album album) => txn(() => db.albums.store(album));
|
Future<Album> update(Album album) => txn(() => db.albums.store(album));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> delete(int albumId) => txn(() => db.albums.delete(albumId));
|
Future<void> delete(int albumId) => txn(() => db.albums.delete(albumId));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<List<Album>> getAll({
|
Future<List<Album>> getAll({
|
||||||
bool? shared,
|
bool? shared,
|
||||||
bool? remote,
|
bool? remote,
|
||||||
@ -96,23 +91,18 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
|||||||
return query.findAll();
|
return query.findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Album?> get(int id) => db.albums.get(id);
|
Future<Album?> get(int id) => db.albums.get(id);
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> removeUsers(Album album, List<UserDto> users) => txn(
|
Future<void> removeUsers(Album album, List<UserDto> users) => txn(
|
||||||
() => album.sharedUsers.update(unlink: users.map(entity.User.fromDto)),
|
() => album.sharedUsers.update(unlink: users.map(entity.User.fromDto)),
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> addAssets(Album album, List<Asset> assets) =>
|
Future<void> addAssets(Album album, List<Asset> assets) =>
|
||||||
txn(() => album.assets.update(link: assets));
|
txn(() => album.assets.update(link: assets));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> removeAssets(Album album, List<Asset> assets) =>
|
Future<void> removeAssets(Album album, List<Asset> assets) =>
|
||||||
txn(() => album.assets.update(unlink: assets));
|
txn(() => album.assets.update(unlink: assets));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<Album> recalculateMetadata(Album album) async {
|
Future<Album> recalculateMetadata(Album album) async {
|
||||||
album.startDate = await album.assets.filter().fileCreatedAtProperty().min();
|
album.startDate = await album.assets.filter().fileCreatedAtProperty().min();
|
||||||
album.endDate = await album.assets.filter().fileCreatedAtProperty().max();
|
album.endDate = await album.assets.filter().fileCreatedAtProperty().max();
|
||||||
@ -121,15 +111,12 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
|||||||
return album;
|
return album;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> addUsers(Album album, List<UserDto> users) =>
|
Future<void> addUsers(Album album, List<UserDto> users) =>
|
||||||
txn(() => album.sharedUsers.update(link: users.map(entity.User.fromDto)));
|
txn(() => album.sharedUsers.update(link: users.map(entity.User.fromDto)));
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> deleteAllLocal() =>
|
Future<void> deleteAllLocal() =>
|
||||||
txn(() => db.albums.where().localIdIsNotNull().deleteAll());
|
txn(() => db.albums.where().localIdIsNotNull().deleteAll());
|
||||||
|
|
||||||
@override
|
|
||||||
Future<List<Album>> search(
|
Future<List<Album>> search(
|
||||||
String searchTerm,
|
String searchTerm,
|
||||||
QuickFilterMode filterMode,
|
QuickFilterMode filterMode,
|
||||||
@ -152,24 +139,20 @@ class AlbumRepository extends DatabaseRepository implements IAlbumRepository {
|
|||||||
return await query.findAll();
|
return await query.findAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Future<void> clearTable() async {
|
Future<void> clearTable() async {
|
||||||
await txn(() async {
|
await txn(() async {
|
||||||
await db.albums.clear();
|
await db.albums.clear();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Stream<List<Album>> watchRemoteAlbums() {
|
Stream<List<Album>> watchRemoteAlbums() {
|
||||||
return db.albums.where().remoteIdIsNotNull().watch();
|
return db.albums.where().remoteIdIsNotNull().watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Stream<List<Album>> watchLocalAlbums() {
|
Stream<List<Album>> watchLocalAlbums() {
|
||||||
return db.albums.where().localIdIsNotNull().watch();
|
return db.albums.where().localIdIsNotNull().watch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
Stream<Album?> watchAlbum(int id) {
|
Stream<Album?> watchAlbum(int id) {
|
||||||
return db.albums.watchObject(id, fireImmediately: true);
|
return db.albums.watchObject(id, fireImmediately: true);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/asset.entity.dart';
|
|||||||
import 'package:immich_mobile/entities/backup_album.entity.dart';
|
import 'package:immich_mobile/entities/backup_album.entity.dart';
|
||||||
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
import 'package:immich_mobile/infrastructure/entities/user.entity.dart'
|
||||||
as entity;
|
as entity;
|
||||||
import 'package:immich_mobile/interfaces/album.interface.dart';
|
|
||||||
import 'package:immich_mobile/models/albums/album_add_asset_response.model.dart';
|
import 'package:immich_mobile/models/albums/album_add_asset_response.model.dart';
|
||||||
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
import 'package:immich_mobile/models/albums/album_search.model.dart';
|
||||||
import 'package:immich_mobile/providers/infrastructure/user.provider.dart';
|
import 'package:immich_mobile/providers/infrastructure/user.provider.dart';
|
||||||
@ -44,7 +43,7 @@ class AlbumService {
|
|||||||
final SyncService _syncService;
|
final SyncService _syncService;
|
||||||
final UserService _userService;
|
final UserService _userService;
|
||||||
final EntityService _entityService;
|
final EntityService _entityService;
|
||||||
final IAlbumRepository _albumRepository;
|
final AlbumRepository _albumRepository;
|
||||||
final AssetRepository _assetRepository;
|
final AssetRepository _assetRepository;
|
||||||
final BackupAlbumRepository _backupAlbumRepository;
|
final BackupAlbumRepository _backupAlbumRepository;
|
||||||
final AlbumMediaRepository _albumMediaRepository;
|
final AlbumMediaRepository _albumMediaRepository;
|
||||||
|
@ -13,7 +13,6 @@ import 'package:immich_mobile/entities/etag.entity.dart';
|
|||||||
import 'package:immich_mobile/extensions/collection_extensions.dart';
|
import 'package:immich_mobile/extensions/collection_extensions.dart';
|
||||||
import 'package:immich_mobile/infrastructure/repositories/user.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/infrastructure/repositories/user_api.repository.dart';
|
||||||
import 'package:immich_mobile/interfaces/album.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';
|
||||||
@ -59,7 +58,7 @@ class SyncService {
|
|||||||
final EntityService _entityService;
|
final EntityService _entityService;
|
||||||
final AlbumMediaRepository _albumMediaRepository;
|
final AlbumMediaRepository _albumMediaRepository;
|
||||||
final AlbumApiRepository _albumApiRepository;
|
final AlbumApiRepository _albumApiRepository;
|
||||||
final IAlbumRepository _albumRepository;
|
final AlbumRepository _albumRepository;
|
||||||
final AssetRepository _assetRepository;
|
final AssetRepository _assetRepository;
|
||||||
final IExifInfoRepository _exifInfoRepository;
|
final IExifInfoRepository _exifInfoRepository;
|
||||||
final IsarUserRepository _isarUserRepository;
|
final IsarUserRepository _isarUserRepository;
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import 'package:immich_mobile/domain/interfaces/exif.interface.dart';
|
import 'package:immich_mobile/domain/interfaces/exif.interface.dart';
|
||||||
import 'package:immich_mobile/interfaces/album.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';
|
||||||
@ -12,10 +11,11 @@ import 'package:immich_mobile/repositories/auth.repository.dart';
|
|||||||
import 'package:immich_mobile/repositories/auth_api.repository.dart';
|
import 'package:immich_mobile/repositories/auth_api.repository.dart';
|
||||||
import 'package:immich_mobile/repositories/asset.repository.dart';
|
import 'package:immich_mobile/repositories/asset.repository.dart';
|
||||||
import 'package:immich_mobile/repositories/asset_media.repository.dart';
|
import 'package:immich_mobile/repositories/asset_media.repository.dart';
|
||||||
|
import 'package:immich_mobile/repositories/album.repository.dart';
|
||||||
import 'package:immich_mobile/repositories/asset_api.repository.dart';
|
import 'package:immich_mobile/repositories/asset_api.repository.dart';
|
||||||
import 'package:mocktail/mocktail.dart';
|
import 'package:mocktail/mocktail.dart';
|
||||||
|
|
||||||
class MockAlbumRepository extends Mock implements IAlbumRepository {}
|
class MockAlbumRepository extends Mock implements AlbumRepository {}
|
||||||
|
|
||||||
class MockAssetRepository extends Mock implements AssetRepository {}
|
class MockAssetRepository extends Mock implements AssetRepository {}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user