feat(server): apply storage migration after exif completes (#2093)

* feat(server): apply storage migraiton after exif completes

* feat: same for videos

* fix: migration for live photos
This commit is contained in:
Jason Rasmussen
2023-03-28 16:04:11 -04:00
committed by GitHub
parent 3497a0de54
commit b0d5c7035b
10 changed files with 54 additions and 78 deletions

View File

@@ -10,7 +10,7 @@ import {
QueueName,
WithoutProperty,
} from '@app/domain';
import { AssetEntity, AssetType, ExifEntity } from '@app/infra/db/entities';
import { AssetType, ExifEntity } from '@app/infra/db/entities';
import { Process, Processor } from '@nestjs/bull';
import { Inject, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
@@ -173,7 +173,8 @@ export class MetadataExtractionProcessor {
@Process(JobName.EXIF_EXTRACTION)
async extractExifInfo(job: Job<IAssetUploadedJob>) {
try {
const { asset, fileName }: { asset: AssetEntity; fileName: string } = job.data;
let asset = job.data.asset;
const fileName = job.data.fileName;
const exifData = await exiftool.read<ImmichTags>(asset.originalPath).catch((e) => {
this.logger.warn(`The exifData parsing failed due to: ${e} on file ${asset.originalPath}`);
return null;
@@ -256,7 +257,8 @@ export class MetadataExtractionProcessor {
}
await this.exifRepository.upsert(newExif, { conflictPaths: ['assetId'] });
await this.assetCore.save({ id: asset.id, fileCreatedAt: fileCreatedAt?.toISOString() });
asset = await this.assetCore.save({ id: asset.id, fileCreatedAt: fileCreatedAt?.toISOString() });
await this.jobRepository.queue({ name: JobName.STORAGE_TEMPLATE_MIGRATION_SINGLE, data: { asset } });
} catch (error: any) {
this.logger.error(`Error extracting EXIF ${error}`, error?.stack);
}
@@ -273,7 +275,8 @@ export class MetadataExtractionProcessor {
@Process({ name: JobName.EXTRACT_VIDEO_METADATA, concurrency: 2 })
async extractVideoMetadata(job: Job<IAssetUploadedJob>) {
const { asset, fileName } = job.data;
let asset = job.data.asset;
const fileName = job.data.fileName;
if (!asset.isVisible) {
return;
@@ -318,6 +321,7 @@ export class MetadataExtractionProcessor {
if (photoAsset) {
await this.assetCore.save({ id: photoAsset.id, livePhotoVideoId: asset.id });
await this.assetCore.save({ id: asset.id, isVisible: false });
newExif.imageName = (photoAsset.exifInfo as ExifEntity).imageName;
}
}
@@ -373,7 +377,8 @@ export class MetadataExtractionProcessor {
}
await this.exifRepository.upsert(newExif, { conflictPaths: ['assetId'] });
await this.assetCore.save({ id: asset.id, duration: durationString, fileCreatedAt });
asset = await this.assetCore.save({ id: asset.id, duration: durationString, fileCreatedAt });
await this.jobRepository.queue({ name: JobName.STORAGE_TEMPLATE_MIGRATION_SINGLE, data: { asset } });
} catch (err) {
``;
// do nothing