fix(playback): restart the Up next collapse delay for a new episode

- A card that stays mounted while its next episode changes gives the new
  item the full delay instead of the previous item's leftover.
- The setting description no longer promises credit-based timing: no
  current series path supplies chapters yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
4grayandClaude Opus 5.5 committed 2026-09-30 20:26:44 +02:00
1 parent b69b1e3d74
commit d0e366a368
22 files changed
+58 -20

No files matched your search

+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "شريط الحلقات التالية",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "في النوافذ العريضة، تثبيت مشغل المسلسل على اليسار وعرض الحلقات القادمة بجانبه.",
"PLAYER_UP_NEXT_CARD": "بطاقة «التالي»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "عرض الحلقة التالية في زاوية المشغل قبل انتهاء الحلقة بقليل أو عند بدء شارة النهاية.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "عرض الحلقة التالية في زاوية المشغل قبل انتهاء الحلقة بقليل.",
"FULLSCREEN_CHANNEL_PANEL": "قائمة القنوات والحلقات في وضع ملء الشاشة",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "ضع الماوس على الحافة اليسرى أو انقر عليها أو اضغط C في وضع ملء الشاشة لإظهار قائمة قنوات البث المباشر أو قائمة حلقات المسلسل والتبديل دون مغادرة وضع ملء الشاشة.",
"STREAM_FORMAT_DESCRIPTION": "اختر تنسيق البث الافتراضي (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "شريط الحلقات الجاية",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "فالنوافذ العريضة، حط مشغل السلسلة على اليسار وبيّن الحلقات الجاية بحداه.",
"PLAYER_UP_NEXT_CARD": "بطاقة «الجاي»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "بيّن الحلقة الجاية فالزاوية ديال المشغل شوية قبل ما تسالي الحلقة ولا ملي يبداو الجينيريك د الختام.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "بيّن الحلقة الجاية فالزاوية ديال المشغل شوية قبل ما تسالي الحلقة.",
"FULLSCREEN_CHANNEL_PANEL": "لائحة القنوات والحلقات فوضع ملء الشاشة",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "حط الفارة فالحافة اليسرى ولا كليكي عليها ولا ضغط C فوضع ملء الشاشة باش تبان لائحة القنوات ديال البث المباشر ولا لائحة الحلقات ديال المسلسل وتبدل بلا ما تخرج من ملء الشاشة.",
"STREAM_FORMAT_DESCRIPTION": "اختار صيغة البث الافتراضية (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Панэль наступных эпізодаў",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "На шырокіх вокнах замацоўваць прайгравальнік серыяла злева і паказваць наступныя эпізоды побач з ім.",
"PLAYER_UP_NEXT_CARD": "Картка «Далей»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Паказваць наступны эпізод у куце плэера незадоўга да канца эпізоду або з пачаткам фінальных тытраў.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Паказваць наступны эпізод у куце плэера незадоўга да канца эпізоду.",
"FULLSCREEN_CHANNEL_PANEL": "Спіс каналаў і серый у поўнаэкранным рэжыме",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Навядзіце мыш на левы край, націсніце на яго або націсніце C у поўнаэкранным рэжыме, каб паказаць спіс каналаў прамога эфіру або спіс серый серыяла і пераключыцца, не выходзячы з поўнаэкраннага рэжыму.",
"STREAM_FORMAT_DESCRIPTION": "Выберыце фармат патоку па змаўчанні (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Folgenleiste „Als Nächstes“",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Dockt den Serienplayer in breiten Fenstern links an und zeigt daneben die kommenden Folgen an.",
"PLAYER_UP_NEXT_CARD": "Karte „Als Nächstes“",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Zeigt die nächste Folge kurz vor dem Ende einer Folge oder zu Beginn des Abspanns in der Ecke des Players.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Zeigt die nächste Folge kurz vor dem Ende einer Folge in der Ecke des Players.",
"FULLSCREEN_CHANNEL_PANEL": "Sender- und Episodenliste im Vollbild",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Bewege die Maus im Vollbild an den linken Rand, klicke darauf oder drücke C, um die Senderliste eines Live-Streams oder die Episodenliste einer Serie einzublenden und zu wechseln, ohne das Vollbild zu verlassen.",
"STREAM_FORMAT_DESCRIPTION": "Auto bevorzugt HLS. Schlägt Live-TV in MPV, VLC oder Embedded MPV fehl, den Player stoppen, ts wählen, speichern und den Sender erneut öffnen. Webplayer können bei einem anfänglichen HLS-HTTP-Fehler einmal angebotenes TS versuchen.",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Λίστα επόμενων επεισοδίων",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Σε πλατιά παράθυρα, ο αναπαραγωγός σειρών αγκυρώνεται στα αριστερά και τα επόμενα επεισόδια εμφανίζονται δίπλα του.",
"PLAYER_UP_NEXT_CARD": "Κάρτα «Επόμενο»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Εμφάνιση του επόμενου επεισοδίου στη γωνία του προγράμματος αναπαραγωγής λίγο πριν το τέλος ή όταν ξεκινούν οι τίτλοι τέλους.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Εμφάνιση του επόμενου επεισοδίου στη γωνία του προγράμματος αναπαραγωγής λίγο πριν το τέλος ενός επεισοδίου.",
"FULLSCREEN_CHANNEL_PANEL": "Λίστα καναλιών και επεισοδίων σε πλήρη οθόνη",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Αφήστε το ποντίκι στην αριστερή άκρη, κάντε κλικ σε αυτήν ή πατήστε C σε πλήρη οθόνη για να εμφανίσετε τη λίστα καναλιών μιας ζωντανής ροής ή τη λίστα επεισοδίων μιας σειράς και να αλλάξετε χωρίς να βγείτε από την πλήρη οθόνη.",
"STREAM_FORMAT_DESCRIPTION": "Επιλογή προεπιλεγμένης μορφής ροής (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Up Next episode rail",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "On wide windows, dock the series player to the left and show the upcoming episodes beside it.",
"PLAYER_UP_NEXT_CARD": "\"Up next\" card",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Show the next episode in the player's corner shortly before an episode ends, or when its closing credits start.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Show the next episode in the player's corner shortly before an episode ends.",
"FULLSCREEN_CHANNEL_PANEL": "Channel and episode list in fullscreen",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Rest the mouse on the left edge, click it, or press C while in fullscreen to slide in the channel list of a live stream or the episode list of a series and switch without leaving fullscreen.",
"STREAM_FORMAT_DESCRIPTION": "Auto prefers HLS. If live playback fails in MPV, VLC or Embedded MPV, stop the player, select ts, save and reopen the channel. Web players can try advertised TS once after an initial HLS HTTP failure.",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Panel de próximos episodios",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "En ventanas anchas, ancla el reproductor de series a la izquierda y muestra los próximos episodios a su lado.",
"PLAYER_UP_NEXT_CARD": "Tarjeta «A continuación»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Muestra el siguiente episodio en la esquina del reproductor poco antes de que termine el episodio o cuando empiezan los créditos finales.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Muestra el siguiente episodio en la esquina del reproductor poco antes de que termine el episodio.",
"FULLSCREEN_CHANNEL_PANEL": "Lista de canales y episodios en pantalla completa",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Deja el ratón en el borde izquierdo, haz clic en él o pulsa C en pantalla completa para mostrar la lista de canales de una emisión en directo o la lista de episodios de una serie y cambiar sin salir de la pantalla completa.",
"STREAM_FORMAT_DESCRIPTION": "Selecciona el formato de transmision predeterminado (Xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Rail d'épisodes « À suivre »",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Sur les fenêtres larges, ancre le lecteur de séries à gauche et affiche les épisodes à venir à côté.",
"PLAYER_UP_NEXT_CARD": "Carte « À suivre »",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Afficher l'épisode suivant dans le coin du lecteur peu avant la fin d'un épisode ou au début du générique de fin.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Afficher l'épisode suivant dans le coin du lecteur peu avant la fin d'un épisode.",
"FULLSCREEN_CHANNEL_PANEL": "Liste des chaînes et des épisodes en plein écran",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Laissez la souris sur le bord gauche, cliquez dessus ou appuyez sur C en plein écran pour afficher la liste des chaînes d'un direct ou la liste des épisodes d'une série et changer sans quitter le plein écran.",
"STREAM_FORMAT_DESCRIPTION": "Sélectionnez le format de flux par défaut (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "„Következik” epizódsáv",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Széles ablakban a sorozatlejátszó balra kerül, mellette pedig megjelennek a következő epizódok.",
"PLAYER_UP_NEXT_CARD": "„Következik” kártya",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "A következő epizód megjelenítése a lejátszó sarkában röviddel az epizód vége előtt, vagy a stáblista kezdetekor.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "A következő epizód megjelenítése a lejátszó sarkában röviddel az epizód vége előtt.",
"FULLSCREEN_CHANNEL_PANEL": "Csatorna- és epizódlista teljes képernyőn",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Teljes képernyőn vidd az egeret a bal szélre, kattints rá, vagy nyomd meg a C billentyűt az élő adás csatornalistájának vagy a sorozat epizódlistájának megjelenítéséhez, és válts a teljes képernyő elhagyása nélkül.",
"STREAM_FORMAT_DESCRIPTION": "Az alapértelmezett adatfolyam-formátum kiválasztása (Xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Pannello \"A seguire\" con i prossimi episodi",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Nelle finestre ampie, ancora il lettore delle serie a sinistra e mostra i prossimi episodi accanto.",
"PLAYER_UP_NEXT_CARD": "Scheda \"A seguire\"",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Mostra l'episodio successivo nell'angolo del player poco prima della fine dell'episodio o all'inizio dei titoli di coda.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Mostra l'episodio successivo nell'angolo del player poco prima della fine dell'episodio.",
"FULLSCREEN_CHANNEL_PANEL": "Elenco canali ed episodi a schermo intero",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "A schermo intero, lascia il mouse sul bordo sinistro, fai clic su di esso o premi C per mostrare l'elenco dei canali di una diretta o l'elenco degli episodi di una serie e cambiare senza uscire dallo schermo intero.",
"STREAM_FORMAT_DESCRIPTION": "Seleziona il formato di streaming predefinito (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "「次に再生」エピソードレール",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "ウィンドウ幅が広い場合、シリーズのプレーヤーを左側に配置し、その横に次のエピソードの一覧を表示します。",
"PLAYER_UP_NEXT_CARD": "「次に再生」カード",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "エピソードの終了直前、またはエンドクレジットの開始時に、プレーヤーの隅に次のエピソードを表示します。",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "エピソードの終了直前に、プレーヤーの隅に次のエピソードを表示します。",
"FULLSCREEN_CHANNEL_PANEL": "全画面表示でのチャンネル・エピソードリスト",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "全画面表示中に左端にマウスを置く、クリックする、または C キーを押すと、ライブ配信のチャンネルリストやシリーズのエピソードリストが表示され、全画面表示のまま切り替えられます。",
"STREAM_FORMAT_DESCRIPTION": "デフォルトのストリーム形式を選択(Xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "다음 에피소드 레일",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "넓은 창에서 시리즈 플레이어를 왼쪽에 고정하고 그 옆에 다음 에피소드를 표시합니다.",
"PLAYER_UP_NEXT_CARD": "다음 에피소드 카드",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "에피소드가 끝나기 직전이나 엔딩 크레딧이 시작될 때 플레이어 모서리에 다음 에피소드를 표시합니다.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "에피소드가 끝나기 직전에 플레이어 모서리에 다음 에피소드를 표시합니다.",
"FULLSCREEN_CHANNEL_PANEL": "전체 화면에서 채널 및 에피소드 목록",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "전체 화면에서 마우스를 왼쪽 가장자리에 두거나 클릭하거나 C 키를 누르면 라이브 방송의 채널 목록이나 시리즈의 에피소드 목록이 나타나 전체 화면을 벗어나지 않고 전환할 수 있습니다.",
"STREAM_FORMAT_DESCRIPTION": "기본 스트림 형식 선택 (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Hierna-paneel met afleveringen",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Zet de seriespeler in brede vensters links vast en toont de komende afleveringen ernaast.",
"PLAYER_UP_NEXT_CARD": "'Hierna'-kaart",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Toon de volgende aflevering in de hoek van de speler kort voordat een aflevering eindigt of wanneer de aftiteling begint.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Toon de volgende aflevering in de hoek van de speler kort voordat een aflevering eindigt.",
"FULLSCREEN_CHANNEL_PANEL": "Zender- en afleveringenlijst in volledig scherm",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Laat de muis op de linkerrand rusten, klik erop of druk op C in volledig scherm om de zenderlijst van een live-uitzending of de afleveringenlijst van een serie te tonen en te wisselen zonder het volledige scherm te verlaten.",
"STREAM_FORMAT_DESCRIPTION": "Selecteer het standaard streamformaat (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Panel następnych odcinków",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "W szerokich oknach zadokuj odtwarzacz serialu po lewej stronie i pokaż obok kolejne odcinki.",
"PLAYER_UP_NEXT_CARD": "Karta „Następny”",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Pokazuj następny odcinek w rogu odtwarzacza krótko przed końcem odcinka lub na początku napisów końcowych.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Pokazuj następny odcinek w rogu odtwarzacza krótko przed końcem odcinka.",
"FULLSCREEN_CHANNEL_PANEL": "Lista kanałów i odcinków w trybie pełnoekranowym",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "W trybie pełnoekranowym przytrzymaj mysz przy lewej krawędzi, kliknij ją lub naciśnij C, aby wysunąć listę kanałów transmisji na żywo lub listę odcinków serialu i przełączać bez wychodzenia z pełnego ekranu.",
"STREAM_FORMAT_DESCRIPTION": "Wybierz domyślny format strumienia (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Painel de próximos episódios",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Em janelas largas, ancora o reprodutor de séries à esquerda e mostra os próximos episódios ao lado.",
"PLAYER_UP_NEXT_CARD": "Cartão \"A seguir\"",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Mostrar o próximo episódio no canto do player pouco antes de o episódio terminar ou quando começam os créditos finais.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Mostrar o próximo episódio no canto do player pouco antes de o episódio terminar.",
"FULLSCREEN_CHANNEL_PANEL": "Lista de canais e episódios em tela cheia",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Deixe o mouse na borda esquerda, clique nela ou pressione C em tela cheia para mostrar a lista de canais de uma transmissão ao vivo ou a lista de episódios de uma série e trocar sem sair da tela cheia.",
"STREAM_FORMAT_DESCRIPTION": "Selecionar formato de stream padrão (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Панель следующих серий",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "В широких окнах закреплять плеер сериала слева и показывать следующие серии рядом с ним.",
"PLAYER_UP_NEXT_CARD": "Карточка «Далее»",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Показывать следующую серию в углу плеера незадолго до конца серии или с началом финальных титров.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Показывать следующую серию в углу плеера незадолго до конца серии.",
"FULLSCREEN_CHANNEL_PANEL": "Список каналов и серий в полноэкранном режиме",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "В полноэкранном режиме наведите мышь на левый край, нажмите на него или нажмите C, чтобы показать список каналов прямого эфира или список серий сериала и переключиться, не выходя из полноэкранного режима.",
"STREAM_FORMAT_DESCRIPTION": "Auto предпочитает HLS. При сбое в MPV, VLC или Embedded MPV остановите плеер, выберите ts, сохраните настройки и снова откройте канал. Веб-плееры могут один раз попробовать заявленный TS после первоначальной HTTP-ошибки HLS.",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "Sıradaki bölümler paneli",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "Geniş pencerelerde dizi oynatıcısını sola yaslar ve sıradaki bölümleri yanında gösterir.",
"PLAYER_UP_NEXT_CARD": "\"Sıradaki\" kartı",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Bölüm bitmeden kısa süre önce veya jenerik başladığında sıradaki bölümü oynatıcının köşesinde göster.",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "Bölüm bitmeden kısa süre önce sıradaki bölümü oynatıcının köşesinde göster.",
"FULLSCREEN_CHANNEL_PANEL": "Tam ekranda kanal ve bölüm listesi",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "Tam ekrandayken fareyi sol kenara getirin, tıklayın veya C tuşuna basın; canlı yayının kanal listesi ya da dizinin bölüm listesi açılır ve tam ekrandan çıkmadan geçiş yapabilirsiniz.",
"STREAM_FORMAT_DESCRIPTION": "Varsayılan yayın formatını seçin (xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "「接下来播放」剧集栏",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "在宽窗口下,将剧集播放器停靠在左侧,并在旁边显示后续剧集。",
"PLAYER_UP_NEXT_CARD": "「接下来播放」卡片",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "在剧集即将结束或片尾字幕开始时,在播放器角落显示下一集。",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "在剧集即将结束时,在播放器角落显示下一集。",
"FULLSCREEN_CHANNEL_PANEL": "全屏时的频道和剧集列表",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "全屏时将鼠标停在左边缘、点击它或按 C 键,即可滑出直播的频道列表或剧集的分集列表,无需退出全屏即可切换。",
"STREAM_FORMAT_DESCRIPTION": "选择默认的流格式(xtream)",
+1 -1
View File
@@ -379,7 +379,7 @@
"PLAYER_UP_NEXT_RAIL": "即將播放集數側欄",
"PLAYER_UP_NEXT_RAIL_DESCRIPTION": "在較寬的視窗中,將影集播放器停靠在左側,並在旁邊顯示即將播放的集數。",
"PLAYER_UP_NEXT_CARD": "「即將播放」卡片",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "在影集即將結束或片尾字幕開始時,於播放器角落顯示下一集。",
"PLAYER_UP_NEXT_CARD_DESCRIPTION": "在影集即將結束時,於播放器角落顯示下一集。",
"FULLSCREEN_CHANNEL_PANEL": "全螢幕時的頻道與集數清單",
"FULLSCREEN_CHANNEL_PANEL_DESCRIPTION": "全螢幕時將滑鼠停在左側邊緣、點擊它或按 C 鍵,即可滑出直播的頻道清單或影集的集數清單,不需離開全螢幕即可切換。",
"STREAM_FORMAT_DESCRIPTION": "選擇預設串流格式(xtream)",
@@ -195,4 +195,35 @@ describe('PlayerUpNextCardComponent', () => {
query('.player-up-next__eyebrow')?.textContent?.replace(/\s+/g, ' ')
).toContain('Up next · S01E03 · in 7 min');
});
it('gives a new next episode the full collapse delay', () => {
jest.useFakeTimers();
fixture.destroy();
fixture = TestBed.createComponent(PlayerUpNextCardComponent);
const item = {
label: 'S01E03',
title: 'Three',
thumbnailUrl: null,
progressPercent: null,
};
fixture.componentRef.setInput('item', item);
fixture.componentRef.setInput('remainingSeconds', 100);
fixture.detectChanges();
const collapse = jest.fn();
fixture.componentInstance.collapseRequested.subscribe(collapse);
jest.advanceTimersByTime(UP_NEXT_COLLAPSE_DELAY_MS);
expect(collapse).toHaveBeenCalledTimes(1);
fixture.componentRef.setInput('collapsed', true);
fixture.detectChanges();
// The mounted card now points at the following episode.
fixture.componentRef.setInput('item', { ...item, label: 'S01E04' });
fixture.componentRef.setInput('collapsed', false);
fixture.detectChanges();
jest.advanceTimersByTime(UP_NEXT_COLLAPSE_DELAY_MS - 1);
expect(collapse).toHaveBeenCalledTimes(1);
jest.advanceTimersByTime(1);
expect(collapse).toHaveBeenCalledTimes(2);
});
});
@@ -48,6 +48,8 @@ export class PlayerUpNextCardComponent {
readonly hovered = signal(false);
/** Collapse delay still owed; hovering pauses it rather than resetting. */
private collapseRemainingMs = UP_NEXT_COLLAPSE_DELAY_MS;
/** The episode the owed delay belongs to; a new one starts afresh. */
private collapseLabel: string | null = null;
/** Whole seconds under a minute, otherwise whole minutes (at least 1). */
readonly countdown = computed(() => {
@@ -72,6 +74,11 @@ export class PlayerUpNextCardComponent {
constructor() {
effect((onCleanup) => {
const label = this.item().label;
if (label !== this.collapseLabel) {
this.collapseLabel = label;
this.collapseRemainingMs = UP_NEXT_COLLAPSE_DELAY_MS;
}
if (this.collapsed() || this.hovered()) {
return;
}
@@ -57,7 +57,7 @@ export const PLAYBACK_SETTINGS_SEARCH_ENTRIES: readonly SettingsSearchEntry[] =
section: 'playback',
labelKey: 'SETTINGS.PLAYER_UP_NEXT_CARD',
descriptionKey: 'SETTINGS.PLAYER_UP_NEXT_CARD_DESCRIPTION',
keywords: ['up next', 'next episode', 'credits', 'popup'],
keywords: ['up next', 'next episode', 'popup'],
fallbackId: 'video-player',
},
{