This commit is contained in:
2026-01-11 18:56:26 -08:00
parent e70db8d8a6
commit 6076ea307b
7 changed files with 773 additions and 1476 deletions

View File

@@ -3,6 +3,7 @@ from __future__ import annotations
from typing import Any, Dict, List, Optional, Set
from .base import API, ApiError
from SYS.logger import debug
DEFAULT_BASE_URL = "https://tidal-api.binimum.org"
@@ -241,21 +242,24 @@ class Tidal(API):
# 1. Fetch info (metadata) - fetch raw to ensure all fields are available for merging
info_resp = self._get_json("info/", params={"id": track_int})
debug(f"[API.Tidal] info_resp (len={len(str(info_resp))}): {info_resp}")
info_data = info_resp.get("data") if isinstance(info_resp, dict) else info_resp
if not isinstance(info_data, dict) or "id" not in info_data:
info_data = info_resp if isinstance(info_resp, dict) and "id" in info_resp else {}
# 2. Fetch track (manifest/bit depth)
track_resp = self.track(track_id)
debug(f"[API.Tidal] track_resp (len={len(str(track_resp))}): {track_resp}")
# Note: track() method in this class currently returns raw JSON, so we handle it similarly.
track_data = track_resp.get("data") if isinstance(track_resp, dict) else track_resp
if not isinstance(track_data, dict) or "id" not in track_data:
track_data = track_resp if isinstance(track_resp, dict) and "id" in track_resp else {}
if not isinstance(track_data, dict):
track_data = track_resp if isinstance(track_resp, dict) else {}
# 3. Fetch lyrics
lyrics_data = {}
try:
lyr_resp = self.lyrics(track_id)
debug(f"[API.Tidal] lyrics_resp (len={len(str(lyr_resp))}): {lyr_resp}")
lyrics_data = lyr_resp.get("lyrics") or lyr_resp if isinstance(lyr_resp, dict) else {}
except Exception:
pass
@@ -267,18 +271,24 @@ class Tidal(API):
if isinstance(track_data, dict):
merged_md.update(track_data)
debug(f"[API.Tidal] merged_md keys: {list(merged_md.keys())}")
# Derived tags and normalized/parsed info
tags = build_track_tags(merged_md)
debug(f"[API.Tidal] generated tags: {tags}")
parsed_info = parse_track_item(merged_md)
# Structure for return
return {
res = {
"metadata": merged_md,
"parsed": parsed_info,
"tags": list(tags),
"lyrics": lyrics_data,
}
debug(f"[API.Tidal] returning full_track_metadata keys: {list(res.keys())}")
return res
# Legacy alias for TidalApiClient
TidalApiClient = Tidal
HifiApiClient = Tidal