mirror of
https://github.com/immich-app/immich.git
synced 2024-12-25 10:43:13 +02:00
fix(server): generate thumbnail job uses stale path (#2236)
* fix(server): generate thumbnail job' using stale path * add query for webp generation * revert query for webp because it happens after files are moved * Add log info
This commit is contained in:
parent
1564807aa0
commit
eb9481b668
@ -79,6 +79,7 @@ describe(MediaService.name, () => {
|
|||||||
|
|
||||||
describe('handleGenerateJpegThumbnail', () => {
|
describe('handleGenerateJpegThumbnail', () => {
|
||||||
it('should generate a thumbnail for an image', async () => {
|
it('should generate a thumbnail for an image', async () => {
|
||||||
|
assetMock.getByIds.mockResolvedValue([assetEntityStub.image]);
|
||||||
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.image) });
|
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.image) });
|
||||||
|
|
||||||
expect(storageMock.mkdirSync).toHaveBeenCalledWith('upload/thumbs/user-id');
|
expect(storageMock.mkdirSync).toHaveBeenCalledWith('upload/thumbs/user-id');
|
||||||
@ -94,6 +95,7 @@ describe(MediaService.name, () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should generate a thumbnail for an image from exif', async () => {
|
it('should generate a thumbnail for an image from exif', async () => {
|
||||||
|
assetMock.getByIds.mockResolvedValue([assetEntityStub.image]);
|
||||||
mediaMock.resize.mockRejectedValue(new Error('unsupported format'));
|
mediaMock.resize.mockRejectedValue(new Error('unsupported format'));
|
||||||
|
|
||||||
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.image) });
|
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.image) });
|
||||||
@ -114,6 +116,7 @@ describe(MediaService.name, () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should generate a thumbnail for a video', async () => {
|
it('should generate a thumbnail for a video', async () => {
|
||||||
|
assetMock.getByIds.mockResolvedValue([assetEntityStub.video]);
|
||||||
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.video) });
|
await sut.handleGenerateJpegThumbnail({ asset: _.cloneDeep(assetEntityStub.video) });
|
||||||
|
|
||||||
expect(storageMock.mkdirSync).toHaveBeenCalledWith('upload/thumbs/user-id');
|
expect(storageMock.mkdirSync).toHaveBeenCalledWith('upload/thumbs/user-id');
|
||||||
@ -130,7 +133,7 @@ describe(MediaService.name, () => {
|
|||||||
|
|
||||||
it('should queue some jobs', async () => {
|
it('should queue some jobs', async () => {
|
||||||
const asset = _.cloneDeep(assetEntityStub.image);
|
const asset = _.cloneDeep(assetEntityStub.image);
|
||||||
|
assetMock.getByIds.mockResolvedValue([asset]);
|
||||||
await sut.handleGenerateJpegThumbnail({ asset });
|
await sut.handleGenerateJpegThumbnail({ asset });
|
||||||
|
|
||||||
expect(jobMock.queue).toHaveBeenCalledWith({ name: JobName.GENERATE_WEBP_THUMBNAIL, data: { asset } });
|
expect(jobMock.queue).toHaveBeenCalledWith({ name: JobName.GENERATE_WEBP_THUMBNAIL, data: { asset } });
|
||||||
@ -140,6 +143,7 @@ describe(MediaService.name, () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should log an error', async () => {
|
it('should log an error', async () => {
|
||||||
|
assetMock.getByIds.mockResolvedValue([assetEntityStub.image]);
|
||||||
mediaMock.resize.mockRejectedValue(new Error('unsupported format'));
|
mediaMock.resize.mockRejectedValue(new Error('unsupported format'));
|
||||||
mediaMock.extractThumbnailFromExif.mockRejectedValue(new Error('unsupported format'));
|
mediaMock.extractThumbnailFromExif.mockRejectedValue(new Error('unsupported format'));
|
||||||
|
|
||||||
|
@ -43,7 +43,14 @@ export class MediaService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async handleGenerateJpegThumbnail(data: IAssetJob): Promise<void> {
|
async handleGenerateJpegThumbnail(data: IAssetJob): Promise<void> {
|
||||||
const { asset } = data;
|
const [asset] = await this.assetRepository.getByIds([data.asset.id]);
|
||||||
|
|
||||||
|
if (!asset) {
|
||||||
|
this.logger.warn(
|
||||||
|
`Asset not found: ${data.asset.id} - Original Path: ${data.asset.originalPath} - Resize Path: ${data.asset.resizePath}`,
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const resizePath = this.storageCore.getFolderLocation(StorageFolder.THUMBNAILS, asset.ownerId);
|
const resizePath = this.storageCore.getFolderLocation(StorageFolder.THUMBNAILS, asset.ownerId);
|
||||||
@ -122,6 +129,7 @@ export class MediaService {
|
|||||||
const [asset] = await this.assetRepository.getByIds([job.asset.id]);
|
const [asset] = await this.assetRepository.getByIds([job.asset.id]);
|
||||||
|
|
||||||
if (!asset) {
|
if (!asset) {
|
||||||
|
this.logger.warn(`Asset not found: ${job.asset.id} - Original Path: ${job.asset.originalPath}`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user