diff --git a/web/src/lib/utils/asset-utils.ts b/web/src/lib/utils/asset-utils.ts index 8a6d5df88..5a69e6eea 100644 --- a/web/src/lib/utils/asset-utils.ts +++ b/web/src/lib/utils/asset-utils.ts @@ -25,13 +25,28 @@ import { get } from 'svelte/store'; import { handleError } from './handle-error'; export const addAssetsToAlbum = async (albumId: string, assetIds: string[]) => { - await addAssets({ + const result = await addAssets({ id: albumId, bulkIdsDto: { ids: assetIds, }, key: getKey(), }); + const count = result.filter(({ success }) => success).length; + notificationController.show({ + type: NotificationType.Info, + timeout: 5000, + message: + count > 0 + ? `Added ${count} asset${count === 1 ? '' : 's'} to the album` + : `Asset${assetIds.length === 1 ? ' was' : 's were'} already part of the album`, + button: { + text: 'View Album', + onClick() { + return goto(`${AppRoute.ALBUMS}/${albumId}`); + }, + }, + }); }; export const addAssetsToNewAlbum = async (albumName: string, assetIds: string[]) => { diff --git a/web/src/lib/utils/file-uploader.ts b/web/src/lib/utils/file-uploader.ts index ce7b18c2d..49c2b9767 100644 --- a/web/src/lib/utils/file-uploader.ts +++ b/web/src/lib/utils/file-uploader.ts @@ -60,11 +60,17 @@ export const fileUploadHandler = async (files: File[], albumId: string | undefin const name = file.name.toLowerCase(); if (extensions.some((extension) => name.endsWith(extension))) { uploadAssetsStore.addNewUploadAsset({ id: getDeviceAssetId(file), file, albumId }); - promises.push(uploadExecutionQueue.addTask(() => fileUploader(file, albumId))); + promises.push(uploadExecutionQueue.addTask(() => fileUploader(file))); } } const results = await Promise.all(promises); + const assetIds = results.filter((result): result is string => !!result); + + if (albumId && assetIds.length > 0) { + await addAssetsToAlbum(albumId, assetIds); + } + return results.filter((result): result is string => !!result); }; @@ -73,7 +79,7 @@ function getDeviceAssetId(asset: File) { } // TODO: should probably use the @api SDK -async function fileUploader(asset: File, albumId: string | undefined = undefined): Promise { +async function fileUploader(asset: File): Promise { const fileCreatedAt = new Date(asset.lastModified).toISOString(); const deviceAssetId = getDeviceAssetId(asset); @@ -136,12 +142,6 @@ async function fileUploader(asset: File, albumId: string | undefined = undefined uploadAssetsStore.successCounter.update((c) => c + 1); } - if (albumId && assetId) { - uploadAssetsStore.updateAsset(deviceAssetId, { message: 'Adding to album...' }); - await addAssetsToAlbum(albumId, [assetId]); - uploadAssetsStore.updateAsset(deviceAssetId, { message: 'Added to album' }); - } - uploadAssetsStore.updateAsset(deviceAssetId, { state: duplicate ? UploadState.DUPLICATED : UploadState.DONE }); setTimeout(() => { diff --git a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte index 4c57a9b96..cac667d87 100644 --- a/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/albums/[albumId=id]/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -291,7 +291,7 @@ const count = results.filter(({ success }) => success).length; notificationController.show({ type: NotificationType.Info, - message: `Added ${count} asset${count === 1 ? '' : 's'}`, + message: `Added ${count} asset${count > 1 ? 's' : ''} successfully, refresh the page to see newly added asset${count > 1 ? 's' : ''}.`, }); await refreshAlbum();