[mob][photos] Add initialFilter in search results page depending on the type of search result passed
This commit is contained in:
@@ -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,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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!);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user