diff --git a/mobile/lib/repositories/album_media.repository.dart b/mobile/lib/repositories/album_media.repository.dart index 8673ebd2b0..9cba072580 100644 --- a/mobile/lib/repositories/album_media.repository.dart +++ b/mobile/lib/repositories/album_media.repository.dart @@ -17,6 +17,30 @@ class AlbumMediaRepository implements IAlbumMediaRepository { bool get useCustomFilter => Store.get(StoreKey.photoManagerCustomFilter, false); + FilterOptionGroup? _getAlbumFilter({ + DateTimeCond? updateTimeCond, + bool? containsPathModified, + List? orderBy, + }) => + useCustomFilter + ? FilterOptionGroup( + imageOption: const FilterOption( + needTitle: true, + sizeConstraint: SizeConstraint(ignoreSize: true), + ), + videoOption: const FilterOption( + needTitle: true, + sizeConstraint: SizeConstraint(ignoreSize: true), + durationConstraint: DurationConstraint(allowNullable: true), + ), + containsPathModified: containsPathModified ?? false, + createTimeCond: DateTimeCond.def().copyWith(ignore: true), + updateTimeCond: + updateTimeCond ?? DateTimeCond.def().copyWith(ignore: true), + orders: orderBy ?? [], + ) + : null; + @override Future> getAll() async { final filter = useCustomFilter @@ -30,7 +54,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository { @override Future> getAssetIds(String albumId) async { - final album = await AssetPathEntity.fromId(albumId); + final album = + await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter()); final List assets = await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff); return assets.map((e) => e.id).toList(); @@ -38,7 +63,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository { @override Future getAssetCount(String albumId) async { - final album = await AssetPathEntity.fromId(albumId); + final album = + await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter()); return album.assetCountAsync; } @@ -53,17 +79,14 @@ class AlbumMediaRepository implements IAlbumMediaRepository { }) async { final onDevice = await AssetPathEntity.fromId( albumId, - filterOption: FilterOptionGroup( - imageOption: const FilterOption(needTitle: true), - videoOption: const FilterOption(needTitle: true), - containsPathModified: true, + filterOption: _getAlbumFilter( updateTimeCond: modifiedFrom == null && modifiedUntil == null ? null : DateTimeCond( min: modifiedFrom ?? DateTime.utc(-271820), max: modifiedUntil ?? DateTime.utc(275760), ), - orders: orderByModificationDate + orderBy: orderByModificationDate ? [const OrderOption(type: OrderOptionType.updateDate)] : [], ), @@ -80,7 +103,10 @@ class AlbumMediaRepository implements IAlbumMediaRepository { DateTime? modifiedFrom, DateTime? modifiedUntil, }) async { - final assetPathEntity = await AssetPathEntity.fromId(id); + final assetPathEntity = await AssetPathEntity.fromId( + id, + filterOption: _getAlbumFilter(containsPathModified: true), + ); return _toAlbum(assetPathEntity); }