"""Global configuration constants and logger setup.""" import os import sys from pathlib import Path from platformdirs import user_cache_dir, user_config_dir from dotenv import load_dotenv from loguru import logger # ─── Application ───────────────────────────────────────────────────── APP_NAME = "lrcfetch" APP_AUTHOR = "Uyanide" # ─── .env loading (XDG config dir first, then project-local) ───────── _config_env = Path(user_config_dir(APP_NAME, APP_AUTHOR)) / ".env" load_dotenv(_config_env) # ~/.config/lrcfetch/.env load_dotenv() # .env in cwd (does NOT override existing vars) # ─── HTTP ──────────────────────────────────────────────────────────── HTTP_TIMEOUT = 10.0 # ─── Cache TTLs (seconds) ─────────────────────────────────────────── TTL_SYNCED = None # never expires TTL_UNSYNCED = 86400 # 1 day TTL_NOT_FOUND = 86400 * 3 # 3 days TTL_NETWORK_ERROR = 3600 # 1 hour # ─── Search ────────────────────────────────────────────────────────── DURATION_TOLERANCE_MS = 3000 # max duration mismatch for search matching # ─── Spotify ───────────────────────────────────────────────────────── SPOTIFY_TOKEN_URL = "https://open.spotify.com/api/token" SPOTIFY_LYRICS_URL = "https://spclient.wg.spotify.com/color-lyrics/v2/track/" SPOTIFY_SERVER_TIME_URL = "https://open.spotify.com/api/server-time" SPOTIFY_SECRET_URL = ( "https://raw.githubusercontent.com/xyloflake/spot-secrets-go" "/refs/heads/main/secrets/secrets.json" ) SPOTIFY_SP_DC = os.environ.get("SPOTIFY_SP_DC", "") # ─── Netease ───────────────────────────────────────────────────────── NETEASE_SEARCH_URL = "https://music.163.com/api/cloudsearch/pc" NETEASE_LYRIC_URL = "https://interface3.music.163.com/api/song/lyric" # ─── LRCLIB ────────────────────────────────────────────────────────── LRCLIB_API_URL = "https://lrclib.net/api/get" LRCLIB_SEARCH_URL = "https://lrclib.net/api/search" # ─── User-Agents ───────────────────────────────────────────────────── UA_BROWSER = ( "Mozilla/5.0 (X11; Linux x86_64; rv:148.0) " "Gecko/20100101 Firefox/148.0" ) UA_LRCFETCH = "LRCFetch (https://github.com/Uyanide/lrcfetch)" # ─── Paths ─────────────────────────────────────────────────────────── CACHE_DIR = user_cache_dir(APP_NAME, APP_AUTHOR) DB_PATH = os.path.join(CACHE_DIR, "cache.db") os.makedirs(CACHE_DIR, exist_ok=True) # ─── Logger ────────────────────────────────────────────────────────── _LOG_FORMAT = ( "{time:YYYY-MM-DD HH:mm:ss} | " "{level: <8} | " "{name}:{function}:{line} - " "{message}" ) logger.remove() logger.add(sys.stderr, format=_LOG_FORMAT, level="INFO") def enable_debug() -> None: """Switch logger to DEBUG level.""" logger.remove() logger.add(sys.stderr, format=_LOG_FORMAT, level="DEBUG")