Show people search section examples (people as in people who have shared items)

This commit is contained in:
ashilkn 2023-10-16 16:37:36 +05:30
parent f7b32ec9bb
commit 40cc0ed70f
3 changed files with 39 additions and 2 deletions

View file

@ -12,7 +12,8 @@ enum ResultType {
fileType,
fileExtension,
fileCaption,
event
event,
shared,
}
enum SectionType {
@ -178,7 +179,7 @@ extension SectionTypeExtensions on SectionType {
return SearchService.instance.getAllLocationTags(limit);
case SectionType.people:
return SearchService.instance.getAllLocationTags(limit);
return SearchService.instance.getPeopleSearchResults(limit);
case SectionType.album:
return SearchService.instance.getAllCollectionSearchResults(limit);

View file

@ -7,8 +7,10 @@ import 'package:photos/data/years.dart';
import 'package:photos/db/files_db.dart';
import 'package:photos/events/local_photos_updated_event.dart';
import "package:photos/extensions/string_ext.dart";
import "package:photos/models/api/collection/user.dart";
import 'package:photos/models/collection/collection.dart';
import 'package:photos/models/collection/collection_items.dart';
import "package:photos/models/file/extensions/file_props.dart";
import 'package:photos/models/file/file.dart';
import 'package:photos/models/file/file_type.dart';
import "package:photos/models/local_entity_data.dart";
@ -673,6 +675,38 @@ class SearchService {
return searchResults;
}
Future<List<GenericSearchResult>> getPeopleSearchResults(int? limit) async {
final searchResults = <GenericSearchResult>[];
final allFiles = await getAllFiles();
final peopleToSharedFiles = <User, List<EnteFile>>{};
int peopleCount = 0;
for (EnteFile file in allFiles) {
if (file.isOwner) continue;
final fileOwner = CollectionsService.instance
.getFileOwner(file.ownerID!, file.collectionID);
if (peopleToSharedFiles.containsKey(fileOwner)) {
peopleToSharedFiles[fileOwner]!.add(file);
} else {
if (limit != null && limit <= peopleCount) continue;
peopleToSharedFiles[fileOwner] = [file];
peopleCount++;
}
}
peopleToSharedFiles.forEach((key, value) {
searchResults.add(
GenericSearchResult(
ResultType.shared,
key.name != null && key.name!.isNotEmpty ? key.name! : key.email,
value,
),
);
});
return searchResults;
}
List<MonthData> _getMatchingMonths(BuildContext context, String query) {
return getMonthData(context)
.where(

View file

@ -128,6 +128,8 @@ class SearchResultWidget extends StatelessWidget {
return "File extension";
case ResultType.fileCaption:
return "Description";
case ResultType.shared:
return "Shared";
default:
return type.name.toUpperCase();
}