diff --git a/mobile/openapi/lib/model/asset_media_size.dart b/mobile/openapi/lib/model/asset_media_size.dart index aa7e2a6f5c..087d19da1f 100644 --- a/mobile/openapi/lib/model/asset_media_size.dart +++ b/mobile/openapi/lib/model/asset_media_size.dart @@ -23,12 +23,14 @@ class AssetMediaSize { String toJson() => value; + static const original = AssetMediaSize._(r'original'); static const fullsize = AssetMediaSize._(r'fullsize'); static const preview = AssetMediaSize._(r'preview'); static const thumbnail = AssetMediaSize._(r'thumbnail'); /// List of all possible values in this [enum][AssetMediaSize]. static const values = [ + original, fullsize, preview, thumbnail, @@ -70,6 +72,7 @@ class AssetMediaSizeTypeTransformer { AssetMediaSize? decode(dynamic data, {bool allowNull = true}) { if (data != null) { switch (data) { + case r'original': return AssetMediaSize.original; case r'fullsize': return AssetMediaSize.fullsize; case r'preview': return AssetMediaSize.preview; case r'thumbnail': return AssetMediaSize.thumbnail; diff --git a/open-api/immich-openapi-specs.json b/open-api/immich-openapi-specs.json index cb0c8f8a67..137e7045ac 100644 --- a/open-api/immich-openapi-specs.json +++ b/open-api/immich-openapi-specs.json @@ -16301,6 +16301,7 @@ }, "AssetMediaSize": { "enum": [ + "original", "fullsize", "preview", "thumbnail" diff --git a/open-api/typescript-sdk/src/fetch-client.ts b/open-api/typescript-sdk/src/fetch-client.ts index 09a0860539..684818d28f 100644 --- a/open-api/typescript-sdk/src/fetch-client.ts +++ b/open-api/typescript-sdk/src/fetch-client.ts @@ -5660,6 +5660,7 @@ export enum MirrorAxis { Vertical = "vertical" } export enum AssetMediaSize { + Original = "original", Fullsize = "fullsize", Preview = "preview", Thumbnail = "thumbnail" diff --git a/server/src/dtos/asset-media.dto.ts b/server/src/dtos/asset-media.dto.ts index f5207d3048..3935774f3e 100644 --- a/server/src/dtos/asset-media.dto.ts +++ b/server/src/dtos/asset-media.dto.ts @@ -7,6 +7,7 @@ import { AssetVisibility } from 'src/enum'; import { Optional, ValidateBoolean, ValidateDate, ValidateEnum, ValidateUUID } from 'src/validation'; export enum AssetMediaSize { + Original = 'original', /** * An full-sized image extracted/converted from non-web-friendly formats like RAW/HIF. * or otherwise the original image itself. diff --git a/web/src/lib/components/album-page/__tests__/album-cover.spec.ts b/web/src/lib/components/album-page/__tests__/album-cover.spec.ts index 5fa8b96008..3d081a3d2d 100644 --- a/web/src/lib/components/album-page/__tests__/album-cover.spec.ts +++ b/web/src/lib/components/album-page/__tests__/album-cover.spec.ts @@ -1,5 +1,5 @@ import AlbumCover from '$lib/components/album-page/album-cover.svelte'; -import { getAssetThumbnailUrl } from '$lib/utils'; +import { getAssetMediaUrl } from '$lib/utils'; import { albumFactory } from '@test-data/factories/album-factory'; import { render } from '@testing-library/svelte'; @@ -7,7 +7,7 @@ vi.mock('$lib/utils'); describe('AlbumCover component', () => { it('renders an image when the album has a thumbnail', () => { - vi.mocked(getAssetThumbnailUrl).mockReturnValue('/asdf'); + vi.mocked(getAssetMediaUrl).mockReturnValue('/asdf'); const component = render(AlbumCover, { album: albumFactory.build({ albumName: 'someName', @@ -21,7 +21,7 @@ describe('AlbumCover component', () => { expect(img.getAttribute('loading')).toBe('lazy'); expect(img.className).toBe('size-full rounded-xl object-cover aspect-square text'); expect(img.getAttribute('src')).toBe('/asdf'); - expect(getAssetThumbnailUrl).toHaveBeenCalledWith({ id: '123' }); + expect(getAssetMediaUrl).toHaveBeenCalledWith({ id: '123' }); }); it('renders an image when the album has no thumbnail', () => { diff --git a/web/src/lib/components/album-page/album-cover.svelte b/web/src/lib/components/album-page/album-cover.svelte index 3f71bbe632..c6242c5fad 100644 --- a/web/src/lib/components/album-page/album-cover.svelte +++ b/web/src/lib/components/album-page/album-cover.svelte @@ -1,8 +1,8 @@ diff --git a/web/src/lib/components/asset-viewer/activity-viewer.svelte b/web/src/lib/components/asset-viewer/activity-viewer.svelte index 30ea8ff6bd..4120212165 100644 --- a/web/src/lib/components/asset-viewer/activity-viewer.svelte +++ b/web/src/lib/components/asset-viewer/activity-viewer.svelte @@ -7,7 +7,7 @@ import { assetViewerManager } from '$lib/managers/asset-viewer-manager.svelte'; import { Route } from '$lib/route'; import { locale } from '$lib/stores/preferences.store'; - import { getAssetThumbnailUrl } from '$lib/utils'; + import { getAssetMediaUrl } from '$lib/utils'; import { getAssetType } from '$lib/utils/asset-utils'; import { handleError } from '$lib/utils/handle-error'; import { isTenMinutesApart } from '$lib/utils/timesince'; @@ -142,7 +142,7 @@ Profile picture of {reaction.user.name}, who commented on this asset @@ -195,7 +195,7 @@ > Profile picture of {reaction.user.name}, who liked this asset diff --git a/web/src/lib/components/asset-viewer/album-list-item.svelte b/web/src/lib/components/asset-viewer/album-list-item.svelte index da0df21839..35b2ab99ff 100644 --- a/web/src/lib/components/asset-viewer/album-list-item.svelte +++ b/web/src/lib/components/asset-viewer/album-list-item.svelte @@ -1,7 +1,7 @@ {#if projectionType === ProjectionType.EQUIRECTANGULAR} - + {:else} import BrokenAsset from '$lib/components/assets/broken-asset.svelte'; - import { preloadManager } from '$lib/managers/PreloadManager.svelte'; + import { imageManager } from '$lib/managers/ImageManager.svelte'; import { Icon } from '@immich/ui'; import { mdiEyeOffOutline } from '@mdi/js'; import type { ActionReturn } from 'svelte/action'; @@ -60,7 +60,7 @@ onComplete?.(false); } return { - destroy: () => preloadManager.cancelPreloadUrl(url), + destroy: () => imageManager.cancelPreloadUrl(url), }; } diff --git a/web/src/lib/components/assets/thumbnail/thumbnail.svelte b/web/src/lib/components/assets/thumbnail/thumbnail.svelte index 63e6f7cc04..cd2bf1d670 100644 --- a/web/src/lib/components/assets/thumbnail/thumbnail.svelte +++ b/web/src/lib/components/assets/thumbnail/thumbnail.svelte @@ -1,7 +1,7 @@ {#if !imageLoaded} diff --git a/web/src/lib/components/memory-page/memory-video-viewer.svelte b/web/src/lib/components/memory-page/memory-video-viewer.svelte index 06a41e2ab9..45501aff0b 100644 --- a/web/src/lib/components/memory-page/memory-video-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-video-viewer.svelte @@ -2,7 +2,7 @@ import { assetViewerFadeDuration } from '$lib/constants'; import type { TimelineAsset } from '$lib/managers/timeline-manager/types'; import { autoPlayVideo } from '$lib/stores/preferences.store'; - import { getAssetPlaybackUrl, getAssetThumbnailUrl } from '$lib/utils'; + import { getAssetMediaUrl, getAssetPlaybackUrl } from '$lib/utils'; import { AssetMediaSize } from '@immich/sdk'; import { onMount } from 'svelte'; import { fade } from 'svelte/transition'; @@ -32,7 +32,7 @@ playsinline class="h-full w-full rounded-2xl object-contain transition-all" src={getAssetPlaybackUrl({ id: asset.id })} - poster={getAssetThumbnailUrl({ id: asset.id, size: AssetMediaSize.Preview })} + poster={getAssetMediaUrl({ id: asset.id, size: AssetMediaSize.Preview })} draggable="false" muted={videoViewerMuted} volume={videoViewerVolume} diff --git a/web/src/lib/components/memory-page/memory-viewer.svelte b/web/src/lib/components/memory-page/memory-viewer.svelte index 1b82de6a4b..3c7ec4b0db 100644 --- a/web/src/lib/components/memory-page/memory-viewer.svelte +++ b/web/src/lib/components/memory-page/memory-viewer.svelte @@ -30,7 +30,7 @@ import { memoryStore, type MemoryAsset } from '$lib/stores/memory.store.svelte'; import { locale, videoViewerMuted, videoViewerVolume } from '$lib/stores/preferences.store'; import { preferences } from '$lib/stores/user.store'; - import { getAssetThumbnailUrl, handlePromiseError, memoryLaneTitle } from '$lib/utils'; + import { getAssetMediaUrl, handlePromiseError, memoryLaneTitle } from '$lib/utils'; import { cancelMultiselect } from '$lib/utils/asset-utils'; import { fromISODateTimeUTC, toTimelineAsset } from '$lib/utils/timeline-util'; import { AssetMediaSize, AssetTypeEnum, getAssetInfo } from '@immich/sdk'; @@ -449,7 +449,7 @@ {#if current.previousMemory && current.previousMemory.assets.length > 0} {$t('previous_memory')} @@ -598,7 +598,7 @@ {#if current.nextMemory && current.nextMemory.assets.length > 0} {$t('next_memory')} diff --git a/web/src/lib/components/places-page/places-card-group.svelte b/web/src/lib/components/places-page/places-card-group.svelte index 6675014704..c50f2a0441 100644 --- a/web/src/lib/components/places-page/places-card-group.svelte +++ b/web/src/lib/components/places-page/places-card-group.svelte @@ -1,7 +1,7 @@