diff --git a/internal/features/playback/handler.go b/internal/features/playback/handler.go index 5281e66..bfc93db 100644 --- a/internal/features/playback/handler.go +++ b/internal/features/playback/handler.go @@ -93,6 +93,7 @@ func (h *Handler) HandleWatchPage(w http.ResponseWriter, r *http.Request) { MalID: data.MalID, Title: data.Title, CurrentEpisode: data.CurrentEpisode, + TotalEpisodes: anime.Episodes, StartTimeSeconds: data.StartTimeSeconds, CurrentStatus: data.CurrentStatus, InitialMode: data.InitialMode, diff --git a/internal/templates/watch.templ b/internal/templates/watch.templ index 5c2b303..a9398d5 100644 --- a/internal/templates/watch.templ +++ b/internal/templates/watch.templ @@ -14,6 +14,7 @@ type WatchPageData struct { MalID int Title string CurrentEpisode string + TotalEpisodes int StartTimeSeconds float64 CurrentStatus string InitialMode string @@ -196,6 +197,7 @@ templ VideoPlayer(data WatchPageData) {
{ const streamURL = container.getAttribute('data-stream-url') || '/watch/proxy/stream' const currentEpisode = container.getAttribute('data-current-episode') || '1' const malID = Number.parseInt(container.getAttribute('data-mal-id') || '', 10) + const totalEpisodes = Number.parseInt(container.getAttribute('data-total-episodes') || '0', 10) const startTimeSeconds = Number.parseFloat(container.getAttribute('data-start-time-seconds') || '0') const modeSources = JSON.parse(container.getAttribute('data-mode-sources') || '{}') const availableModes = JSON.parse(container.getAttribute('data-available-modes') || '[]') @@ -603,6 +604,10 @@ const initPlayer = (): void => { const currentEpisode = Number.parseInt(pathParts[3], 10) if (Number.isNaN(currentEpisode)) return + if (Number.isInteger(totalEpisodes) && totalEpisodes > 0 && currentEpisode >= totalEpisodes) { + return + } + const nextEpisode = currentEpisode + 1 markEpisodeTransition(nextEpisode) const nextUrl = `/watch/${animeID}/${nextEpisode}`