Merge pull request #692 from ente-io/fix_time_upload

Android: Parse timestamp from fileName during upload
This commit is contained in:
Vishnu Mohandas 2022-12-08 10:23:17 +05:30 committed by GitHub
commit 6b4d90d750
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 1 deletions

View file

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:logging/logging.dart';
import 'package:path/path.dart';
import 'package:photo_manager/photo_manager.dart';
@ -177,13 +179,23 @@ class File extends EnteFile {
duration = asset.duration;
}
}
bool hasExifTime = false;
if (fileType == FileType.image && mediaUploadData.sourceFile != null) {
final exifTime =
await getCreationTimeFromEXIF(mediaUploadData.sourceFile!);
if (exifTime != null) {
hasExifTime = true;
creationTime = exifTime.microsecondsSinceEpoch;
}
}
// try to get the timestamp from fileName. In case of iOS, file names are
// generic IMG_XXXX, so only parse it on Android devices
if (!hasExifTime && Platform.isAndroid && title != null) {
final timeFromFileName = parseDateTimeFromFileNameV2(title!);
if (timeFromFileName != null) {
creationTime = timeFromFileName.microsecondsSinceEpoch;
}
}
hash = mediaUploadData.hashData?.fileHash;
return metadata;
}

View file

@ -32,7 +32,11 @@ void main() {
});
test("test invalid datetime parsing", () {
final List<String> badParsing = ["Snapchat-431959199.mp4."];
final List<String> badParsing = [
"Snapchat-431959199.mp4.",
"Snapchat-400000000.mp4",
"Snapchat-900000000.mp4"
];
for (String val in badParsing) {
final parsedValue = parseDateTimeFromFileNameV2(val);
expect(