Show album examples in search section + refactor
This commit is contained in:
parent
eb38e4cfda
commit
b42d845ce3
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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),
|
||||
);
|
||||
},
|
||||
);
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in a new issue