fix(TagEditor): use selected result object instead of just ID
- Store full RemoteAlbumSearchResult instead of provider_id only - Apply uses provider from selected result, not from dropdown - Prevents mismatch when user changes provider after searching
This commit is contained in:
1 parent
e0d2439f56
commit
186a249c45
1 file changed
+13
-14
@@ -96,7 +96,7 @@
|
|||||||
let remoteSearching = $state(false);
|
let remoteSearching = $state(false);
|
||||||
let remoteLoading = $state(false);
|
let remoteLoading = $state(false);
|
||||||
let remoteResults = $state<RemoteAlbumSearchResult[]>([]);
|
let remoteResults = $state<RemoteAlbumSearchResult[]>([]);
|
||||||
let selectedRemoteId = $state<string | null>(null);
|
let selectedResult = $state<RemoteAlbumSearchResult | null>(null);
|
||||||
let showRemotePanel = $state(false);
|
let showRemotePanel = $state(false);
|
||||||
let hasSearched = $state(false);
|
let hasSearched = $state(false);
|
||||||
|
|
||||||
@@ -142,7 +142,7 @@
|
|||||||
resetFromAlbum();
|
resetFromAlbum();
|
||||||
// Reset remote state when modal opens
|
// Reset remote state when modal opens
|
||||||
remoteResults = [];
|
remoteResults = [];
|
||||||
selectedRemoteId = null;
|
selectedResult = null;
|
||||||
showRemotePanel = false;
|
showRemotePanel = false;
|
||||||
hasSearched = false;
|
hasSearched = false;
|
||||||
}
|
}
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
|
|
||||||
remoteSearching = true;
|
remoteSearching = true;
|
||||||
remoteResults = [];
|
remoteResults = [];
|
||||||
selectedRemoteId = null;
|
selectedResult = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const results = await invoke<RemoteAlbumSearchResult[]>('remote_metadata_search', {
|
const results = await invoke<RemoteAlbumSearchResult[]>('remote_metadata_search', {
|
||||||
@@ -179,13 +179,13 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function applyRemoteMetadata() {
|
async function applyRemoteMetadata() {
|
||||||
if (!selectedRemoteId) return;
|
if (!selectedResult) return;
|
||||||
|
|
||||||
remoteLoading = true;
|
remoteLoading = true;
|
||||||
try {
|
try {
|
||||||
const metadata = await invoke<RemoteAlbumMetadata>('remote_metadata_get_album', {
|
const metadata = await invoke<RemoteAlbumMetadata>('remote_metadata_get_album', {
|
||||||
provider: remoteProvider,
|
provider: selectedResult.provider,
|
||||||
providerId: selectedRemoteId
|
providerId: selectedResult.provider_id
|
||||||
});
|
});
|
||||||
|
|
||||||
// Apply album-level metadata
|
// Apply album-level metadata
|
||||||
@@ -215,7 +215,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const providerName = remoteProvider === 'musicbrainz' ? 'MusicBrainz' : 'Discogs';
|
const providerName = selectedResult?.provider === 'musicbrainz' ? 'MusicBrainz' : 'Discogs';
|
||||||
if (hasMismatch) {
|
if (hasMismatch) {
|
||||||
showToast(
|
showToast(
|
||||||
`Applied from ${providerName}. Track count differs: local=${localTrackCount}, remote=${remoteTrackCount}`,
|
`Applied from ${providerName}. Track count differs: local=${localTrackCount}, remote=${remoteTrackCount}`,
|
||||||
@@ -248,9 +248,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function openInBrowser() {
|
async function openInBrowser() {
|
||||||
const selected = remoteResults.find(r => r.provider_id === selectedRemoteId);
|
if (!selectedResult) return;
|
||||||
if (!selected) return;
|
const url = getSourceUrl(selectedResult);
|
||||||
const url = getSourceUrl(selected);
|
|
||||||
try {
|
try {
|
||||||
await openUrl(url);
|
await openUrl(url);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@@ -456,8 +455,8 @@
|
|||||||
{#each remoteResults as result (result.provider_id)}
|
{#each remoteResults as result (result.provider_id)}
|
||||||
<button
|
<button
|
||||||
class="remote-result"
|
class="remote-result"
|
||||||
class:selected={selectedRemoteId === result.provider_id}
|
class:selected={selectedResult?.provider_id === result.provider_id}
|
||||||
onclick={() => selectedRemoteId = result.provider_id}
|
onclick={() => selectedResult = result}
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
<span class="result-title">{result.title}</span>
|
<span class="result-title">{result.title}</span>
|
||||||
@@ -482,7 +481,7 @@
|
|||||||
<button
|
<button
|
||||||
class="btn btn-ghost btn-xs"
|
class="btn btn-ghost btn-xs"
|
||||||
onclick={openInBrowser}
|
onclick={openInBrowser}
|
||||||
disabled={!selectedRemoteId}
|
disabled={!selectedResult}
|
||||||
type="button"
|
type="button"
|
||||||
title="Open in browser"
|
title="Open in browser"
|
||||||
>
|
>
|
||||||
@@ -495,7 +494,7 @@
|
|||||||
<button
|
<button
|
||||||
class="btn btn-primary btn-sm"
|
class="btn btn-primary btn-sm"
|
||||||
onclick={applyRemoteMetadata}
|
onclick={applyRemoteMetadata}
|
||||||
disabled={!selectedRemoteId || remoteLoading}
|
disabled={!selectedResult || remoteLoading}
|
||||||
type="button"
|
type="button"
|
||||||
>
|
>
|
||||||
{#if remoteLoading}
|
{#if remoteLoading}
|
||||||
|
|||||||
Reference in new issue
Block a user