From 64b92cb24c6eae5c92e125e459f995329c013916 Mon Sep 17 00:00:00 2001 From: Carsten Otto <git@c-otto.de> Date: Sat, 25 Jan 2025 20:50:37 +0100 Subject: [PATCH] fix(server): do not reset fileCreatedDate (#15650) When marking an offline asset as online again, do not reset the fileCreatedAt value. This value contains the "true" date, copied from exif.dateTimeOriginal. If we overwrite this value, we'd need to run the metadata extraction job again. Instead, we just leave the old (and correct) value in place. fixes #15640 --- server/src/services/library.service.spec.ts | 22 +++++++++++++++++++-- server/src/services/library.service.ts | 1 - 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/server/src/services/library.service.spec.ts b/server/src/services/library.service.spec.ts index 5f81d92ec2..9f60e35dcc 100644 --- a/server/src/services/library.service.spec.ts +++ b/server/src/services/library.service.spec.ts @@ -337,12 +337,31 @@ describe(LibraryService.name, () => { expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.trashedOffline.id], { deletedAt: null, - fileCreatedAt: assetStub.trashedOffline.fileModifiedAt, fileModifiedAt: assetStub.trashedOffline.fileModifiedAt, isOffline: false, originalFileName: 'path.jpg', }); }); + + it('should not touch fileCreatedAt when un-trashing an asset previously marked as offline', async () => { + const mockAssetJob: ILibraryAssetJob = { + id: assetStub.external.id, + importPaths: ['/'], + exclusionPatterns: [], + }; + + assetMock.getById.mockResolvedValue(assetStub.trashedOffline); + storageMock.stat.mockResolvedValue({ mtime: assetStub.trashedOffline.fileModifiedAt } as Stats); + + await expect(sut.handleSyncAsset(mockAssetJob)).resolves.toBe(JobStatus.SUCCESS); + + expect(assetMock.updateAll).toHaveBeenCalledWith( + [assetStub.trashedOffline.id], + expect.not.objectContaining({ + fileCreatedAt: expect.anything(), + }), + ); + }); }); it('should update file when mtime has changed', async () => { @@ -360,7 +379,6 @@ describe(LibraryService.name, () => { expect(assetMock.updateAll).toHaveBeenCalledWith([assetStub.external.id], { fileModifiedAt: newMTime, - fileCreatedAt: newMTime, isOffline: false, originalFileName: 'photo.jpg', deletedAt: null, diff --git a/server/src/services/library.service.ts b/server/src/services/library.service.ts index dca1dec9e2..daccf01dce 100644 --- a/server/src/services/library.service.ts +++ b/server/src/services/library.service.ts @@ -511,7 +511,6 @@ export class LibraryService extends BaseService { await this.assetRepository.updateAll([asset.id], { isOffline: false, deletedAt: null, - fileCreatedAt: mtime, fileModifiedAt: mtime, originalFileName: parse(asset.originalPath).base, });