diff --git a/mobile/lib/ui/viewer/search/result/person_face_widget.dart b/mobile/lib/ui/viewer/search/result/person_face_widget.dart index 465ea4823..f16cebcdc 100644 --- a/mobile/lib/ui/viewer/search/result/person_face_widget.dart +++ b/mobile/lib/ui/viewer/search/result/person_face_widget.dart @@ -35,61 +35,6 @@ class PersonFaceWidget extends StatelessWidget { ), super(key: key); - static Future precomputeNextFaceCrops(file, clusterID) async { - try { - final Face? face = await FaceMLDataDB.instance.getCoverFaceForPerson( - recentFileID: file.uploadedFileID!, - clusterID: clusterID, - ); - if (face == null) { - debugPrint( - "No cover face for cluster $clusterID and recentFile ${file.uploadedFileID}", - ); - return; - } - final Uint8List? cachedFace = faceCropCache.get(face.faceID); - if (cachedFace != null) { - return; - } - final faceCropCacheFile = cachedFaceCropPath(face.faceID); - if ((await faceCropCacheFile.exists())) { - final data = await faceCropCacheFile.readAsBytes(); - faceCropCache.put(face.faceID, data); - return; - } - EnteFile? fileForFaceCrop = file; - if (face.fileID != file.uploadedFileID!) { - fileForFaceCrop = - await FilesDB.instance.getAnyUploadedFile(face.fileID); - } - if (fileForFaceCrop == null) { - return; - } - - final result = await pool.withResource( - () async => await getFaceCrops( - fileForFaceCrop!, - { - face.faceID: face.detection.box, - }, - ), - ); - final Uint8List? computedCrop = result?[face.faceID]; - if (computedCrop != null) { - faceCropCache.put(face.faceID, computedCrop); - faceCropCacheFile.writeAsBytes(computedCrop).ignore(); - } - return; - } catch (e, s) { - log( - "Error getting cover face for cluster $clusterID", - error: e, - stackTrace: s, - ); - return; - } - } - @override Widget build(BuildContext context) { if (useGeneratedFaceCrops) { @@ -222,4 +167,59 @@ class PersonFaceWidget extends StatelessWidget { return null; } } + + static Future precomputeNextFaceCrops(file, clusterID) async { + try { + final Face? face = await FaceMLDataDB.instance.getCoverFaceForPerson( + recentFileID: file.uploadedFileID!, + clusterID: clusterID, + ); + if (face == null) { + debugPrint( + "No cover face for cluster $clusterID and recentFile ${file.uploadedFileID}", + ); + return; + } + final Uint8List? cachedFace = faceCropCache.get(face.faceID); + if (cachedFace != null) { + return; + } + final faceCropCacheFile = cachedFaceCropPath(face.faceID); + if ((await faceCropCacheFile.exists())) { + final data = await faceCropCacheFile.readAsBytes(); + faceCropCache.put(face.faceID, data); + return; + } + EnteFile? fileForFaceCrop = file; + if (face.fileID != file.uploadedFileID!) { + fileForFaceCrop = + await FilesDB.instance.getAnyUploadedFile(face.fileID); + } + if (fileForFaceCrop == null) { + return; + } + + final result = await pool.withResource( + () async => await getFaceCrops( + fileForFaceCrop!, + { + face.faceID: face.detection.box, + }, + ), + ); + final Uint8List? computedCrop = result?[face.faceID]; + if (computedCrop != null) { + faceCropCache.put(face.faceID, computedCrop); + faceCropCacheFile.writeAsBytes(computedCrop).ignore(); + } + return; + } catch (e, s) { + log( + "Error getting cover face for cluster $clusterID", + error: e, + stackTrace: s, + ); + return; + } + } }