Improve library identification and track inspection

This commit is contained in:
scoped
2026-05-15 17:04:26 +00:00
parent 1ffb68e74c
commit 79308a84b9
6 changed files with 530 additions and 51 deletions

View File

@@ -117,6 +117,88 @@ def movie_metadata(config: dict, title: str, year: int | None = None) -> dict:
}
def search_metadata(config: dict, library: str, query: str, year: int | None = None) -> list[dict]:
media_type = "tv" if library == "tv" else "movie"
if not tmdb_available(config) or not query:
return []
params = {"query": query}
if year and media_type == "movie":
params["year"] = year
elif year:
params["first_air_date_year"] = year
payload = tmdb_get(config, f"/search/{media_type}", params)
results = payload.get("results") or []
normalized = []
for item in results[:12]:
title = item.get("name") if media_type == "tv" else item.get("title")
date = item.get("first_air_date") if media_type == "tv" else item.get("release_date")
normalized.append({
"tmdb_id": item.get("id"),
"library": library,
"title": title,
"date": date,
"year": int(date[:4]) if date and date[:4].isdigit() else None,
"overview": item.get("overview") or "",
"poster": poster_url(config, item.get("poster_path")),
"backdrop": poster_url(config, item.get("backdrop_path")),
"vote_average": item.get("vote_average"),
})
return normalized
def movie_metadata_by_id(config: dict, tmdb_id: int) -> dict:
payload = tmdb_get(config, f"/movie/{tmdb_id}")
return {
"source": "tmdb",
"manual": True,
"tmdb_id": payload.get("id"),
"title": payload.get("title") or payload.get("original_title") or "",
"overview": payload.get("overview") or "",
"poster": poster_url(config, payload.get("poster_path")),
"backdrop": poster_url(config, payload.get("backdrop_path")),
"release_date": payload.get("release_date"),
"vote_average": payload.get("vote_average"),
}
def series_metadata_by_id(config: dict, tmdb_id: int, seasons: set[int]) -> dict:
payload = tmdb_get(config, f"/tv/{tmdb_id}")
metadata = {
"source": "tmdb",
"manual": True,
"tmdb_id": payload.get("id"),
"title": payload.get("name") or payload.get("original_name") or "",
"overview": payload.get("overview") or "",
"poster": poster_url(config, payload.get("poster_path")),
"backdrop": poster_url(config, payload.get("backdrop_path")),
"first_air_date": payload.get("first_air_date"),
"vote_average": payload.get("vote_average"),
"seasons": {},
}
for season in sorted(seasons):
try:
season_payload = tmdb_get(config, f"/tv/{tmdb_id}/season/{season}")
except Exception:
continue
metadata["seasons"][str(season)] = {
"name": season_payload.get("name"),
"air_date": season_payload.get("air_date"),
"episode_count": len(season_payload.get("episodes") or []),
"episodes": [
{
"season": season,
"episode": episode.get("episode_number"),
"title": episode.get("name"),
"overview": episode.get("overview") or "",
"air_date": episode.get("air_date"),
"still": poster_url(config, episode.get("still_path")),
}
for episode in season_payload.get("episodes") or []
],
}
return metadata
def series_metadata(config: dict, title: str, seasons: set[int]) -> dict:
result = first_result(config, "tv", title)
if not result: