Skip to content

feat(playback): add next-episode autoplay setting - #2201

Merged
4gray merged 1 commit into
masterfrom
agent/series-autoplay
Nov 12, 2026
Merged

4gray merged 1 commit into
masterfrom
agent/series-autoplay

Conversation

@4gray

@4gray 4gray commented Nov 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add a default-on Automatically play the next episode switch in Playback settings for Xtream and Stalker.
  • When the switch is off, the built-in player stops at the end of the current episode and the next episode can still be started manually.
  • Show the Up Next countdown only when playback can advance automatically within the current season.

Testing

  • Unit tests for settings, playback, Xtream and Stalker, including a focused test for the season boundary.
  • Chromium E2E suites for Xtream series playback and Stalker. The Xtream regression covers the default, persistence across reload, stopping at episode end and manually starting the next episode.
  • Lint, TypeScript checks, locale validation and release-note validation.

Closes #2197

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Codex Review Summary: ✅ Completed

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-11-12T06:34:35.095186Z 1eb5730 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@greptile-apps

greptile-apps Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable issues were found.

Summary

Adds default-on next-episode autoplay for Xtream and Stalker.

  • Viewers can choose whether Xtream and Stalker episodes play automatically.
  • The Up Next countdown appears only when an episode will start automatically.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Saved autoplay setting] --> B[Series navigation]
  B --> C{Episode ends}
  C -->|Enabled and next episode in season| D[Play next episode]
  C -->|Disabled or season ends| E[Stop]
  B --> F[Show countdown only when automatic playback can advance]
  G[Manual episode selection] --> D
Loading

Reviews (1) · Last reviewed commit: "feat(playback): add next-episode autopla..." · Reviewed by Greptile

@codecov

