From c654deac17a5333a99115a86968f870e2f3ef307 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Mon, 8 Jun 2026 15:14:47 -0700 Subject: [PATCH] Manual search link paste: clean error on unresolvable link, don't search the raw URL (#813 lock-in) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A parsed link is unambiguously a Tidal/Qobuz /track/ URL (no false positives), so if its source isn't connected or the track can't be resolved, return a clear 400 ("Tidal isn't connected — … or search by name") instead of silently running a useless search of the raw URL text. The frontend already surfaces the 400's error message in the modal. --- web_server.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/web_server.py b/web_server.py index 3d1961c6..8534cae3 100644 --- a/web_server.py +++ b/web_server.py @@ -7155,14 +7155,22 @@ def manual_search_for_task(task_id): link_track_id = None if link: _src, _tid = link - if _src in valid_source_ids: - clean_q, link_err = _resolve_link_track_query(_src, _tid) - if clean_q: - query = clean_q - source = _src - link_source, link_track_id = _src, _tid - else: - logger.info(f"[Manual Search] link resolve fell back: {link_err}") + # A parsed link is unambiguously a Tidal/Qobuz track URL, never a + # name a user would type — so if we can't use it, say why clearly + # instead of running a useless search of the raw URL text. + if _src not in valid_source_ids: + return jsonify({ + "error": f"{_src.title()} isn't connected — can't resolve a " + f"{_src.title()} link. Connect it in Settings, or search by name." + }), 400 + clean_q, link_err = _resolve_link_track_query(_src, _tid) + if not clean_q: + return jsonify({ + "error": link_err or f"Couldn't resolve that {_src.title()} link." + }), 400 + query = clean_q + source = _src + link_source, link_track_id = _src, _tid if source != 'all': if source not in valid_source_ids: