[mob][photos] Do not show up the initial gallery filter on hierarchical search's filter recommendations

For example, if we search for an album 'Trip to Coorg' and go in the album, 'Trip to Coorg' shouldn't come up in recommended filters
This commit is contained in:
ashilkn
2024-09-25 13:14:54 +05:30
parent 88891bf24e
commit bd6fe03710
4 changed files with 51 additions and 5 deletions

View File

@@ -40,4 +40,12 @@ class AlbumFilter extends HierarchicalSearchFilter {
Set<int> getMatchedUploadedIDs() {
return matchedUploadedIDs;
}
@override
bool isSameFilter(HierarchicalSearchFilter other) {
if (other is AlbumFilter) {
return other.collectionID == collectionID;
}
return false;
}
}

View File

@@ -1,10 +1,14 @@
import "package:flutter/widgets.dart";
import "package:photos/models/file/file.dart";
int kMostRelevantFilter = 10000;
int kLeastRelevantFilter = -1;
abstract class HierarchicalSearchFilter {
String name();
IconData? icon();
int relevance();
bool isMatch(EnteFile file);
Set<int> getMatchedUploadedIDs();
bool isSameFilter(HierarchicalSearchFilter other);
}

View File

@@ -9,6 +9,8 @@ import 'package:photos/models/collection/collection_items.dart';
import 'package:photos/models/file/file.dart';
import 'package:photos/models/file_load_result.dart';
import 'package:photos/models/gallery_type.dart';
import "package:photos/models/search/hierarchical/album_filter.dart";
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import 'package:photos/models/selected_files.dart';
import 'package:photos/services/ignored_files_service.dart';
import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart';
@@ -101,7 +103,12 @@ class CollectionPage extends StatelessWidget {
: const SizedBox(height: 212),
);
return InheritedSearchFilterData(
searchFilterDataProvider: SearchFilterDataProvider(),
searchFilterDataProvider: SearchFilterDataProvider()
..initialGalleryFilter = AlbumFilter(
collectionID: c.collection.id,
albumName: c.collection.displayName,
occurrence: kMostRelevantFilter,
),
child: Scaffold(
appBar: PreferredSize(
preferredSize: const Size.fromHeight(50.0),

View File

@@ -5,13 +5,20 @@ class SearchFilterDataProvider {
final _appliedFiltersNotifier = _AppliedFiltersNotifier();
final _recommendedFiltersNotifier = _RecommendedFiltersNotifier();
//TODO: Make this non-nullable and required so every time this is wrapped
//over a gallery's scaffold, it's forced to provide an initial gallery filter
HierarchicalSearchFilter? initialGalleryFilter;
List<HierarchicalSearchFilter> get recommendations =>
_recommendedFiltersNotifier.recommendedFilters;
List<HierarchicalSearchFilter> get appliedFilters =>
_appliedFiltersNotifier.appliedFilters;
void addRecommendations(List<HierarchicalSearchFilter> filters) {
_recommendedFiltersNotifier.addFilters(filters);
_recommendedFiltersNotifier.addFilters(
filters,
initialGalleryFilter: initialGalleryFilter,
);
}
void applyFilters(List<HierarchicalSearchFilter> filters) {
@@ -21,7 +28,10 @@ class SearchFilterDataProvider {
void removeAppliedFilters(List<HierarchicalSearchFilter> filters) {
_appliedFiltersNotifier.removeFilters(filters);
_recommendedFiltersNotifier.addFilters(filters);
_recommendedFiltersNotifier.addFilters(
filters,
initialGalleryFilter: initialGalleryFilter,
);
}
void clearRecommendations() {
@@ -82,8 +92,25 @@ class _RecommendedFiltersNotifier extends ChangeNotifier {
List<HierarchicalSearchFilter> get recommendedFilters => _recommendedFilters;
void addFilters(List<HierarchicalSearchFilter> filters) {
_recommendedFilters.addAll(filters);
void addFilters(
List<HierarchicalSearchFilter> filters, {
required HierarchicalSearchFilter? initialGalleryFilter,
}) {
if (initialGalleryFilter != null) {
for (HierarchicalSearchFilter filter in filters) {
if (filter.isSameFilter(initialGalleryFilter)) {
continue;
}
_recommendedFilters.add(filter);
}
} else {
//To check if such cases come up during development of hierarchical search
assert(
false,
"Initial gallery filter not provided",
);
_recommendedFilters.addAll(filters);
}
notifyListeners();
}