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 =>
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
Future<List<Album>> getAll() async {
final filter = useCustomFilter
@ -30,7 +54,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
@override
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 =
await album.getAssetListRange(start: 0, end: 0x7fffffffffffffff);
return assets.map((e) => e.id).toList();
@ -38,7 +63,8 @@ class AlbumMediaRepository implements IAlbumMediaRepository {
@override
Future<int> 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);
}