From f03c6dfabd558667b4184bdd49cc844aa65003d3 Mon Sep 17 00:00:00 2001 From: Honey Date: Sun, 24 May 2026 12:31:52 +0200 Subject: [PATCH] fix: remove space and / as artist separators, keep & MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Separators: • · ; , & — space and / removed to avoid breaking multi-word artist names. Co-Authored-By: Claude Sonnet 4.6 --- backend/lib/metadata.js | 2 +- backend/novasonic-server.js | 3 +-- src/ui.js | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/lib/metadata.js b/backend/lib/metadata.js index 98111e5..57e5f95 100644 --- a/backend/lib/metadata.js +++ b/backend/lib/metadata.js @@ -13,7 +13,7 @@ function navidromeArtist(name) { .replace(/\s+ft\.?\s+/gi, ';') .replace(/\s+featuring\s+/gi, ';') .replace(/\s+&\s+/g, ';') - .replace(/\s*\/\s*/g, ';') + .replace(/,\s*/g, ';'); } diff --git a/backend/novasonic-server.js b/backend/novasonic-server.js index 229de75..c3fe587 100644 --- a/backend/novasonic-server.js +++ b/backend/novasonic-server.js @@ -246,8 +246,7 @@ function _normalizeArtists(str, sep) { if (!str) return str; // If an explicit separator is present use it; otherwise fall back to splitting on spaces // so the user can type "Artist1 Artist2" without a semicolon. - const splitter = /[•·;,&/]/.test(str) ? /\s*[•·;,&/]\s*/ : /\s+/; - return str.split(splitter).map(s => s.trim()).filter(Boolean).join(sep); + return str.split(/\s*[•·;,&]\s*/).map(s => s.trim()).filter(Boolean).join(sep); } // Strip " - Topic" suffix YouTube Music appends to artist channel names diff --git a/src/ui.js b/src/ui.js index 080ad29..fd26041 100644 --- a/src/ui.js +++ b/src/ui.js @@ -240,7 +240,7 @@ document.addEventListener('click', e => { // Track artist → "Serph; Zun" | Album artist → "Serph, Zun" function _fmtArtists(str, sep) { if (!str) return ''; - return str.split(/\s*[•·;,&/]\s*/).map(s => s.trim()).filter(Boolean).join(sep); + return str.split(/\s*[•·;,&]\s*/).map(s => s.trim()).filter(Boolean).join(sep); } function _renderInfoModal(s) {