From 0f72c1b4a228dda6f63c3734a1bc2949ffbc6c91 Mon Sep 17 00:00:00 2001 From: Neeraj Gupta <254676+ua741@users.noreply.github.com> Date: Thu, 8 Dec 2022 09:58:33 +0530 Subject: [PATCH] Android: Parse timestamp from fileName during upload --- lib/models/file.dart | 12 ++++++++++++ test/utils/date_time_util_test.dart | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/models/file.dart b/lib/models/file.dart index f106444fd..bb871b1bc 100644 --- a/lib/models/file.dart +++ b/lib/models/file.dart @@ -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; } diff --git a/test/utils/date_time_util_test.dart b/test/utils/date_time_util_test.dart index 0924721fb..85cdd1d6b 100644 --- a/test/utils/date_time_util_test.dart +++ b/test/utils/date_time_util_test.dart @@ -32,7 +32,11 @@ void main() { }); test("test invalid datetime parsing", () { - final List badParsing = ["Snapchat-431959199.mp4."]; + final List badParsing = [ + "Snapchat-431959199.mp4.", + "Snapchat-400000000.mp4", + "Snapchat-900000000.mp4" + ]; for (String val in badParsing) { final parsedValue = parseDateTimeFromFileNameV2(val); expect(