feat(server): use the earliest date between file creation and modification timestamps when missing exif tags (#14874)
* feat(server): Use the earliest date between file creation and modification timestamps when missing exif tags * PR fixes * PR fixes * Switch log to debug * fix linter for min date * apply prettier
This commit is contained in:
@@ -450,14 +450,14 @@ export class MetadataService extends BaseService {
|
||||
}
|
||||
} else {
|
||||
const motionAssetId = this.cryptoRepository.randomUUID();
|
||||
const createdAt = asset.fileCreatedAt ?? asset.createdAt;
|
||||
const dates = this.getDates(asset, tags);
|
||||
motionAsset = await this.assetRepository.create({
|
||||
id: motionAssetId,
|
||||
libraryId: asset.libraryId,
|
||||
type: AssetType.VIDEO,
|
||||
fileCreatedAt: createdAt,
|
||||
fileModifiedAt: asset.fileModifiedAt,
|
||||
localDateTime: createdAt,
|
||||
fileCreatedAt: dates.dateTimeOriginal,
|
||||
fileModifiedAt: dates.modifyDate,
|
||||
localDateTime: dates.localDateTime,
|
||||
checksum,
|
||||
ownerId: asset.ownerId,
|
||||
originalPath: StorageCore.getAndroidMotionPath(asset, motionAssetId),
|
||||
@@ -589,9 +589,12 @@ export class MetadataService extends BaseService {
|
||||
let dateTimeOriginal = dateTime?.toDate();
|
||||
let localDateTime = dateTime?.toDateTime().setZone('UTC', { keepLocalTime: true }).toJSDate();
|
||||
if (!localDateTime || !dateTimeOriginal) {
|
||||
this.logger.warn(`Asset ${asset.id} has no valid date, falling back to asset.fileCreatedAt`);
|
||||
dateTimeOriginal = asset.fileCreatedAt;
|
||||
localDateTime = asset.fileCreatedAt;
|
||||
this.logger.debug(
|
||||
`No valid date found in exif tags from asset ${asset.id}, falling back to earliest timestamp between file creation and file modification`,
|
||||
);
|
||||
const earliestDate = this.earliestDate(asset.fileModifiedAt, asset.fileCreatedAt);
|
||||
dateTimeOriginal = earliestDate;
|
||||
localDateTime = earliestDate;
|
||||
}
|
||||
|
||||
this.logger.verbose(`Asset ${asset.id} has a local time of ${localDateTime.toISOString()}`);
|
||||
@@ -609,6 +612,10 @@ export class MetadataService extends BaseService {
|
||||
};
|
||||
}
|
||||
|
||||
private earliestDate(a: Date, b: Date) {
|
||||
return new Date(Math.min(a.valueOf(), b.valueOf()));
|
||||
}
|
||||
|
||||
private async getGeo(tags: ImmichTags, reverseGeocoding: SystemConfig['reverseGeocoding']) {
|
||||
let latitude = validate(tags.GPSLatitude);
|
||||
let longitude = validate(tags.GPSLongitude);
|
||||
|
||||
Reference in New Issue
Block a user