Show album examples in search section + refactor

This commit is contained in:
ashilkn 2023-10-09 12:42:51 +05:30
parent eb38e4cfda
commit b42d845ce3
4 changed files with 52 additions and 17 deletions

View file

@ -1,6 +1,5 @@
import "package:flutter/material.dart";
import "package:photos/generated/l10n.dart";
import "package:photos/models/search/generic_search_result.dart";
import "package:photos/models/search/search_result.dart";
import "package:photos/services/search_service.dart";
@ -164,28 +163,28 @@ extension SectionTypeExtensions on SectionType {
Future<List<SearchResult>> getData({int? limit}) {
switch (this) {
case SectionType.face:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
case SectionType.content:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
case SectionType.moment:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
case SectionType.location:
return SearchService.instance.getAllLocationTags(limit);
case SectionType.people:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
case SectionType.album:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllCollectionSearchResults(limit);
case SectionType.fileTypesAndExtension:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
case SectionType.fileCaption:
return Future.value([GenericSearchResult(ResultType.file, "", [])]);
return SearchService.instance.getAllLocationTags(limit);
}
}
}

View file

@ -88,6 +88,30 @@ class SearchService {
return collectionSearchResults;
}
Future<List<AlbumSearchResult>> getAllCollectionSearchResults(
int? limit,
) async {
final List<Collection> collections = _collectionService.getCollectionsForUI(
includedShared: true,
);
final List<AlbumSearchResult> collectionSearchResults = [];
for (var c in collections) {
if (limit != null && collectionSearchResults.length >= limit) {
break;
}
if (!c.isHidden() && c.type != CollectionType.uncategorized) {
final EnteFile? thumbnail = await _collectionService.getCover(c);
collectionSearchResults
.add(AlbumSearchResult(CollectionWithThumbnail(c, thumbnail)));
}
}
return collectionSearchResults;
}
Future<List<GenericSearchResult>> getYearSearchResults(
String yearFromQuery,
) async {

View file

@ -48,11 +48,20 @@ class AllSearchSections extends StatefulWidget {
}
class _AllSearchSectionsState extends State<AllSearchSections> {
late Future<List<List<SearchResult>>> allFutures;
final locationTags = SectionType.location.getData(limit: 7);
late Future<List<List<SearchResult>>> allExamplesSearchResults;
@override
void initState() {
allFutures = Future.wait<List<SearchResult>>([locationTags]);
final exampleSearchResults = <Future<List<SearchResult>>>[];
for (SectionType sectionType in SectionType.values) {
if (sectionType == SectionType.face ||
sectionType == SectionType.content) {
continue;
}
exampleSearchResults.add(sectionType.getData(limit: 7));
}
allExamplesSearchResults =
Future.wait<List<SearchResult>>(exampleSearchResults);
super.initState();
}
@ -66,7 +75,7 @@ class _AllSearchSectionsState extends State<AllSearchSections> {
searchTypes.remove(SectionType.content);
return Expanded(
child: FutureBuilder(
future: allFutures,
future: allExamplesSearchResults,
builder: (context, snapshot) {
if (snapshot.hasData) {
return ListView.builder(
@ -75,7 +84,7 @@ class _AllSearchSectionsState extends State<AllSearchSections> {
itemBuilder: (context, index) {
return SearchSection(
sectionType: searchTypes[index],
examples: snapshot.data!.first,
examples: snapshot.data!.elementAt(index),
);
},
);

View file

@ -5,6 +5,7 @@ import "package:photos/models/search/generic_search_result.dart";
import "package:photos/models/search/search_result.dart";
import "package:photos/models/search/search_types.dart";
import "package:photos/theme/ente_theme.dart";
import "package:photos/ui/viewer/file/no_thumbnail_widget.dart";
import "package:photos/ui/viewer/file/thumbnail_widget.dart";
import "package:photos/ui/viewer/gallery/collection_page.dart";
import "package:photos/ui/viewer/search/search_section_cta.dart";
@ -125,10 +126,12 @@ class SearchExample extends StatelessWidget {
height: 64,
child: ClipRRect(
borderRadius: BorderRadius.circular(32),
child: ThumbnailWidget(
searchResult.previewThumbnail()!,
shouldShowSyncStatus: false,
),
child: searchResult.previewThumbnail() != null
? ThumbnailWidget(
searchResult.previewThumbnail()!,
shouldShowSyncStatus: false,
)
: const NoThumbnailWidget(),
),
),
const SizedBox(