From 7c2fed344c41c873042e09f97c857d973a98c0ba Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Sat, 4 Sep 2021 23:13:52 +0800 Subject: [PATCH] Handle erroneous datetimeoriginal tag --- lib/entity/exif.dart | 3 ++- lib/entity/file.dart | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/entity/exif.dart b/lib/entity/exif.dart index 2cb64863..8f9f79e4 100644 --- a/lib/entity/exif.dart +++ b/lib/entity/exif.dart @@ -94,7 +94,8 @@ class Exif with EquatableMixin { String? get model => data["Model"]; /// 0x9003 DateTimeOriginal - DateTime? get dateTimeOriginal => data.containsKey("DateTimeOriginal") + DateTime? get dateTimeOriginal => data.containsKey("DateTimeOriginal") && + (data["DateTimeOriginal"] as String).isNotEmpty ? dateTimeFormat.parse(data["DateTimeOriginal"]).toUtc() : null; diff --git a/lib/entity/file.dart b/lib/entity/file.dart index df558e56..f8b96891 100644 --- a/lib/entity/file.dart +++ b/lib/entity/file.dart @@ -3,6 +3,7 @@ import 'dart:typed_data'; import 'package:equatable/equatable.dart'; import 'package:logging/logging.dart'; import 'package:nc_photos/account.dart'; +import 'package:nc_photos/debug_util.dart'; import 'package:nc_photos/entity/exif.dart'; import 'package:nc_photos/or_null.dart'; import 'package:nc_photos/string_extension.dart'; @@ -446,13 +447,23 @@ class File with EquatableMixin { extension FileExtension on File { DateTime get bestDateTime { - return overrideDateTime ?? - metadata?.exif?.dateTimeOriginal ?? - lastModified ?? - DateTime.now().toUtc(); + try { + return overrideDateTime ?? + metadata?.exif?.dateTimeOriginal ?? + lastModified ?? + DateTime.now().toUtc(); + } catch (e) { + _log.severe( + "[bestDateTime] Non standard EXIF DateTimeOriginal '${metadata?.exif?.data["DateTimeOriginal"]}'" + + (shouldLogFileName ? " for file: '$path'" : ""), + e); + return lastModified ?? DateTime.now().toUtc(); + } } bool isOwned(String username) => ownerId == null || ownerId == username; + + static final _log = Logger("entity.file.FileExtension"); } class FileRepo {