From a96a08939e5d2387504f599aa7c331f4baa77249 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Thu, 22 Jan 2026 22:11:57 -0500 Subject: [PATCH] refactor: rename preloadManager to imageManager (#25436) rename: preloadManager to imageManager --- .../openapi/lib/model/asset_media_size.dart | 3 ++ open-api/immich-openapi-specs.json | 1 + open-api/typescript-sdk/src/fetch-client.ts | 1 + server/src/dtos/asset-media.dto.ts | 1 + .../album-page/__tests__/album-cover.spec.ts | 6 +-- .../components/album-page/album-cover.svelte | 8 ++-- .../asset-viewer/activity-viewer.svelte | 6 +-- .../asset-viewer/album-list-item.svelte | 4 +- .../asset-viewer/asset-viewer.svelte | 20 ++++----- .../asset-viewer/detail-panel.svelte | 4 +- .../editor/transform-tool/crop-area.svelte | 4 +- .../asset-viewer/image-panorama-viewer.svelte | 11 +---- .../asset-viewer/photo-viewer.svelte | 4 +- .../asset-viewer/video-native-viewer.svelte | 10 +++-- .../asset-viewer/video-panorama-viewer.svelte | 11 ++--- .../asset-viewer/video-wrapper-viewer.svelte | 11 +++-- .../assets/thumbnail/image-thumbnail.svelte | 4 +- .../assets/thumbnail/thumbnail.svelte | 6 +-- .../memory-page/memory-photo-viewer.svelte | 4 +- .../memory-page/memory-video-viewer.svelte | 4 +- .../memory-page/memory-viewer.svelte | 6 +-- .../places-page/places-card-group.svelte | 4 +- .../shared-components/map/map.svelte | 4 +- .../side-bar/recent-albums.svelte | 4 +- .../covers/__tests__/share-cover.spec.ts | 6 +-- .../covers/share-cover.svelte | 4 +- .../duplicates/duplicate-asset.svelte | 4 +- .../workflows/WorkflowPickerItemCard.svelte | 4 +- web/src/lib/managers/ImageManager.svelte.ts | 43 +++++++++++++++++++ web/src/lib/managers/PreloadManager.svelte.ts | 38 ---------------- .../managers/edit/transform-manager.svelte.ts | 4 +- web/src/lib/utils.ts | 40 ++++++----------- web/src/lib/utils/people-utils.ts | 4 +- web/src/lib/utils/shared-links.ts | 4 +- web/src/routes/(user)/explore/+page.svelte | 4 +- .../(user)/photos/[[assetId=id]]/+page.svelte | 4 +- 36 files changed, 148 insertions(+), 152 deletions(-) create mode 100644 web/src/lib/managers/ImageManager.svelte.ts delete mode 100644 web/src/lib/managers/PreloadManager.svelte.ts 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 @@