[mob][photos] Add initialFilter in search results page depending on the type of search result passed

This commit is contained in:
ashilkn
2024-10-07 16:26:05 +05:30
parent aa9fbd281e
commit 5f2cc6f6c3
8 changed files with 144 additions and 8 deletions

View File

@@ -1,5 +1,7 @@
import 'package:photos/models/collection/collection_items.dart';
import 'package:photos/models/file/file.dart';
import "package:photos/models/search/hierarchical/album_filter.dart";
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import 'package:photos/models/search/search_result.dart';
import "package:photos/models/search/search_types.dart";
@@ -28,4 +30,13 @@ class AlbumSearchResult extends SearchResult {
// for album search result, we should open the album page directly
throw UnimplementedError();
}
@override
HierarchicalSearchFilter toHierarchicalSearchFilter() {
return AlbumFilter(
collectionID: collectionWithThumbnail.collection.id,
albumName: collectionWithThumbnail.collection.displayName,
occurrence: kMostRelevantFilter,
);
}
}

View File

@@ -1,4 +1,5 @@
import 'package:photos/models/file/file.dart';
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import 'package:photos/models/search/search_result.dart';
import "package:photos/models/search/search_types.dart";
@@ -27,4 +28,9 @@ class FileSearchResult extends SearchResult {
// for fileSearchResult, the file detailed page view will be opened
throw UnimplementedError();
}
@override
HierarchicalSearchFilter toHierarchicalSearchFilter() {
throw UnimplementedError();
}
}

View File

@@ -1,5 +1,6 @@
import "package:flutter/cupertino.dart";
import 'package:photos/models/file/file.dart';
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import 'package:photos/models/search/search_result.dart';
import "package:photos/models/search/search_types.dart";
@@ -37,4 +38,9 @@ class GenericSearchResult extends SearchResult {
List<EnteFile> resultFiles() {
return _files;
}
@override
HierarchicalSearchFilter toHierarchicalSearchFilter() {
return _type.toHierarchicalSearchFilter(this);
}
}

View File

@@ -1,4 +1,5 @@
import "package:photos/models/file/file.dart";
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import "package:photos/models/search/search_types.dart";
abstract class SearchResult {
@@ -13,4 +14,6 @@ abstract class SearchResult {
}
List<EnteFile> resultFiles();
HierarchicalSearchFilter toHierarchicalSearchFilter();
}

View File

@@ -11,6 +11,10 @@ import "package:photos/events/people_changed_event.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/models/collection/collection.dart";
import "package:photos/models/collection/collection_items.dart";
import "package:photos/models/search/album_search_result.dart";
import "package:photos/models/search/hierarchical/album_filter.dart";
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import "package:photos/models/search/hierarchical/top_level_generic_filter.dart";
import "package:photos/models/search/search_result.dart";
import "package:photos/models/typedefs.dart";
import "package:photos/services/collections_service.dart";
@@ -19,6 +23,7 @@ import "package:photos/ui/viewer/gallery/collection_page.dart";
import "package:photos/ui/viewer/location/add_location_sheet.dart";
import "package:photos/ui/viewer/location/pick_center_point_widget.dart";
import "package:photos/utils/dialog_util.dart";
import "package:photos/utils/file_util.dart";
import "package:photos/utils/navigation_util.dart";
import "package:photos/utils/share_util.dart";
@@ -51,6 +56,102 @@ enum SectionType {
fileTypesAndExtension,
}
extension ResultTypeExtensions on ResultType {
HierarchicalSearchFilter toHierarchicalSearchFilter(
SearchResult searchResult,
) {
switch (this) {
case ResultType.collection:
return AlbumFilter(
collectionID: (searchResult as AlbumSearchResult)
.collectionWithThumbnail
.collection
.id,
albumName: searchResult.name(),
occurrence: kMostRelevantFilter,
);
case ResultType.file:
throw UnimplementedError();
/// Location results are never shown from SearchResultsPage
case ResultType.location:
throw UnimplementedError();
case ResultType.locationSuggestion:
throw UnimplementedError();
case ResultType.month:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.calendar_today_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.year:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.calendar_today_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.fileType:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.fileExtension:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.fileCaption:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.description_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.event:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.event_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.shared:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.person_outline,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.faces:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.face_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
case ResultType.magic:
return TopLevelGenericFilter(
filterName: searchResult.name(),
occurrence: kMostRelevantFilter,
filterIcon: Icons.auto_awesome_outlined,
matchedUploadedIDs:
filesToUploadedFileIDs(searchResult.resultFiles()),
);
}
}
}
extension SectionTypeExtensions on SectionType {
// passing context for internalization in the future
String sectionTitle(BuildContext context) {

View File

@@ -5,11 +5,8 @@ import 'package:photos/core/event_bus.dart';
import 'package:photos/events/files_updated_event.dart';
import 'package:photos/events/local_photos_updated_event.dart';
import 'package:photos/models/file/file.dart';
import "package:photos/models/file/file_type.dart";
import 'package:photos/models/file_load_result.dart';
import 'package:photos/models/gallery_type.dart';
import "package:photos/models/search/hierarchical/file_type_filter.dart";
import "package:photos/models/search/hierarchical/hierarchical_search_filter.dart";
import 'package:photos/models/search/search_result.dart';
import 'package:photos/models/selected_files.dart';
import 'package:photos/ui/viewer/actions/file_selection_overlay_bar.dart';
@@ -102,11 +99,8 @@ class _SearchResultPageState extends State<SearchResultPage> {
return GalleryFilesState(
child: InheritedSearchFilterData(
searchFilterDataProvider: SearchFilterDataProvider(
//TODO: Add filter type according to the search result
initialGalleryFilter: FileTypeFilter(
fileType: FileType.image,
occurrence: kMostRelevantFilter,
),
initialGalleryFilter:
widget.searchResult.toHierarchicalSearchFilter(),
),
child: Scaffold(
appBar: PreferredSize(

View File

@@ -377,3 +377,13 @@ class _LivePhoto {
_LivePhoto(this.image, this.video);
}
Set<int> filesToUploadedFileIDs(List<EnteFile> files) {
final uploadedFileIDs = <int>{};
for (final file in files) {
if (file.isUploaded) {
uploadedFileIDs.add(file.uploadedFileID!);
}
}
return uploadedFileIDs;
}

View File

@@ -1,3 +1,5 @@
import "dart:developer";
import "package:logging/logging.dart";
import "package:photos/core/configuration.dart";
import "package:photos/db/files_db.dart";
@@ -33,6 +35,9 @@ Future<List<EnteFile>> getFilteredFiles(
continue;
}
for (HierarchicalSearchFilter filter in resultsNeverComputedFilters) {
log(
"Computing results for never computed $filter: ${filter.name()}",
);
if (filter.isMatch(file)) {
filter.matchedUploadedIDs.add(file.uploadedFileID!);
}