Przeglądaj źródła

fix(server): await thumbnail generation before returning (#3975)

* await sharp command, minor fixes

* removed outdated test
Mert 1 rok temu
rodzic
commit
04d4a30471

+ 0 - 6
server/src/domain/media/media.service.spec.ts

@@ -200,12 +200,6 @@ describe(MediaService.name, () => {
       expect(assetMock.save).not.toHaveBeenCalledWith();
     });
 
-    it('should skip thumbnail generate if resize path is missing', async () => {
-      assetMock.getByIds.mockResolvedValue([assetStub.noResizePath]);
-      await sut.handleGenerateWebpThumbnail({ id: assetStub.noResizePath.id });
-      expect(mediaMock.resize).not.toHaveBeenCalled();
-    });
-
     it('should generate a thumbnail', async () => {
       assetMock.getByIds.mockResolvedValue([assetStub.image]);
       await sut.handleGenerateWebpThumbnail({ id: assetStub.image.id });

+ 1 - 1
server/src/domain/media/media.service.ts

@@ -109,7 +109,7 @@ export class MediaService {
 
   async handleGenerateWebpThumbnail({ id }: IEntityJob) {
     const [asset] = await this.assetRepository.getByIds([id]);
-    if (!asset || !asset.resizePath) {
+    if (!asset) {
       return false;
     }
 

+ 2 - 1
server/src/infra/repositories/media.repository.ts

@@ -15,6 +15,7 @@ export class MediaRepository implements IMediaRepository {
 
   crop(input: string | Buffer, options: CropOptions): Promise<Buffer> {
     return sharp(input, { failOn: 'none' })
+      .pipelineColorspace('rgb16')
       .extract({
         left: options.left,
         top: options.top,
@@ -38,7 +39,7 @@ export class MediaRepository implements IMediaRepository {
       }
     }
     const chromaSubsampling = options.quality >= 80 ? '4:4:4' : '4:2:0'; // this is default in libvips (except the threshold is 90), but we need to set it manually in sharp
-    sharp(input, { failOn: 'none' })
+    await sharp(input, { failOn: 'none' })
       .pipelineColorspace('rgb16')
       .resize(options.size, options.size, { fit: 'outside', withoutEnlargement: true })
       .rotate()