From 4ab54e12e1ee4e28ef5c8230d18f86e6dee5dd7d Mon Sep 17 00:00:00 2001 From: Honey Date: Tue, 28 Apr 2026 08:59:17 +0200 Subject: [PATCH] feat: track missing tracks in Navidrome playlist creation notification MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Collects tracks not matched in Navidrome search during playlist creation and saves them as 'missing' in the notification — expandable list in the bell panel labeled 'nicht in Navidrome gefunden'. Co-Authored-By: Claude Sonnet 4.6 --- src/ui.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/ui.js b/src/ui.js index bfdaa13..d9c4cd5 100644 --- a/src/ui.js +++ b/src/ui.js @@ -314,6 +314,7 @@ async function _createNdPlaylist(tracks, name) { try { toast('🎵 Erstelle Navidrome-Playlist…'); const songIds = []; + const missing = []; const norm = s => s?.toLowerCase().trim() || ''; for (const t of tracks) { if (!t.trackName) continue; @@ -325,15 +326,19 @@ async function _createNdPlaylist(tracks, name) { norm(s.artist).split(' ')[0] === norm(t.artistName).split(' ')[0] ) || songs.find(s => norm(s.title) === norm(t.trackName)); if (match) songIds.push(match.id); - } catch {} + else missing.push(t.trackName); + } catch { missing.push(t.trackName); } } if (!songIds.length) { toast('⚠ Keine Tracks in Navidrome gefunden — zuerst Library scannen, dann Playlist manuell anlegen'); + _addNotif({ id: 'pl_' + Date.now(), title: `Playlist: ${name}`, artist: '', status: 'error', message: 'Keine Tracks in Navidrome gefunden — Library scan nötig', missing, timestamp: Date.now(), read: false }); return; } const songParams = songIds.map(id => `&songId=${encodeURIComponent(id)}`).join(''); await api('createPlaylist', `&name=${encodeURIComponent(name)}${songParams}`); + const msg = `${songIds.length}/${tracks.length} Tracks hinzugefügt${missing.length ? `, ${missing.length} nicht gefunden` : ''}`; toast(`✅ Playlist "${name}" mit ${songIds.length}/${tracks.length} Tracks erstellt`); + _addNotif({ id: 'pl_' + Date.now(), title: `Playlist: ${name}`, artist: '', status: 'done', message: msg, missing, timestamp: Date.now(), read: false }); } catch(e) { toast('Playlist-Erstellung fehlgeschlagen: ' + e.message); } @@ -408,6 +413,9 @@ function _renderNotifList() { const failedHtml = n.failed?.length ? `
${n.failed.length} Track${n.failed.length > 1 ? 's' : ''} fehlgeschlagen
    ${n.failed.map(f => `
  • ${esc(f)}
  • `).join('')}
` : ''; + const missingHtml = n.missing?.length + ? `
${n.missing.length} Track${n.missing.length > 1 ? 's' : ''} nicht in Navidrome gefunden
    ${n.missing.map(f => `
  • ${esc(f)}
  • `).join('')}
` + : ''; return `
${icon} @@ -419,6 +427,7 @@ function _renderNotifList() {
${n.message ? `
${esc(n.message)}
` : ''} ${failedHtml} + ${missingHtml}
`; }).join(''); }