From aa9fbd281e09106dfe68c5be4953cbaf949695ce Mon Sep 17 00:00:00 2001 From: ashilkn Date: Sat, 5 Oct 2024 22:18:18 +0530 Subject: [PATCH] [mob][photos] Create a top level generic filter to be used for search ResultTypes(s) for which we don't plan to keep a subtype of HierarchicalSearchFilter --- .../hierarchical_search_filter.dart | 4 +- .../top_level_generic_filter.dart | 59 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 mobile/lib/models/search/hierarchical/top_level_generic_filter.dart diff --git a/mobile/lib/models/search/hierarchical/hierarchical_search_filter.dart b/mobile/lib/models/search/hierarchical/hierarchical_search_filter.dart index 3587eeaa91..15ccf8cf8b 100644 --- a/mobile/lib/models/search/hierarchical/hierarchical_search_filter.dart +++ b/mobile/lib/models/search/hierarchical/hierarchical_search_filter.dart @@ -10,7 +10,9 @@ abstract class HierarchicalSearchFilter { //adding/removing applied filters. An exception where results can be all files //in gallery is when the filter is the initial filter (top level) of the //gallery. - final Set matchedUploadedIDs = {}; + final Set matchedUploadedIDs; + + HierarchicalSearchFilter({this.matchedUploadedIDs = const {}}); String name(); IconData? icon(); diff --git a/mobile/lib/models/search/hierarchical/top_level_generic_filter.dart b/mobile/lib/models/search/hierarchical/top_level_generic_filter.dart new file mode 100644 index 0000000000..8b267c7110 --- /dev/null +++ b/mobile/lib/models/search/hierarchical/top_level_generic_filter.dart @@ -0,0 +1,59 @@ +import "package:flutter/material.dart"; +import "package:flutter/widgets.dart"; +import "package:photos/models/file/file.dart"; +import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart"; + +///Not necessary that all top level filters in hierarchical search have to be +///a [TopLevelGenericFilter]. +class TopLevelGenericFilter extends HierarchicalSearchFilter { + final String filterName; + final int occurrence; + final IconData? filterIcon; + + TopLevelGenericFilter({ + required this.filterName, + required this.occurrence, + required super.matchedUploadedIDs, + this.filterIcon, + }); + + @override + bool isMatch(EnteFile file) { + throw UnimplementedError( + "isMatch is not ment to be called by design for TopLevelGenericFilter. " + "isMatch is used for checking if files match the filter and then to add " + "the file's uploaded fileIDs to the filter's matchingFileIDs list. For " + "top level filters, matchingFileIDs should be set when the filter is " + "initialised since the results are passed to the widget where it's " + "initialised.", + ); + } + + @override + Set getMatchedUploadedIDs() { + return matchedUploadedIDs; + } + + @override + bool isSameFilter(HierarchicalSearchFilter other) { + if (other is TopLevelGenericFilter) { + return other.filterName == filterName; + } + return false; + } + + @override + String name() { + return filterName; + } + + @override + IconData? icon() { + return filterIcon; + } + + @override + int relevance() { + return occurrence; + } +}