|
@@ -6,6 +6,7 @@ import 'dart:ui' as ui;
|
|
|
|
|
|
import 'package:archive/archive_io.dart';
|
|
import 'package:archive/archive_io.dart';
|
|
import 'package:logging/logging.dart';
|
|
import 'package:logging/logging.dart';
|
|
|
|
+import "package:motion_photos/motion_photos.dart";
|
|
import 'package:motionphoto/motionphoto.dart';
|
|
import 'package:motionphoto/motionphoto.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
@@ -33,6 +34,9 @@ class MediaUploadData {
|
|
final FileHashData? hashData;
|
|
final FileHashData? hashData;
|
|
final int? height;
|
|
final int? height;
|
|
final int? width;
|
|
final int? width;
|
|
|
|
+ // For android motion photos, the startIndex is the index of the first frame
|
|
|
|
+ // For iOS, this value will be always null.
|
|
|
|
+ final int? motionPhotoStartIndex;
|
|
|
|
|
|
MediaUploadData(
|
|
MediaUploadData(
|
|
this.sourceFile,
|
|
this.sourceFile,
|
|
@@ -41,6 +45,7 @@ class MediaUploadData {
|
|
this.hashData, {
|
|
this.hashData, {
|
|
this.height,
|
|
this.height,
|
|
this.width,
|
|
this.width,
|
|
|
|
+ this.motionPhotoStartIndex,
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@@ -154,6 +159,15 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
|
|
h = asset.height;
|
|
h = asset.height;
|
|
w = asset.width;
|
|
w = asset.width;
|
|
}
|
|
}
|
|
|
|
+ int? motionPhotoStartingIndex;
|
|
|
|
+ if (io.Platform.isAndroid && asset.type == AssetType.image) {
|
|
|
|
+ try {
|
|
|
|
+ motionPhotoStartingIndex =
|
|
|
|
+ MotionPhotos(sourceFile.path).getMotionVideoIndex()?.start;
|
|
|
|
+ } catch (e) {
|
|
|
|
+ _logger.severe('error while detecthing motion photo start index', e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
return MediaUploadData(
|
|
return MediaUploadData(
|
|
sourceFile,
|
|
sourceFile,
|
|
thumbnailData,
|
|
thumbnailData,
|
|
@@ -161,6 +175,7 @@ Future<MediaUploadData> _getMediaUploadDataFromAssetFile(ente.File file) async {
|
|
FileHashData(fileHash, zipHash: zipHash),
|
|
FileHashData(fileHash, zipHash: zipHash),
|
|
height: h,
|
|
height: h,
|
|
width: w,
|
|
width: w,
|
|
|
|
+ motionPhotoStartIndex: motionPhotoStartingIndex,
|
|
);
|
|
);
|
|
}
|
|
}
|
|
|
|
|