diff --git a/musicfetch b/musicfetch index b3be7e1..08c7897 100644 --- a/musicfetch +++ b/musicfetch @@ -5,6 +5,7 @@ import os import re import subprocess import requests +from requests.exceptions import Timeout # === CONFIGURATION === LIDARR_URL = "http://localhost:8686" # Your Lidarr base URL @@ -68,22 +69,33 @@ def yt_dlp_download(url_or_query, target_folder): url_or_query ]) -def search_artist(name): - resp = requests.get( - f"{LIDARR_URL}/api/v1/artist/lookup", - headers=headers, - params={"term": name} - ) - resp.raise_for_status() - results = resp.json() - return results[0] if results else None +def search_artist(name, timeout_seconds=15): + try: + resp = requests.get( + f"{LIDARR_URL}/api/v1/artist/lookup", + headers=headers, + params={"term": name}, + timeout=timeout_seconds + ) + resp.raise_for_status() + results = resp.json() + return results[0] if results else None + except Timeout: + print(f"Lidarr artist search timed out after {timeout_seconds} seconds.") + return None + except requests.RequestException as e: + print(f"Lidarr artist search failed: {e}") + return None def get_existing_artist(name): - resp = requests.get(f"{LIDARR_URL}/api/v1/artist", headers=headers) - resp.raise_for_status() - for artist in resp.json(): - if artist["artistName"].lower() == name.lower(): - return artist + try: + resp = requests.get(f"{LIDARR_URL}/api/v1/artist", headers=headers) + resp.raise_for_status() + for artist in resp.json(): + if artist["artistName"].lower() == name.lower(): + return artist + except requests.RequestException as e: + print(f"Failed to get existing artists: {e}") return None def add_artist(metadata_artist): @@ -156,16 +168,16 @@ def main(): if is_url(input_str): print("Input is a URL. Extracting metadata to find artist...") metadata = run_yt_dlp_get_metadata(input_str) - if metadata: - artist_name = get_artist_from_metadata(metadata) - print(f"Extracted artist name: {artist_name}") - else: - print("Failed to get metadata from URL.") - artist_name = "Unknown Artist" + if metadata: + artist_name = get_artist_from_metadata(metadata) + print(f"Extracted artist name: {artist_name}") + else: + print("Failed to get metadata from URL.") + artist_name = "Unknown Artist" - target_folder = os.path.join(ROOT_FOLDER, artist_name, "youtube") - yt_dlp_download(input_str, target_folder) - return + target_folder = os.path.join(ROOT_FOLDER, artist_name, "youtube") + yt_dlp_download(input_str, target_folder) + return if " - " not in input_str: print("Input must be in 'Artist - Track' format.") @@ -179,10 +191,10 @@ def main(): artist = get_existing_artist(artist_name) if not artist: - print("Artist not found. Searching Lidarr metadata...") + print("Artist not found. Searching Lidarr metadata (with timeout)...") metadata = search_artist(artist_name) if not metadata: - print("No match found in Lidarr metadata. Falling back to yt-dlp.") + print("No match found or search timed out. Falling back to yt-dlp.") yt_dlp_download(input_str, os.path.join(ROOT_FOLDER, artist_name, "youtube")) return