mirror of
https://gitlab.com/nkming2/nc-photos.git
synced 2025-02-24 02:18:50 +01:00
Fix invalid DateTimeOriginal in exif breaking DB logic
This commit is contained in:
parent
e0236e8644
commit
c2cc6b5842
3 changed files with 37 additions and 18 deletions
|
@ -1,6 +1,7 @@
|
|||
import 'package:equatable/equatable.dart';
|
||||
import 'package:exifdart/exifdart.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/type.dart';
|
||||
|
||||
class Exif with EquatableMixin {
|
||||
|
@ -96,10 +97,20 @@ class Exif with EquatableMixin {
|
|||
String? get model => data["Model"];
|
||||
|
||||
/// 0x9003 DateTimeOriginal
|
||||
DateTime? get dateTimeOriginal => data.containsKey("DateTimeOriginal") &&
|
||||
(data["DateTimeOriginal"] as String).isNotEmpty
|
||||
? dateTimeFormat.parse(data["DateTimeOriginal"]).toUtc()
|
||||
: null;
|
||||
DateTime? get dateTimeOriginal {
|
||||
try {
|
||||
return data.containsKey("DateTimeOriginal") &&
|
||||
(data["DateTimeOriginal"] as String).isNotEmpty
|
||||
? dateTimeFormat.parse(data["DateTimeOriginal"]).toUtc()
|
||||
: null;
|
||||
} catch (e, stackTrace) {
|
||||
_log.severe(
|
||||
"[dateTimeOriginal] Non standard valie: ${data["DateTimeOriginal"]}",
|
||||
e,
|
||||
stackTrace);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// 0x829a ExposureTime
|
||||
Rational? get exposureTime => data["ExposureTime"];
|
||||
|
@ -127,4 +138,6 @@ class Exif with EquatableMixin {
|
|||
final Map<String, dynamic> data;
|
||||
|
||||
static final dateTimeFormat = DateFormat("yyyy:MM:dd HH:mm:ss");
|
||||
|
||||
static final _log = Logger("entity.exif.Exif");
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@ import 'package:equatable/equatable.dart';
|
|||
import 'package:logging/logging.dart';
|
||||
import 'package:nc_photos/account.dart';
|
||||
import 'package:nc_photos/ci_string.dart';
|
||||
import 'package:nc_photos/debug_util.dart';
|
||||
import 'package:nc_photos/entity/exif.dart';
|
||||
import 'package:nc_photos/json_util.dart' as json_util;
|
||||
import 'package:nc_photos/or_null.dart';
|
||||
|
@ -460,19 +459,11 @@ class File with EquatableMixin {
|
|||
}
|
||||
|
||||
extension FileExtension on File {
|
||||
DateTime get bestDateTime {
|
||||
try {
|
||||
return overrideDateTime ??
|
||||
metadata?.exif?.dateTimeOriginal ??
|
||||
lastModified ??
|
||||
DateTime.now().toUtc();
|
||||
} catch (e) {
|
||||
_log.severe(
|
||||
"[bestDateTime] Non standard EXIF DateTimeOriginal '${metadata?.exif?.data["DateTimeOriginal"]}' for file: ${logFilename(path)}",
|
||||
e);
|
||||
return lastModified ?? DateTime.now().toUtc();
|
||||
}
|
||||
}
|
||||
DateTime get bestDateTime =>
|
||||
overrideDateTime ??
|
||||
metadata?.exif?.dateTimeOriginal ??
|
||||
lastModified ??
|
||||
DateTime.now().toUtc();
|
||||
|
||||
bool isOwned(CiString username) => ownerId == null || ownerId == username;
|
||||
|
||||
|
|
|
@ -197,6 +197,21 @@ void main() {
|
|||
[_Rational(2, 1), _Rational(3, 1), _Rational(4, 100)]);
|
||||
});
|
||||
});
|
||||
|
||||
group("dateTimeOriginal", () {
|
||||
test("problematic value", () {
|
||||
final exif = Exif({
|
||||
"DateTimeOriginal": " ",
|
||||
});
|
||||
expect(exif.dateTimeOriginal, null);
|
||||
});
|
||||
test("empty value", () {
|
||||
final exif = Exif({
|
||||
"DateTimeOriginal": "",
|
||||
});
|
||||
expect(exif.dateTimeOriginal, null);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue