Add search language availability badges

This commit is contained in:
Codex
2026-08-09 12:08:10 +02:00
parent bc7270d7c1
commit f79cbd9b7d
5 changed files with 63 additions and 11 deletions
+43 -1
View File
@@ -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,