From 302890baefa08a204fd18624f4dcc14bbdf0e334 Mon Sep 17 00:00:00 2001 From: laurenspriem Date: Fri, 24 May 2024 17:48:03 +0530 Subject: [PATCH] [mob][photos] Fix for PlatformException in video thumbnails --- .../face_ml/face_ml_exceptions.dart | 12 +++++++++++ .../face_ml/face_ml_service.dart | 20 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/mobile/lib/services/machine_learning/face_ml/face_ml_exceptions.dart b/mobile/lib/services/machine_learning/face_ml/face_ml_exceptions.dart index 78a4bcb1f8..2c43e6e56a 100644 --- a/mobile/lib/services/machine_learning/face_ml/face_ml_exceptions.dart +++ b/mobile/lib/services/machine_learning/face_ml/face_ml_exceptions.dart @@ -8,6 +8,18 @@ class GeneralFaceMlException implements Exception { String toString() => 'GeneralFaceMlException: $message'; } +class ThumbnailRetrievalException implements Exception { + final String message; + final StackTrace stackTrace; + + ThumbnailRetrievalException(this.message, this.stackTrace); + + @override + String toString() { + return 'ThumbnailRetrievalException: $message\n$stackTrace'; + } +} + class CouldNotRetrieveAnyFileData implements Exception {} class CouldNotInitializeFaceDetector implements Exception {} diff --git a/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart b/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart index 5f3d15bdc4..bbe719dbe1 100644 --- a/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart +++ b/mobile/lib/services/machine_learning/face_ml/face_ml_service.dart @@ -9,6 +9,7 @@ import "dart:ui" show Image; import "package:computer/computer.dart"; import "package:dart_ui_isolate/dart_ui_isolate.dart"; import "package:flutter/foundation.dart" show debugPrint, kDebugMode; +import "package:flutter/services.dart"; import "package:logging/logging.dart"; import "package:onnxruntime/onnxruntime.dart"; import "package:package_info_plus/package_info_plus.dart"; @@ -446,7 +447,8 @@ class FaceMlService { if (LocalSettings.instance.remoteFetchEnabled) { try { - final Set fileIds = {}; // if there are duplicates here server returns 400 + final Set fileIds = + {}; // if there are duplicates here server returns 400 // Try to find embeddings on the remote server for (final f in chunk) { fileIds.add(f.uploadedFileID!); @@ -844,13 +846,22 @@ class FaceMlService { } await FaceMLDataDB.instance.bulkInsertFaces(faces); return true; + } on ThumbnailRetrievalException catch (e, s) { + _logger.severe( + 'ThumbnailRetrievalException while processing image with ID ${enteFile.uploadedFileID}, storing empty face so indexing does not get stuck', + e, + s, + ); + await FaceMLDataDB.instance + .bulkInsertFaces([Face.empty(enteFile.uploadedFileID!, error: true)]); + return true; } catch (e, s) { _logger.severe( "Failed to analyze using FaceML for image with ID: ${enteFile.uploadedFileID}", e, s, ); - return true; + return false; } } @@ -1004,7 +1015,12 @@ class FaceMlService { final stopwatch = Stopwatch()..start(); File? file; if (enteFile.fileType == FileType.video) { + try { file = await getThumbnailForUploadedFile(enteFile); + } on PlatformException catch (e, s) { + _logger.severe("Could not get thumbnail for $enteFile due to PlatformException", e, s); + throw ThumbnailRetrievalException(e.toString(), s); + } } else { file = await getFile(enteFile, isOrigin: true); // TODO: This is returning null for Pragadees for all files, so something is wrong here!