fix(mobile): photo_manager ignore filters (#18742)

Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com>
This commit is contained in:
shenlong 2025-06-02 20:13:59 +05:30 committed by GitHub
parent d48702f943
commit df927dd3ce
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -17,6 +17,30 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
bool get useCustomFilter => bool get useCustomFilter =>
Store.get(StoreKey.photoManagerCustomFilter, false); Store.get(StoreKey.photoManagerCustomFilter, false);
FilterOptionGroup? _getAlbumFilter({
DateTimeCond? updateTimeCond,
bool? containsPathModified,
List<OrderOption>? 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 @override
Future<List<Album>> getAll() async { Future<List<Album>> getAll() async {
final filter = useCustomFilter final filter = useCustomFilter
@ -30,7 +54,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
@override @override
Future<List<String>> getAssetIds(String albumId) async { Future<List<String>> getAssetIds(String albumId) async {
final album = await AssetPathEntity.fromId(albumId); final album =
await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
final List<AssetEntity> assets = final List<AssetEntity> assets =
await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff); await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff);
return assets.map((e) => e.id).toList(); return assets.map((e) => e.id).toList();
@ -38,7 +63,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
@override @override
Future<int> getAssetCount(String albumId) async { Future<int> getAssetCount(String albumId) async {
final album = await AssetPathEntity.fromId(albumId); final album =
await AssetPathEntity.fromId(albumId, filterOption: _getAlbumFilter());
return album.assetCountAsync; return album.assetCountAsync;
} }
@ -53,17 +79,14 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
}) async { }) async {
final onDevice = await AssetPathEntity.fromId( final onDevice = await AssetPathEntity.fromId(
albumId, albumId,
filterOption: FilterOptionGroup( filterOption: _getAlbumFilter(
imageOption: const FilterOption(needTitle: true),
videoOption: const FilterOption(needTitle: true),
containsPathModified: true,
updateTimeCond: modifiedFrom == null && modifiedUntil == null updateTimeCond: modifiedFrom == null && modifiedUntil == null
? null ? null
: DateTimeCond( : DateTimeCond(
min: modifiedFrom ?? DateTime.utc(-271820), min: modifiedFrom ?? DateTime.utc(-271820),
max: modifiedUntil ?? DateTime.utc(275760), max: modifiedUntil ?? DateTime.utc(275760),
), ),
orders: orderByModificationDate orderBy: orderByModificationDate
? [const OrderOption(type: OrderOptionType.updateDate)] ? [const OrderOption(type: OrderOptionType.updateDate)]
: [], : [],
), ),
@ -80,7 +103,10 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
DateTime? modifiedFrom, DateTime? modifiedFrom,
DateTime? modifiedUntil, DateTime? modifiedUntil,
}) async { }) async {
final assetPathEntity = await AssetPathEntity.fromId(id); final assetPathEntity = await AssetPathEntity.fromId(
id,
filterOption: _getAlbumFilter(containsPathModified: true),
);
return _toAlbum(assetPathEntity); return _toAlbum(assetPathEntity);
} }