Improve library identification and track inspection
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user