[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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user