fix: get effective selected people code
This commit is contained in:
@@ -227,21 +227,21 @@ extension SectionTypeExtensions on SectionType {
|
||||
}
|
||||
|
||||
Future<List<SearchResult>> getData(
|
||||
BuildContext context, {
|
||||
BuildContext? context, {
|
||||
int? limit,
|
||||
}) {
|
||||
switch (this) {
|
||||
case SectionType.face:
|
||||
return SearchService.instance.getAllFace(limit);
|
||||
case SectionType.magic:
|
||||
return SearchService.instance.getMagicSectionResults(context);
|
||||
return SearchService.instance.getMagicSectionResults(context!);
|
||||
|
||||
case SectionType.moment:
|
||||
if (flagService.internalUser) {
|
||||
// TODO: lau: remove this whole smart memories and moment altogether
|
||||
return SearchService.instance.smartMemories(context, limit);
|
||||
return SearchService.instance.smartMemories(context!, limit);
|
||||
}
|
||||
return SearchService.instance.getRandomMomentsSearchResults(context);
|
||||
return SearchService.instance.getRandomMomentsSearchResults(context!);
|
||||
|
||||
case SectionType.location:
|
||||
return SearchService.instance.getAllLocationTags(limit);
|
||||
@@ -254,7 +254,7 @@ extension SectionTypeExtensions on SectionType {
|
||||
|
||||
case SectionType.fileTypesAndExtension:
|
||||
return SearchService.instance
|
||||
.getAllFileTypesAndExtensionsResults(context, limit);
|
||||
.getAllFileTypesAndExtensionsResults(context!, limit);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,9 @@ import 'package:fluttertoast/fluttertoast.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/models/file/file.dart';
|
||||
import "package:photos/models/search/generic_search_result.dart";
|
||||
import "package:photos/models/search/hierarchical/face_filter.dart";
|
||||
import "package:photos/models/search/search_types.dart";
|
||||
import 'package:photos/service_locator.dart';
|
||||
import 'package:photos/services/home_widget_service.dart';
|
||||
import 'package:photos/services/machine_learning/face_ml/person/person_service.dart';
|
||||
@@ -189,9 +192,9 @@ class PeopleHomeWidgetService {
|
||||
}
|
||||
|
||||
// Check if selected people exist
|
||||
final peopleIds = getSelectedPeople();
|
||||
final peopleIds = await _getEffectiveSelectedPeopleIds();
|
||||
try {
|
||||
for (final id in peopleIds ?? []) {
|
||||
for (final id in peopleIds) {
|
||||
final person = await PersonService.instance.getPerson(id);
|
||||
if (person == null) {
|
||||
_logger.warning("Person not found for id: $id");
|
||||
@@ -228,11 +231,37 @@ class PeopleHomeWidgetService {
|
||||
return peopleChanged ?? true;
|
||||
}
|
||||
|
||||
Future<List<String>> _getEffectiveSelectedPeopleIds() async {
|
||||
var peopleIds = getSelectedPeople();
|
||||
|
||||
if (peopleIds == null || peopleIds.isEmpty) {
|
||||
// Search Filter with face and pick top two faces
|
||||
final searchFilter = await SectionType.face.getData(null).then(
|
||||
(value) => List<GenericSearchResult>.from(value).where(
|
||||
(element) =>
|
||||
(element.hierarchicalSearchFilter as FaceFilter).personId !=
|
||||
null,
|
||||
),
|
||||
);
|
||||
|
||||
if (searchFilter.isNotEmpty) {
|
||||
peopleIds = searchFilter
|
||||
.take(2)
|
||||
.map((e) => (e.hierarchicalSearchFilter as FaceFilter).personId!)
|
||||
.toList();
|
||||
} else {
|
||||
_logger.warning("No selected people found");
|
||||
}
|
||||
}
|
||||
|
||||
return peopleIds ?? [];
|
||||
}
|
||||
|
||||
Future<Map<String, (String, Iterable<EnteFile>)>> _getPeople() async {
|
||||
final peopleIds = getSelectedPeople();
|
||||
final peopleIds = await _getEffectiveSelectedPeopleIds();
|
||||
final Map<String, (String, Iterable<EnteFile>)> peopleFiles = {};
|
||||
|
||||
for (final id in peopleIds ?? []) {
|
||||
for (final id in peopleIds) {
|
||||
final person = await PersonService.instance.getPerson(id);
|
||||
if (person == null) {
|
||||
_logger.warning("Person not found for id: $id");
|
||||
|
||||
@@ -50,24 +50,41 @@ class _PeopleSectionAllWidgetState extends State<PeopleSectionAllWidget> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
sectionData = SectionType.face.getData(context).then(
|
||||
(value) => List.from(value),
|
||||
);
|
||||
sectionData = getResults();
|
||||
|
||||
final streamsToListenTo = SectionType.face.viewAllUpdateEvents();
|
||||
for (Stream<Event> stream in streamsToListenTo) {
|
||||
streamSubscriptions.add(
|
||||
stream.listen((event) async {
|
||||
setState(() {
|
||||
sectionData = SectionType.face.getData(context).then(
|
||||
(value) => List.from(value),
|
||||
);
|
||||
sectionData = getResults();
|
||||
});
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Future<List<GenericSearchResult>> getResults() async {
|
||||
final results =
|
||||
List<GenericSearchResult>.from(await SectionType.face.getData(context));
|
||||
|
||||
if (widget.namedOnly) {
|
||||
results.removeWhere(
|
||||
(element) =>
|
||||
(element.hierarchicalSearchFilter as FaceFilter).personId == null,
|
||||
);
|
||||
if (widget.selectedPeople?.personIds.isEmpty ?? false) {
|
||||
widget.selectedPeople!.select(
|
||||
results
|
||||
.take(2)
|
||||
.map((e) => (e.hierarchicalSearchFilter as FaceFilter).personId!)
|
||||
.toSet(),
|
||||
);
|
||||
}
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
for (var subscriptions in streamSubscriptions) {
|
||||
@@ -95,14 +112,6 @@ class _PeopleSectionAllWidgetState extends State<PeopleSectionAllWidget> {
|
||||
return Center(child: Text(S.of(context).noResultsFound + '.'));
|
||||
} else {
|
||||
final results = snapshot.data!;
|
||||
if (widget.namedOnly) {
|
||||
results.removeWhere(
|
||||
(element) =>
|
||||
(element.hierarchicalSearchFilter as FaceFilter).personId ==
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
final screenWidth = MediaQuery.of(context).size.width;
|
||||
final crossAxisCount = (screenWidth / 100).floor();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user