Add search language availability badges
This commit is contained in:
@@ -879,6 +879,43 @@ def cache_thumbnail_image(show_id, image_url):
|
||||
return final_path.name
|
||||
|
||||
|
||||
def episode_language_summary(show_id, provider):
|
||||
summary = {
|
||||
"sub": False,
|
||||
"dub": False,
|
||||
"sub_count": 0,
|
||||
"dub_count": 0,
|
||||
"total": 0,
|
||||
}
|
||||
try:
|
||||
rows = provider_bridge.episodes(show_id, provider=provider)
|
||||
except Exception as exc:
|
||||
debug_log("search.episode_language_summary_failed", show_id=show_id, provider=provider, error=exc)
|
||||
return summary
|
||||
sub_values = set()
|
||||
dub_values = set()
|
||||
all_values = set()
|
||||
for row in rows:
|
||||
value = str(row.get("number") or "").strip()
|
||||
if value:
|
||||
all_values.add(value)
|
||||
langs = {str(lang or "").strip().lower() for lang in row.get("langs") or []}
|
||||
if not langs:
|
||||
langs.add("sub")
|
||||
if "hsub" in langs:
|
||||
langs.add("sub")
|
||||
if "sub" in langs and value:
|
||||
sub_values.add(value)
|
||||
if "dub" in langs and value:
|
||||
dub_values.add(value)
|
||||
summary["sub"] = bool(sub_values)
|
||||
summary["dub"] = bool(dub_values)
|
||||
summary["sub_count"] = len(sub_values)
|
||||
summary["dub_count"] = len(dub_values)
|
||||
summary["total"] = len(all_values)
|
||||
return summary
|
||||
|
||||
|
||||
def search_anime(query, mode):
|
||||
runtime = ensure_runtime()
|
||||
provider = str((runtime.get("config") or {}).get("provider") or "anikoto").strip().lower()
|
||||
@@ -890,13 +927,18 @@ def search_anime(query, mode):
|
||||
show_id = str(show.get("id") or "").strip()
|
||||
if not show_id or not title:
|
||||
continue
|
||||
language_summary = episode_language_summary(show_id, show.get("provider") or provider)
|
||||
alternative_titles = extract_anidb_alternative_titles_for_title(title, primary_title=title)
|
||||
index = len(results) + 1
|
||||
results.append(
|
||||
{
|
||||
"id": show_id,
|
||||
"title": title,
|
||||
"episodes": "",
|
||||
"episodes": language_summary["total"],
|
||||
"has_sub": language_summary["sub"],
|
||||
"has_dub": language_summary["dub"],
|
||||
"sub_episodes": language_summary["sub_count"],
|
||||
"dub_episodes": language_summary["dub_count"],
|
||||
"index": index,
|
||||
"query": query,
|
||||
"mode": mode,
|
||||
|
||||
Reference in New Issue
Block a user