"""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")