mirror of
https://github.com/immich-app/immich.git
synced 2025-12-25 17:24:58 +03:00
fix(server): only extract image's duration if format supports animation (#24587)
This commit is contained in:
@@ -152,6 +152,26 @@ describe('mimeTypes', () => {
|
||||
}
|
||||
});
|
||||
|
||||
describe('animated image', () => {
|
||||
for (const img of ['a.avif', 'a.gif', 'a.webp']) {
|
||||
it('should identify animated image mime types as such', () => {
|
||||
expect(mimeTypes.isPossiblyAnimatedImage(img)).toBeTruthy();
|
||||
});
|
||||
}
|
||||
|
||||
for (const img of ['a.cr3', 'a.jpg', 'a.tiff']) {
|
||||
it('should identify static image mime types as such', () => {
|
||||
expect(mimeTypes.isPossiblyAnimatedImage(img)).toBeFalsy();
|
||||
});
|
||||
}
|
||||
|
||||
for (const extension of Object.keys(mimeTypes.video)) {
|
||||
it('should not identify video mime types as animated', () => {
|
||||
expect(mimeTypes.isPossiblyAnimatedImage(extension)).toBeFalsy();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe('video', () => {
|
||||
it('should contain only lowercase mime types', () => {
|
||||
const keys = Object.keys(mimeTypes.video);
|
||||
|
||||
@@ -64,6 +64,11 @@ const image: Record<string, string[]> = {
|
||||
'.tiff': ['image/tiff'],
|
||||
};
|
||||
|
||||
const possiblyAnimatedImageExtensions = new Set(['.avif', '.gif', '.heic', '.heif', '.jxl', '.png', '.webp']);
|
||||
const possiblyAnimatedImage: Record<string, string[]> = Object.fromEntries(
|
||||
Object.entries(image).filter(([key]) => possiblyAnimatedImageExtensions.has(key)),
|
||||
);
|
||||
|
||||
const extensionOverrides: Record<string, string> = {
|
||||
'image/jpeg': '.jpg',
|
||||
};
|
||||
@@ -119,6 +124,7 @@ export const mimeTypes = {
|
||||
isAsset: (filename: string) => isType(filename, image) || isType(filename, video),
|
||||
isImage: (filename: string) => isType(filename, image),
|
||||
isWebSupportedImage: (filename: string) => isType(filename, webSupportedImage),
|
||||
isPossiblyAnimatedImage: (filename: string) => isType(filename, possiblyAnimatedImage),
|
||||
isProfile: (filename: string) => isType(filename, profile),
|
||||
isSidecar: (filename: string) => isType(filename, sidecar),
|
||||
isVideo: (filename: string) => isType(filename, video),
|
||||
|
||||
Reference in New Issue
Block a user