diff --git a/lib/models/photo.dart b/lib/models/photo.dart index 2c4f3e74c..e123c0cae 100644 --- a/lib/models/photo.dart +++ b/lib/models/photo.dart @@ -3,6 +3,7 @@ import 'dart:typed_data'; import 'package:flutter_image_compress/flutter_image_compress.dart'; import 'package:photo_manager/photo_manager.dart'; import 'package:path/path.dart'; +import 'package:logging/logging.dart'; class Photo { int generatedId; @@ -29,9 +30,19 @@ class Photo { photo.localId = asset.id; photo.title = asset.title; photo.pathName = pathEntity.name; - photo.createTimestamp = asset.createDateTime.microsecondsSinceEpoch == 0 - ? asset.modifiedDateTime.microsecondsSinceEpoch - : asset.createDateTime.microsecondsSinceEpoch; + photo.createTimestamp = asset.createDateTime.microsecondsSinceEpoch; + if (photo.createTimestamp == 0) { + try { + final parsedDateTime = DateTime.parse( + basenameWithoutExtension(photo.title) + .replaceAll("IMG_", "") + .replaceAll("DCIM_", "") + .replaceAll("_", " ")); + photo.createTimestamp = parsedDateTime.microsecondsSinceEpoch; + } catch (e) { + photo.createTimestamp = asset.modifiedDateTime.microsecondsSinceEpoch; + } + } return photo; } diff --git a/lib/photo_sync_manager.dart b/lib/photo_sync_manager.dart index f3a0bb1f3..6feaa078b 100644 --- a/lib/photo_sync_manager.dart +++ b/lib/photo_sync_manager.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:io'; +import 'dart:math'; import 'package:logging/logging.dart'; import 'package:photos/core/event_bus.dart'; @@ -57,7 +58,8 @@ class PhotoSyncManager { // "Recents" contain duplicate information on Android var assetList = await pathEntity.assetList; for (AssetEntity entity in assetList) { - if (entity.modifiedDateTime.microsecondsSinceEpoch > + if (max(entity.createDateTime.microsecondsSinceEpoch, + entity.modifiedDateTime.microsecondsSinceEpoch) > lastDBUpdateTimestamp) { try { photos.add(await Photo.fromAsset(pathEntity, entity));