feat (ui): toevoegen van banner en series info - 01

This commit is contained in:
kodi
2026-03-09 09:32:28 +01:00
parent 1e946f675b
commit d3cf97d56d
3 changed files with 155 additions and 9 deletions
+24 -6
View File
@@ -4,6 +4,7 @@
const state = {
sessionId: initSessionId(),
selectedSeries: null,
selectedSeriesSummary: null,
episodes: [],
selectedEpisodes: [],
selectedFiles: [],
@@ -117,8 +118,12 @@
}
function buildTvdbUrl(item) {
const summary = state.selectedSeriesSummary || {};
const summaryUrl = (summary.tvdb_url || "").toString().trim();
if (summaryUrl) return summaryUrl;
const raw = item.raw || {};
const slug = (raw.slug || "").toString().trim();
const slug = (summary.slug || raw.slug || "").toString().trim();
if (slug) return `https://www.thetvdb.com/series/${encodeURIComponent(slug)}`;
const tvdbId = (raw.tvdb_id || item.id || "").toString().trim();
@@ -133,8 +138,9 @@
return;
}
const raw = item.raw || {};
const imageUrl = (raw.image_url || "").toString().trim();
const overview = (raw.overview || "").toString().trim();
const summary = state.selectedSeriesSummary || {};
const imageUrl = (summary.banner_url || summary.poster_url || raw.image_url || "").toString().trim();
const overview = (summary.overview || raw.overview || "").toString().trim();
const tvdbUrl = buildTvdbUrl(item);
if (imageUrl) {
@@ -145,9 +151,9 @@
el.seriesPoster.classList.add("hidden");
}
el.seriesFirstAired.textContent = fallbackText(raw.first_air_time);
el.seriesNetwork.textContent = fallbackText(raw.network);
el.seriesStatus.textContent = fallbackText(raw.status);
el.seriesFirstAired.textContent = fallbackText(summary.first_aired || raw.first_air_time);
el.seriesNetwork.textContent = fallbackText(summary.network || raw.network);
el.seriesStatus.textContent = fallbackText(summary.status || raw.status);
el.seriesOverview.textContent = overview || "No overview available.";
if (tvdbUrl) {
@@ -161,6 +167,11 @@
el.seriesDetails.classList.remove("hidden");
}
async function loadSeriesSummary(seriesId) {
const data = await api(`/api/tvdb/series/${encodeURIComponent(seriesId)}/summary`);
state.selectedSeriesSummary = data || null;
}
function updateMeta() {
const epCount = state.selectedEpisodes.length;
const fileCount = state.selectedFiles.length;
@@ -262,8 +273,15 @@
const right = document.createElement("div");
right.appendChild(makeBtn("Select", async () => {
state.selectedSeries = item;
state.selectedSeriesSummary = null;
el.seriesInfo.textContent = `Selected: ${item.display_name || item.name}`;
renderSelectedSeriesDetails();
try {
await loadSeriesSummary(item.id);
renderSelectedSeriesDetails();
} catch (_err) {
// Keep UI responsive with search payload fallback if summary lookup fails.
}
await loadEpisodes();
}));
li.appendChild(left);