codecov Bot commented Nov 12, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 6.12kB (0.04%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
iptvnator-renderer 17.33MB 6.12kB (0.04%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: iptvnator-renderer

Assets Changed:

Asset Name Size Change Total Size Change (%)
chunk-BcRx97kA.js (New) 2.65MB 2.65MB 100.0% 🚀
chunk-D99CDp_x.js (New) 858.67kB 858.67kB 100.0% 🚀
chunk-DFg4cnHw.js (New) 348.03kB 348.03kB 100.0% 🚀
chunk-DfAd1Dwq.js (New) 278.71kB 278.71kB 100.0% 🚀
main-C3KXPR4U.js (New) 276.41kB 276.41kB 100.0% 🚀
assets/i18n/el.json 308 bytes 242.33kB 0.13%
assets/i18n/uk.json 302 bytes 228.89kB 0.13%
assets/i18n/ru.json 288 bytes 223.8kB 0.13%
chunk-CORtNOTK.js (New) 221.53kB 221.53kB 100.0% 🚀
assets/i18n/by.json 307 bytes 221.33kB 0.14%
chunk-CJ50O-GG.js (New) 208.17kB 208.17kB 100.0% 🚀
assets/i18n/ar.json 263 bytes 196.96kB 0.13%
assets/i18n/ary.json 269 bytes 193.34kB 0.14%
assets/i18n/ja.json 250 bytes 189.64kB 0.13%
chunk-CYxwWUoX.js (New) 187.34kB 187.34kB 100.0% 🚀
assets/i18n/hu.json 255 bytes 184.77kB 0.14%
assets/i18n/ko.json 228 bytes 174.62kB 0.13%
assets/i18n/fr.json 215 bytes 172.67kB 0.12%
chunk-DEg4hdDu.js (New) 169.79kB 169.79kB 100.0% 🚀
assets/i18n/pt-BR.json 228 bytes 167.88kB 0.14%
assets/i18n/de.json 229 bytes 167.76kB 0.14%
assets/i18n/es.json 243 bytes 167.1kB 0.15%
assets/i18n/pt-PT.json 224 bytes 167.0kB 0.13%
chunk-D97NHE96.js (New) 165.59kB 165.59kB 100.0% 🚀
assets/i18n/pl.json 219 bytes 165.26kB 0.13%
assets/i18n/tr.json 199 bytes 164.48kB 0.12%
assets/i18n/it.json 233 bytes 164.02kB 0.14%
assets/i18n/nl.json 227 bytes 162.53kB 0.14%
chunk-BWRwYexA.js (New) 159.95kB 159.95kB 100.0% 🚀
assets/i18n/en.json 211 bytes 150.73kB 0.14%
assets/i18n/zhtw.json 178 bytes 150.64kB 0.12%
chunk-BaFE-ATR.js (New) 149.56kB 149.56kB 100.0% 🚀
assets/i18n/zh.json 178 bytes 148.35kB 0.12%
chunk-AliUopjS.js (New) 145.13kB 145.13kB 100.0% 🚀
chunk-Cao7k6ls.js (New) 90.44kB 90.44kB 100.0% 🚀
chunk-CzdjKBQr.js (New) 73.5kB 73.5kB 100.0% 🚀
chunk-Bj5JCP4f.js (New) 70.24kB 70.24kB 100.0% 🚀
chunk-DIfYaGEX.js (New) 64.22kB 64.22kB 100.0% 🚀
chunk-DCnlM6HB.js (New) 59.82kB 59.82kB 100.0% 🚀
chunk-pyViD2OT.js (New) 55.89kB 55.89kB 100.0% 🚀
chunk-BWzbmrIu.js (New) 54.16kB 54.16kB 100.0% 🚀
chunk-CCW4nDE4.js (New) 52.44kB 52.44kB 100.0% 🚀
chunk-M9i1PlQE.js (New) 49.7kB 49.7kB 100.0% 🚀
chunk-0PHQWkCI.js (New) 46.19kB 46.19kB 100.0% 🚀
chunk-D8FGKUcJ.js (New) 43.17kB 43.17kB 100.0% 🚀
chunk-D_rp1ltB.js (New) 40.16kB 40.16kB 100.0% 🚀
chunk-DAfn8dy6.js (New) 35.06kB 35.06kB 100.0% 🚀
chunk-BZD-44q0.js (New) 34.73kB 34.73kB 100.0% 🚀
chunk-D4jI5vsa.js (New) 30.19kB 30.19kB 100.0% 🚀
chunk-D4RNYFI5.js (New) 30.11kB 30.11kB 100.0% 🚀
chunk-ChUEz9UW.js (New) 25.17kB 25.17kB 100.0% 🚀
chunk-Ct3q0U1B.js (New) 22.32kB 22.32kB 100.0% 🚀
chunk-BBCqg-_F.js (New) 21.5kB 21.5kB 100.0% 🚀
chunk-Dcip5kbG.js (New) 19.91kB 19.91kB 100.0% 🚀
chunk-B07LPn1X.js (New) 19.83kB 19.83kB 100.0% 🚀
chunk-1V7fh3lD.js (New) 18.05kB 18.05kB 100.0% 🚀
chunk-BBTD8DLY.js (New) 17.9kB 17.9kB 100.0% 🚀
chunk-DlekBktn.js (New) 16.89kB 16.89kB 100.0% 🚀
chunk-D094yRDT.js (New) 15.62kB 15.62kB 100.0% 🚀
chunk-Cu-WhlT9.js (New) 15.39kB 15.39kB 100.0% 🚀
chunk-mVzuU50W.js (New) 13.29kB 13.29kB 100.0% 🚀
chunk-hORVOX8G.js (New) 12.53kB 12.53kB 100.0% 🚀
chunk-Cx07ti5R.js (New) 12.11kB 12.11kB 100.0% 🚀
chunk-4_-UhznZ.js (New) 11.04kB 11.04kB 100.0% 🚀
chunk-Bz6-SSDQ.js (New) 10.65kB 10.65kB 100.0% 🚀
chunk-CUIF-805.js (New) 9.52kB 9.52kB 100.0% 🚀
chunk-MDh5F0QM.js (New) 8.9kB 8.9kB 100.0% 🚀
chunk-BMnHZkZt.js (New) 8.84kB 8.84kB 100.0% 🚀
chunk-CIGFRwVT.js (New) 7.37kB 7.37kB 100.0% 🚀
chunk-Db8-vJvF.js (New) 5.66kB 5.66kB 100.0% 🚀
chunk-CoBRiCp4.js (New) 5.46kB 5.46kB 100.0% 🚀
chunk-CR9FLo7S.js (New) 5.15kB 5.15kB 100.0% 🚀
chunk-B9PEgest.js (New) 4.89kB 4.89kB 100.0% 🚀
chunk-2Asie7lA.js (New) 4.71kB 4.71kB 100.0% 🚀
chunk-clP2ut6E.js (New) 4.44kB 4.44kB 100.0% 🚀
chunk-BAo2T5cH.js (New) 4.44kB 4.44kB 100.0% 🚀
chunk-Ctwb6MIr.js (New) 3.6kB 3.6kB 100.0% 🚀
chunk-Msr6lKnt.js (New) 2.91kB 2.91kB 100.0% 🚀
chunk-MeJie2Mu.js (New) 2.88kB 2.88kB 100.0% 🚀
chunk-iLr09j0I.js (New) 2.85kB 2.85kB 100.0% 🚀
chunk-DTUcmD15.js (New) 2.28kB 2.28kB 100.0% 🚀
chunk-DbFCmlxn.js (New) 2.27kB 2.27kB 100.0% 🚀
chunk-CvRsIcln.js (New) 2.08kB 2.08kB 100.0% 🚀
chunk-B9HCNoSy.js (New) 2.02kB 2.02kB 100.0% 🚀
chunk-BJ3PMOGU.js (New) 1.83kB 1.83kB 100.0% 🚀
chunk-BtZO8uIh.js (New) 1.83kB 1.83kB 100.0% 🚀
chunk-4To9M7YF.js (New) 1.73kB 1.73kB 100.0% 🚀
chunk-B9lKqtM5.js (New) 1.71kB 1.71kB 100.0% 🚀
chunk-BRBF8B1U.js (New) 1.7kB 1.7kB 100.0% 🚀
chunk-CIX5qYIu.js (New) 1.7kB 1.7kB 100.0% 🚀
chunk-C7FLJyk_.js (New) 1.7kB 1.7kB 100.0% 🚀
chunk-DWw3fxms.js (New) 1.7kB 1.7kB 100.0% 🚀
chunk-Bhz0rFh9.js (New) 1.54kB 1.54kB 100.0% 🚀
chunk--I4ETF2F.js (New) 1.54kB 1.54kB 100.0% 🚀
chunk-DsLfaTFc.js (New) 1.53kB 1.53kB 100.0% 🚀
chunk-CcD0Ct_r.js (New) 1.53kB 1.53kB 100.0% 🚀
chunk-CU4xyJmX.js (New) 1.46kB 1.46kB 100.0% 🚀
chunk-DRHmVUDm.js (New) 1.46kB 1.46kB 100.0% 🚀
chunk-Ki9AZ-sA.js (New) 1.36kB 1.36kB 100.0% 🚀
chunk-owMURpDG.js (New) 1.07kB 1.07kB 100.0% 🚀
chunk-Bi40YCHu.js (New) 759 bytes 759 bytes 100.0% 🚀
chunk-oyAPRl1i.js (New) 758 bytes 758 bytes 100.0% 🚀
chunk-Bgtl47CD.js (New) 637 bytes 637 bytes 100.0% 🚀
chunk-Co-00NBJ.js (New) 588 bytes 588 bytes 100.0% 🚀
chunk-AG48Qa4E.js (New) 477 bytes 477 bytes 100.0% 🚀
chunk-D8TlqtvF.js (New) 443 bytes 443 bytes 100.0% 🚀
chunk-D1HyuuJY.js (New) 437 bytes 437 bytes 100.0% 🚀
chunk-DymRR3pM.js (New) 437 bytes 437 bytes 100.0% 🚀
chunk-BPTlgBux.js (New) 383 bytes 383 bytes 100.0% 🚀
chunk-BpETJiG9.js (New) 242 bytes 242 bytes 100.0% 🚀
chunk-nKKb_NYE.js (New) 238 bytes 238 bytes 100.0% 🚀
chunk-BnUBBFRr.js (Deleted) -2.65MB 0 bytes -100.0% 🗑️
chunk-BW5hOi3l.js (Deleted) -858.67kB 0 bytes -100.0% 🗑️
chunk-Dl_D0ik6.js (Deleted) -347.47kB 0 bytes -100.0% 🗑️
chunk-6IlaK-xz.js (Deleted) -278.65kB 0 bytes -100.0% 🗑️
main-O6PMJXDY.js (Deleted) -276.41kB 0 bytes -100.0% 🗑️
chunk-Cd9lllT0.js (Deleted) -221.53kB 0 bytes -100.0% 🗑️
chunk-CWX1jykb.js (Deleted) -208.08kB 0 bytes -100.0% 🗑️
chunk-CxP-SYRe.js (Deleted) -187.34kB 0 bytes -100.0% 🗑️
chunk-CoP1exR2.js (Deleted) -169.79kB 0 bytes -100.0% 🗑️
chunk-pS5q7ZE1.js (Deleted) -165.59kB 0 bytes -100.0% 🗑️
chunk-XEd4ovVA.js (Deleted) -159.95kB 0 bytes -100.0% 🗑️
chunk-Cd9u6Tik.js (Deleted) -149.56kB 0 bytes -100.0% 🗑️
chunk-3RrCS7Vn.js (Deleted) -145.13kB 0 bytes -100.0% 🗑️
chunk-ovPpVudc.js (Deleted) -90.38kB 0 bytes -100.0% 🗑️
chunk-Drmt8Srj.js (Deleted) -73.5kB 0 bytes -100.0% 🗑️
chunk-DrF3CT5g.js (Deleted) -70.24kB 0 bytes -100.0% 🗑️
chunk-DEQ5a6j9.js (Deleted) -64.22kB 0 bytes -100.0% 🗑️
chunk-BKUJNRNE.js (Deleted) -59.82kB 0 bytes -100.0% 🗑️
chunk-2sGgSAON.js (Deleted) -55.9kB 0 bytes -100.0% 🗑️
chunk-Bw_hUNLc.js (Deleted) -54.16kB 0 bytes -100.0% 🗑️
chunk-D9snwVsE.js (Deleted) -52.44kB 0 bytes -100.0% 🗑️
chunk-DGOXZ4wZ.js (Deleted) -49.7kB 0 bytes -100.0% 🗑️
chunk-CglHwyGA.js (Deleted) -46.19kB 0 bytes -100.0% 🗑️
chunk-CUI-KSih.js (Deleted) -43.17kB 0 bytes -100.0% 🗑️
chunk-CYjHUNlt.js (Deleted) -40.16kB 0 bytes -100.0% 🗑️
chunk-BaXyKZDA.js (Deleted) -35.06kB 0 bytes -100.0% 🗑️
chunk-aG2nwb7m.js (Deleted) -34.73kB 0 bytes -100.0% 🗑️
chunk-D9G9uUP_.js (Deleted) -30.19kB 0 bytes -100.0% 🗑️
chunk-BBpe49qs.js (Deleted) -30.11kB 0 bytes -100.0% 🗑️
chunk-C0Yr1T-o.js (Deleted) -25.17kB 0 bytes -100.0% 🗑️
chunk-DZqA5ed0.js (Deleted) -22.32kB 0 bytes -100.0% 🗑️
chunk-fJ8NNZ_n.js (Deleted) -21.5kB 0 bytes -100.0% 🗑️
chunk-BL4cYTE4.js (Deleted) -19.83kB 0 bytes -100.0% 🗑️
chunk-64dTcQbI.js (Deleted) -19.73kB 0 bytes -100.0% 🗑️
chunk-DuA0oLms.js (Deleted) -18.05kB 0 bytes -100.0% 🗑️
chunk-qB16O0Xg.js (Deleted) -17.9kB 0 bytes -100.0% 🗑️
chunk-CUbYtC_T.js (Deleted) -16.89kB 0 bytes -100.0% 🗑️
chunk-Bvimqns6.js (Deleted) -15.62kB 0 bytes -100.0% 🗑️
chunk-DGtH3Xc7.js (Deleted) -15.39kB 0 bytes -100.0% 🗑️
chunk-BpIyE_iW.js (Deleted) -13.29kB 0 bytes -100.0% 🗑️
chunk-CFdVTdUZ.js (Deleted) -12.53kB 0 bytes -100.0% 🗑️
chunk-DlN6d4Lg.js (Deleted) -12.11kB 0 bytes -100.0% 🗑️
chunk-DN_vTQnR.js (Deleted) -11.04kB 0 bytes -100.0% 🗑️
chunk-DeaUmWOc.js (Deleted) -10.65kB 0 bytes -100.0% 🗑️
chunk-OPeNrjTk.js (Deleted) -9.52kB 0 bytes -100.0% 🗑️
chunk-CSeQGNnh.js (Deleted) -8.9kB 0 bytes -100.0% 🗑️
chunk-DiiZv8qs.js (Deleted) -8.84kB 0 bytes -100.0% 🗑️
chunk-mbk6rsnw.js (Deleted) -7.37kB 0 bytes -100.0% 🗑️
chunk-C527De6h.js (Deleted) -5.66kB 0 bytes -100.0% 🗑️
chunk-q83Haa-k.js (Deleted) -5.46kB 0 bytes -100.0% 🗑️
chunk-DRhBMzm6.js (Deleted) -5.15kB 0 bytes -100.0% 🗑️
chunk-Bxma_D-8.js (Deleted) -4.89kB 0 bytes -100.0% 🗑️
chunk-D62QW0XN.js (Deleted) -4.71kB 0 bytes -100.0% 🗑️
chunk-Dp16N1zM.js (Deleted) -4.44kB 0 bytes -100.0% 🗑️
chunk-DmDLWFH5.js (Deleted) -4.44kB 0 bytes -100.0% 🗑️
chunk-B75CX83_.js (Deleted) -3.6kB 0 bytes -100.0% 🗑️
chunk-DxlMUp0f.js (Deleted) -2.88kB 0 bytes -100.0% 🗑️
chunk-DSWInl5n.js (Deleted) -2.87kB 0 bytes -100.0% 🗑️
chunk-aCuTKUPC.js (Deleted) -2.85kB 0 bytes -100.0% 🗑️
chunk-Cu4TjgOp.js (Deleted) -2.28kB 0 bytes -100.0% 🗑️
chunk-BIxPpEYz.js (Deleted) -2.27kB 0 bytes -100.0% 🗑️
chunk-BfrsaUGR.js (Deleted) -2.08kB 0 bytes -100.0% 🗑️
chunk-Pos3s4aj.js (Deleted) -2.02kB 0 bytes -100.0% 🗑️
chunk-CLTRBoiS.js (Deleted) -1.83kB 0 bytes -100.0% 🗑️
chunk-D4MG7NNg.js (Deleted) -1.83kB 0 bytes -100.0% 🗑️
chunk-Da0PkNqz.js (Deleted) -1.73kB 0 bytes -100.0% 🗑️
chunk-eUQHHdof.js (Deleted) -1.71kB 0 bytes -100.0% 🗑️
chunk-D48df5J3.js (Deleted) -1.7kB 0 bytes -100.0% 🗑️
chunk-S_RUcTCE.js (Deleted) -1.7kB 0 bytes -100.0% 🗑️
chunk-DuvDcJTf.js (Deleted) -1.7kB 0 bytes -100.0% 🗑️
chunk-cr1nZm3K.js (Deleted) -1.7kB 0 bytes -100.0% 🗑️
chunk-CcbyUlKc.js (Deleted) -1.54kB 0 bytes -100.0% 🗑️
chunk-DwPFYTUs.js (Deleted) -1.54kB 0 bytes -100.0% 🗑️
chunk-745u8Y56.js (Deleted) -1.53kB 0 bytes -100.0% 🗑️
chunk-Dz-J2QKc.js (Deleted) -1.53kB 0 bytes -100.0% 🗑️
chunk-tEGuKezp.js (Deleted) -1.46kB 0 bytes -100.0% 🗑️
chunk-CbU3uvHF.js (Deleted) -1.46kB 0 bytes -100.0% 🗑️
chunk-Hzok8V7f.js (Deleted) -1.36kB 0 bytes -100.0% 🗑️
chunk-B56BDp9V.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
chunk-BNS3IsfU.js (Deleted) -759 bytes 0 bytes -100.0% 🗑️
chunk-5cOXRh9i.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
chunk-CK4i8zdd.js (Deleted) -637 bytes 0 bytes -100.0% 🗑️
chunk-3VrwCl1h.js (Deleted) -588 bytes 0 bytes -100.0% 🗑️
chunk-CZ1XM7sH.js (Deleted) -477 bytes 0 bytes -100.0% 🗑️
chunk-C0acYAUd.js (Deleted) -443 bytes 0 bytes -100.0% 🗑️
chunk-8o7KB-bp.js (Deleted) -437 bytes 0 bytes -100.0% 🗑️
chunk-DVvYdQCd.js (Deleted) -437 bytes 0 bytes -100.0% 🗑️
chunk-zF_uoTvO.js (Deleted) -383 bytes 0 bytes -100.0% 🗑️
chunk-DdD9RuOe.js (Deleted) -242 bytes 0 bytes -100.0% 🗑️
chunk-DKk4WLW0.js (Deleted) -238 bytes 0 bytes -100.0% 🗑️

@codecov

codecov Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 84.61538% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.60%. Comparing base (07d14e8) to head (1eb5730).
⚠️ Report is 7 commits behind head on master.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
...alker-series-view/stalker-series-view.component.ts 66.66% 0 Missing and 1 partial ⚠️
.../serial-details/serial-details-playback.service.ts 75.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2201      +/-   ##
==========================================
- Coverage   81.60%   81.60%   -0.01%     
==========================================
  Files        1884     1884              
  Lines       98518    98527       +9     
  Branches    23705    23708       +3     
==========================================
+ Hits        80392    80399       +7     
  Misses      11103    11103              
- Partials     7023     7025       +2     
Flag Coverage Δ
unit 81.60% <84.61%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

@4gray
4gray merged commit 9960c48 into master Nov 12, 2026
41 of 42 checks passed
@4gray
4gray deleted the agent/series-autoplay branch November 12, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Enable/Disable the Auto Next Episode option

1 participant