From 5074c408343a41b402353fe730b26265f925a4f6 Mon Sep 17 00:00:00 2001 From: wallacewong Date: Thu, 16 Jul 2026 13:22:10 +0100 Subject: [PATCH] refactor(web): use resolve-all-duplicates endpoint for deduplicate all button --- .../[[assetId=id]]/+page.svelte | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte index a9a0b7729a..022dfeff51 100644 --- a/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte +++ b/web/src/routes/(user)/utilities/duplicates/[[photos=photos]]/[[assetId=id]]/+page.svelte @@ -12,7 +12,7 @@ import { locale } from '$lib/stores/preferences.store'; import { handleError } from '$lib/utils/handle-error'; import type { AssetResponseDto } from '@immich/sdk'; - import { createStack, deleteDuplicates, resolveDuplicates, updateAssets } from '@immich/sdk'; + import { createStack, deleteDuplicates, resolveAllDuplicates, resolveDuplicates, updateAssets } from '@immich/sdk'; import { Button, HStack, IconButton, modalManager, Text, toastManager } from '@immich/ui'; import { mdiCheckOutline, @@ -133,7 +133,7 @@ }; const handleDeduplicateAll = async () => { - // Use server-provided suggestedKeepAssetIds from each group + // Drives the confirmation count and the toast only; the response is per-group, not per-asset. const idsToDelete = duplicates.flatMap((group) => { const keepIds = new Set(group.suggestedKeepAssetIds); return group.assets.map((asset) => asset.id).filter((id) => !keepIds.has(id)); @@ -150,19 +150,7 @@ return withConfirmation( async () => { - // Resolve all groups in a single batch request - const response = await resolveDuplicates({ - duplicateResolveDto: { - groups: duplicates.map((group) => { - const keepIds = new Set(group.suggestedKeepAssetIds); - return { - duplicateId: group.duplicateId, - keepAssetIds: group.suggestedKeepAssetIds, - trashAssetIds: group.assets.map((asset) => asset.id).filter((id) => !keepIds.has(id)), - }; - }), - }, - }); + const response = await resolveAllDuplicates(); // Count failures and show appropriate message const failedCount = response.filter(({ success }) => !success).length;