diff --git a/mobile/lib/models/file/file.dart b/mobile/lib/models/file/file.dart index 74affd9844..a11d2071a9 100644 --- a/mobile/lib/models/file/file.dart +++ b/mobile/lib/models/file/file.dart @@ -2,7 +2,6 @@ import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; -import "package:motion_photos/src/xmp_extractor.dart"; import 'package:path/path.dart'; import 'package:photo_manager/photo_manager.dart'; import 'package:photos/core/configuration.dart'; @@ -185,8 +184,7 @@ class EnteFile { if (mediaUploadData.isPanorama != true) { try { - final xmpData = XMPExtractor() - .extract(mediaUploadData.sourceFile!.readAsBytesSync()); + final xmpData = await getXmp(mediaUploadData.sourceFile!); mediaUploadData.isPanorama = checkPanoramaFromXMP(xmpData); } catch (_) {} diff --git a/mobile/lib/utils/file_uploader_util.dart b/mobile/lib/utils/file_uploader_util.dart index d06234bcf6..0500b6947f 100644 --- a/mobile/lib/utils/file_uploader_util.dart +++ b/mobile/lib/utils/file_uploader_util.dart @@ -160,8 +160,11 @@ Future _getMediaUploadDataFromAssetFile(EnteFile file) async { int? motionPhotoStartingIndex; if (Platform.isAndroid && asset.type == AssetType.image) { try { - motionPhotoStartingIndex = - (await MotionPhotos(sourceFile.path).getMotionVideoIndex())?.start; + motionPhotoStartingIndex = await Computer.shared().compute( + motionVideoIndex, + param: {'path': sourceFile.path}, + taskName: 'motionPhotoIndex', + ); } catch (e) { _logger.severe('error while detecthing motion photo start index', e); } @@ -177,6 +180,11 @@ Future _getMediaUploadDataFromAssetFile(EnteFile file) async { ); } +Future motionVideoIndex(Map args) async { + final String path = args['path']; + return (await MotionPhotos(path).getMotionVideoIndex())?.start; +} + Future _computeZip(Map args) async { final String zipPath = args['zipPath']; final String imagePath = args['imagePath']; diff --git a/mobile/lib/utils/panorama_util.dart b/mobile/lib/utils/panorama_util.dart index 909801a546..cb6ba57006 100644 --- a/mobile/lib/utils/panorama_util.dart +++ b/mobile/lib/utils/panorama_util.dart @@ -18,8 +18,7 @@ Future checkIfPanorama(EnteFile enteFile) async { } try { final result = XMPExtractor().extract(file.readAsBytesSync()); - if (result["GPano:ProjectionType"] == "cylindrical" || - result["GPano:ProjectionType"] == "equirectangular") { + if (checkPanoramaFromXMP(result)) { return true; } } catch (_) {} @@ -30,7 +29,7 @@ Future checkIfPanorama(EnteFile enteFile) async { return element?.printable == "6"; } -bool? checkPanoramaFromXMP(Map xmpData) { +bool checkPanoramaFromXMP(Map xmpData) { if (xmpData["GPano:ProjectionType"] == "cylindrical" || xmpData["GPano:ProjectionType"] == "equirectangular") { return true;