import { getItem, getSeriesSeasons, getSeriesEpisodes } from '../embyApi.js'; import { createParty } from '../party.js'; import { navigate } from '../router.js'; import { escapeHtml } from '../tiles.js'; export async function renderSeries(root, params) { const seriesId = params.id; root.innerHTML = '
Chargement...
'; let series; let seasons; try { [series, seasons] = await Promise.all([getItem(seriesId), getSeriesSeasons(seriesId)]); } catch (err) { root.innerHTML = 'Impossible de charger cette série.
'; return; } root.innerHTML = `${escapeHtml(series.overview)}
` : ''} Voir sur EmbyChargement...
Aucune saison trouvée.
'; return; } const tabsEl = root.querySelector('#seasonTabs'); tabsEl.innerHTML = seasons .map((s, i) => ``) .join(''); tabsEl.querySelectorAll('.tab').forEach((tab) => { tab.addEventListener('click', () => { if (tab.classList.contains('active')) return; tabsEl.querySelectorAll('.tab').forEach((t) => t.classList.remove('active')); tab.classList.add('active'); loadEpisodes(root, seriesId, tab.dataset.seasonId); }); }); loadEpisodes(root, seriesId, seasons[0].id); } async function loadEpisodes(root, seriesId, seasonId) { const listEl = root.querySelector('#episodeList'); listEl.innerHTML = 'Chargement...
'; let episodes; try { episodes = await getSeriesEpisodes(seriesId, seasonId); } catch (err) { listEl.innerHTML = 'Impossible de charger les épisodes.
'; return; } if (!episodes.length) { listEl.innerHTML = 'Aucun épisode dans cette saison.
'; return; } // Starting a party from any episode here queues the rest of the series // from that point on server-side (see server/src/index.js) - the host can // then use "Épisode suivant" in the player instead of restarting per episode. listEl.innerHTML = episodes.map((ep) => `${escapeHtml(ep.overview || '')}