fix(immersive): prevent multiple unnecessary track info requests
- Track loadedTrackId to avoid re-fetching same track - Only request when trackId actually changes from loaded one - Clear state only when track ends (trackId becomes null) - Remove broken common.loading translation (spinner is enough)
This commit is contained in:
1 parent
fe274c466d
commit
2058fab287
1 file changed
+8
-4
@@ -15,6 +15,7 @@
|
||||
let loading = $state(false);
|
||||
let error = $state<string | null>(null);
|
||||
let trackInfo = $state<TrackInfo | null>(null);
|
||||
let loadedTrackId = $state<number | null>(null);
|
||||
|
||||
// Format duration from seconds to M:SS
|
||||
function formatDuration(seconds: number): string {
|
||||
@@ -81,13 +82,15 @@
|
||||
return entries.map(([role, names]) => ({ role, names }));
|
||||
}
|
||||
|
||||
// Load track info when trackId changes
|
||||
// Load track info only when trackId actually changes
|
||||
$effect(() => {
|
||||
if (trackId) {
|
||||
if (trackId && trackId !== loadedTrackId) {
|
||||
loadTrackInfo(trackId);
|
||||
} else {
|
||||
} else if (!trackId && loadedTrackId) {
|
||||
// Track ended/cleared
|
||||
trackInfo = null;
|
||||
error = null;
|
||||
loadedTrackId = null;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -96,9 +99,11 @@
|
||||
error = null;
|
||||
try {
|
||||
trackInfo = await invoke<TrackInfo>('get_track_info', { trackId: id });
|
||||
loadedTrackId = id;
|
||||
} catch (e) {
|
||||
error = e instanceof Error ? e.message : String(e);
|
||||
trackInfo = null;
|
||||
loadedTrackId = null;
|
||||
} finally {
|
||||
loading = false;
|
||||
}
|
||||
@@ -113,7 +118,6 @@
|
||||
{#if loading}
|
||||
<div class="loading-state">
|
||||
<Loader2 size={28} class="spinner" />
|
||||
<span>{$t('common.loading') || 'Loading...'}</span>
|
||||
</div>
|
||||
{:else if error}
|
||||
<div class="error-state">
|
||||
|
||||
Reference in new issue
Block a user