From f70d2e707c8d2c562ee1ac05b3b1c7cfc25789aa Mon Sep 17 00:00:00 2001 From: Leonardo Segala Date: Sat, 2 Aug 2025 06:00:11 +0200 Subject: [PATCH] Add song_fetch error checking --- backend/src/app.py | 5 +++-- backend/src/song_fetch.py | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/backend/src/app.py b/backend/src/app.py index 247ba5f..c11cf37 100644 --- a/backend/src/app.py +++ b/backend/src/app.py @@ -9,7 +9,7 @@ from .state import State from .connect import get_connection from .room import Room from .song import Song, init_db, get_song_by_title_artist, add_song_in_db, get_song_by_uuid -from .song_fetch import lastfm_query_search, yt_get_audio_url, yt_search_song +from .song_fetch import query_search, yt_get_audio_url, yt_search_song from .qrcode_gen import generate_qr @@ -182,7 +182,8 @@ def add_song(): if (query := request.args.get("query")) is None: return error("Missing query") - info = lastfm_query_search(query) + if (info := query_search(query)) is None: + return error("Search failed") if (song := get_song_by_title_artist(info.title, info.artist)) is None: ## song not found, downolad from YT diff --git a/backend/src/song_fetch.py b/backend/src/song_fetch.py index ec15485..665e2c9 100644 --- a/backend/src/song_fetch.py +++ b/backend/src/song_fetch.py @@ -51,7 +51,23 @@ def _lastfm_getinfo(name: str, artist: str) -> tuple[str, list[str]]: # ( image ) -def lastfm_query_search(query: str) -> SongInfo: +def _yt_search(query: str) -> tuple[str, str]: + ydl_opts = { + "format": "bestaudio", + "default_search": "ytsearch1", + "outtmpl": "%(title)s.%(ext)s", + "skip_download": True, + } + + with yt_dlp.YoutubeDL(ydl_opts) as ydl: + info = ydl.extract_info(query, download=False) + + first = info["entries"][0] + + return first["track"], first["artists"][0] + + +def query_search(query: str) -> SongInfo | None: name, artist = _lastfm_search(query) img_id, tags = _lastfm_getinfo(name, artist)