diff --git a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart index 06cce08cfa..025cbc8bf1 100644 --- a/mobile/lib/services/machine_learning/face_ml/person/person_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/person/person_service.dart @@ -4,7 +4,6 @@ import "dart:developer"; import "package:flutter/foundation.dart"; import "package:logging/logging.dart"; import "package:photos/core/event_bus.dart"; -import "package:photos/db/files_db.dart"; import "package:photos/db/ml/db.dart"; import "package:photos/events/people_changed_event.dart"; import "package:photos/extensions/stop_watch.dart"; @@ -14,8 +13,6 @@ import 'package:photos/models/ml/face/face.dart'; import "package:photos/models/ml/face/person.dart"; import "package:photos/service_locator.dart"; import "package:photos/services/entity_service.dart"; -import "package:photos/services/machine_learning/ml_result.dart"; -import "package:photos/services/search_service.dart"; import "package:photos/utils/face/face_box_crop.dart"; import "package:shared_preferences/shared_preferences.dart"; @@ -499,50 +496,4 @@ class PersonService { rethrow; } } - - // TODO: lau-face: rework this method using new scores logic - Future getThumbnailFileOfPerson( - PersonEntity person, - ) async { - try { - if (person.data.hasAvatar()) { - final avatarFileID = tryGetFileIdFromFaceId(person.data.avatarFaceID!); - if (avatarFileID != null) { - final file = (await FilesDB.instance - .getFileIDToFileFromIDs([avatarFileID]))[avatarFileID]; - if (file != null) { - return file; - } else { - logger.severe("Avatar File not found for face ${person.data}"); - } - } - } - - final clustersToFiles = - await SearchService.instance.getClusterFilesForPersonID( - person.remoteID, - ); - - EnteFile? resultFile; - // iterate over all clusters and get the first file - for (final clusterFiles in clustersToFiles.values) { - for (final file in clusterFiles) { - resultFile ??= file; - if (resultFile.creationTime! < file.creationTime!) { - resultFile = file; - } - } - } - if (resultFile == null) { - logger.warning( - "Person ${kDebugMode ? person.data.name : person.remoteID} has no files", - ); - return null; - } - return resultFile; - } catch (e, s) { - logger.severe("Error in getThumbnailFileOfPerson", e, s); - return null; - } - } } diff --git a/mobile/lib/ui/viewer/people/person_selection_action_widgets.dart b/mobile/lib/ui/viewer/people/person_selection_action_widgets.dart index 3f89bbc558..26899e037b 100644 --- a/mobile/lib/ui/viewer/people/person_selection_action_widgets.dart +++ b/mobile/lib/ui/viewer/people/person_selection_action_widgets.dart @@ -7,7 +7,6 @@ import "package:photos/core/event_bus.dart"; import "package:photos/events/people_changed_event.dart"; import "package:photos/generated/l10n.dart"; import "package:photos/l10n/l10n.dart"; -import "package:photos/models/file/file.dart"; import "package:photos/models/ml/face/person.dart"; import "package:photos/models/typedefs.dart"; import "package:photos/services/machine_learning/face_ml/person/person_service.dart"; @@ -17,21 +16,10 @@ import "package:photos/ui/components/buttons/button_widget.dart"; import "package:photos/ui/components/dialog_widget.dart"; import "package:photos/ui/components/models/button_type.dart"; import "package:photos/ui/notification/toast.dart"; -import "package:photos/ui/viewer/file/no_thumbnail_widget.dart"; import "package:photos/ui/viewer/people/person_face_widget.dart"; import "package:photos/utils/dialog_util.dart"; import "package:photos/utils/person_contact_linking_util.dart"; -class PersonEntityWithThumbnailFile { - final PersonEntity person; - final EnteFile? thumbnailFile; - - const PersonEntityWithThumbnailFile( - this.person, - this.thumbnailFile, - ); -} - class LinkContactToPersonSelectionPage extends StatefulWidget { final String? emailToLink; const LinkContactToPersonSelectionPage({ @@ -46,25 +34,21 @@ class LinkContactToPersonSelectionPage extends StatefulWidget { class _LinkContactToPersonSelectionPageState extends State { - late Future> - _personEntitiesWithThumnailFile; + late Future> _personEntities; final _logger = Logger('LinkContactToPersonSelectionPage'); @override void initState() { super.initState(); - _personEntitiesWithThumnailFile = - PersonService.instance.getPersons().then((persons) async { - final List result = []; + _personEntities = PersonService.instance.getPersons().then((persons) async { + final List result = []; for (final person in persons) { if ((person.data.email != null && person.data.email!.isNotEmpty) || (person.data.isHidden || person.data.isIgnored)) { continue; } - final file = - await PersonService.instance.getThumbnailFileOfPerson(person); - result.add(PersonEntityWithThumbnailFile(person, file)); + result.add(person); } return result; }); @@ -85,14 +69,14 @@ class _LinkContactToPersonSelectionPageState ), centerTitle: false, ), - body: FutureBuilder>( - future: _personEntitiesWithThumnailFile, + body: FutureBuilder>( + future: _personEntities, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: EnteLoadingWidget()); } else if (snapshot.hasError) { _logger.severe( - "Failed to load _personEntitiesWithThumnailFile", + "Failed to load _personEntities", snapshot.error, snapshot.stackTrace, ); @@ -131,7 +115,7 @@ class _LinkContactToPersonSelectionPageState final updatedPerson = await linkPersonToContact( context, emailToLink: widget.emailToLink!, - personEntity: results[index].person, + personEntity: results[index], ); if (updatedPerson != null) { @@ -143,7 +127,7 @@ class _LinkContactToPersonSelectionPageState } }, itemSize: itemSize, - personEntitiesWithThumbnailFile: results[index], + personEntity: results[index], ); }, ); @@ -221,25 +205,21 @@ class ReassignMeSelectionPage extends StatefulWidget { } class _ReassignMeSelectionPageState extends State { - late Future> - _personEntitiesWithThumnailFile; + late Future> _personEntities; final _logger = Logger('ReassignMeSelectionPage'); @override void initState() { super.initState(); - _personEntitiesWithThumnailFile = - PersonService.instance.getPersons().then((persons) async { - final List result = []; + _personEntities = PersonService.instance.getPersons().then((persons) async { + final List result = []; for (final person in persons) { if ((person.data.email != null && person.data.email!.isNotEmpty) || (person.data.isHidden || person.data.isIgnored)) { continue; } - final file = - await PersonService.instance.getThumbnailFileOfPerson(person); - result.add(PersonEntityWithThumbnailFile(person, file)); + result.add(person); } return result; }); @@ -260,8 +240,8 @@ class _ReassignMeSelectionPageState extends State { ), centerTitle: false, ), - body: FutureBuilder>( - future: _personEntitiesWithThumnailFile, + body: FutureBuilder>( + future: _personEntities, builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: EnteLoadingWidget()); @@ -310,12 +290,11 @@ class _ReassignMeSelectionPageState extends State { try { await reassignMe( currentPersonID: widget.currentMeId, - newPersonID: results[index].person.remoteID, + newPersonID: results[index].remoteID, ); showToast( context, - context.l10n - .reassignedToName(results[index].person.data.name), + context.l10n.reassignedToName(results[index].data.name), ); await Future.delayed(const Duration(milliseconds: 1250)); unawaited(dialog.hide()); @@ -328,7 +307,7 @@ class _ReassignMeSelectionPageState extends State { } }, itemSize: itemSize, - personEntitiesWithThumbnailFile: results[index], + personEntity: results[index], ); }, ); @@ -374,12 +353,12 @@ class _ReassignMeSelectionPageState extends State { class _RoundedPersonFaceWidget extends StatelessWidget { final FutureVoidCallback onTap; final double itemSize; - final PersonEntityWithThumbnailFile personEntitiesWithThumbnailFile; + final PersonEntity personEntity; const _RoundedPersonFaceWidget({ required this.onTap, required this.itemSize, - required this.personEntitiesWithThumbnailFile, + required this.personEntity, }); double get borderRadius => 82 * (itemSize / 102); @@ -425,13 +404,10 @@ class _RoundedPersonFaceWidget extends StatelessWidget { ), ), ), - child: personEntitiesWithThumbnailFile.thumbnailFile == null - ? const NoThumbnailWidget(addBorder: false) - : PersonFaceWidget( - personId: - personEntitiesWithThumbnailFile.person.remoteID, - useFullFile: true, - ), + child: PersonFaceWidget( + personId: personEntity.remoteID, + useFullFile: true, + ), ), ), ), @@ -440,7 +416,7 @@ class _RoundedPersonFaceWidget extends StatelessWidget { Padding( padding: const EdgeInsets.only(top: 6, bottom: 0), child: Text( - personEntitiesWithThumbnailFile.person.data.name, + personEntity.data.name, maxLines: 1, textAlign: TextAlign.center, overflow: TextOverflow.ellipsis,