Handle erroneous datetimeoriginal tag

This commit is contained in:
Ming Ming 2021-09-04 23:13:52 +08:00
parent 942c16b850
commit 7c2fed344c
2 changed files with 17 additions and 5 deletions

View file

@ -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;

View file

@ -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 {