mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-12 03:56:15 -08:00
feat(xtream): fall back to uploaded XMLTV when provider has no EPG
Live TV channels in Xtream playlists go blank whenever the provider's get_short_epg returns nothing, even when the user has working XMLTV URLs in Settings. The XMLTV pipeline already populates epg_programs but only the M3U module was reading it. Wire those uploads up as a fallback for Xtream too: when the provider returns nothing for a channel with an epg_channel_id, look it up in the local table. A settings toggle flips the priority for users whose curated XMLTV is better than the provider's auto guide. EpgQueueService.enqueue() became async to batch the XMLTV lookup once per viewport change. To keep the queue consistent under fast scroll, all shared-state mutations now happen behind a generation counter so only the latest call commits. Per-method bridge gating in the new XtreamXmltvFallbackService keeps each path working when the preload exposes only one of the two endpoints.
This commit is contained in:
32 files changed
+1002
-133
No files matched your search
@@ -89,6 +89,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="setting-item">
|
||||
<div class="setting-item__meta">
|
||||
<h4>{{ 'SETTINGS.PREFER_UPLOADED_EPG_TITLE' | translate }}</h4>
|
||||
<p>{{ 'SETTINGS.PREFER_UPLOADED_EPG_HINT' | translate }}</p>
|
||||
</div>
|
||||
<div class="setting-item__control setting-item__toggle">
|
||||
<mat-checkbox
|
||||
formControlName="preferUploadedEpgOverXtream"
|
||||
data-test-id="toggle-prefer-uploaded-epg"
|
||||
></mat-checkbox>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="settings-group__footer">
|
||||
<div class="inline-actions">
|
||||
<button mat-button type="button" (click)="addEpgSource.emit()">
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Component, input, output, ViewEncapsulation } from '@angular/core';
|
||||
import { FormArray, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
||||
import { MatButtonModule } from '@angular/material/button';
|
||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
import { MatInputModule } from '@angular/material/input';
|
||||
@@ -14,6 +15,7 @@ import { TranslateModule } from '@ngx-translate/core';
|
||||
imports: [
|
||||
EpgSourceStatusComponent,
|
||||
MatButtonModule,
|
||||
MatCheckboxModule,
|
||||
MatFormFieldModule,
|
||||
MatIconModule,
|
||||
MatInputModule,
|
||||
|
||||
@@ -82,6 +82,7 @@ const DEFAULT_SETTINGS = {
|
||||
remoteControlPort: 8765,
|
||||
epgUrl: [],
|
||||
coverSize: 'medium',
|
||||
preferUploadedEpgOverXtream: false,
|
||||
};
|
||||
|
||||
class MockSettingsStore {
|
||||
|
||||
@@ -200,6 +200,9 @@ export class SettingsComponent implements OnInit, OnDestroy {
|
||||
],
|
||||
],
|
||||
coverSize: 'medium' as CoverSize,
|
||||
...(this.isDesktop
|
||||
? { preferUploadedEpgOverXtream: false }
|
||||
: {}),
|
||||
});
|
||||
|
||||
/** Form array with epg sources */
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "أضف رابطًا واحدًا أو أكثر كمصادر لـ EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "تفضيل مصادر EPG الخاصة بك لقوائم Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "بشكل افتراضي، تستخدم قوائم Xtream دليل البرامج من المزود الخاص بك، وتُستخدم مصادر EPG التي حمّلتها لملء القنوات المفقودة فقط. فعّل هذا الخيار لاستخدام EPG الذي حمّلته أولاً.",
|
||||
"DATA": "البيانات",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "زيد رابط ولا أكثر كمصادر EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "فضّل مصادر EPG ديالك ل Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "افتراضياً، قوائم Xtream كتستعمل دليل البرامج ديال المزود ديالك، ومصادر EPG ديالك كتعمر غير القنوات اللي ناقصة. فعّل هاد الخيار باش يتستعمل EPG ديالك الأول.",
|
||||
"DATA": "البيانات",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Дадайце адзін або некалькі URL у якасці крыніц EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Аддаваць перавагу вашым крыніцам EPG для плэйлістаў Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Па змаўчанні плэйлісты Xtream выкарыстоўваюць праграму перадач ад вашага правайдара, а вашы крыніцы EPG запаўняюць толькі адсутныя каналы. Уключыце, каб спачатку выкарыстоўваць загружаны EPG.",
|
||||
"DATA": "Дадзеныя",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Eine oder mehrere URLs als EPG-Quellen hinzufügen",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Eigene EPG-Quellen bei Xtream-Playlists bevorzugen",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Standardmäßig nutzen Xtream-Playlists die Programmdaten deines Anbieters, und dein hochgeladenes EPG füllt nur fehlende Kanäle. Aktiviere die Option, um stattdessen zuerst dein hochgeladenes EPG zu nutzen.",
|
||||
"DATA": "Daten",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Προσθέστε μία ή περισσότερες διευθύνσεις URL ως πηγές EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Προτίμηση των δικών σου πηγών EPG για λίστες Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Από προεπιλογή, οι λίστες Xtream χρησιμοποιούν τον οδηγό προγράμματος του παρόχου σου και οι δικές σου πηγές EPG συμπληρώνουν μόνο τα κανάλια που λείπουν. Ενεργοποίησέ το για να χρησιμοποιείται πρώτα το EPG που ανέβασες.",
|
||||
"DATA": "Δεδομένα",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Add one or more URLs as EPG sources",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Prefer your EPG sources for Xtream playlists",
|
||||
"PREFER_UPLOADED_EPG_HINT": "By default, Xtream playlists use the program guide from your provider, and your uploaded EPG only fills missing channels. Turn this on to use your uploaded EPG first instead.",
|
||||
"DATA": "Data",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Agrega una o varias URL como fuentes EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Preferir tus fuentes EPG para listas Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "De forma predeterminada, las listas Xtream usan la guía de programas de tu proveedor, y tus fuentes EPG solo rellenan los canales que faltan. Activa esta opción para usar antes tu EPG.",
|
||||
"DATA": "Datos",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Ajoutez une ou plusieurs URL comme sources EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Préférer vos sources EPG pour les playlists Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Par défaut, les playlists Xtream utilisent le guide des programmes de votre fournisseur, et vos sources EPG ne comblent que les chaînes manquantes. Activez cette option pour utiliser d'abord votre EPG.",
|
||||
"DATA": "Données",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Aggiungi uno o piu URL come sorgenti EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Preferisci le tue sorgenti EPG per le playlist Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Per impostazione predefinita, le playlist Xtream usano la guida programmi del tuo provider e le tue sorgenti EPG riempiono solo i canali mancanti. Attiva questa opzione per usare prima il tuo EPG.",
|
||||
"DATA": "Dati",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "EPGソースとして1つ以上のURLを追加",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Xtream プレイリストでアップロードした EPG を優先する",
|
||||
"PREFER_UPLOADED_EPG_HINT": "標準では Xtream プレイリストはプロバイダの番組表を使用し、アップロードした EPG は不足しているチャンネルのみを補完します。これを有効にすると、アップロードした EPG を優先して使用します。",
|
||||
"DATA": "データ",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "하나 이상의 URL을 EPG 소스로 추가합니다",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Xtream 재생 목록에서 업로드한 EPG 우선 사용",
|
||||
"PREFER_UPLOADED_EPG_HINT": "기본적으로 Xtream 재생 목록은 공급자의 프로그램 가이드를 사용하며, 업로드한 EPG는 누락된 채널만 채웁니다. 이 옵션을 켜면 업로드한 EPG를 먼저 사용합니다.",
|
||||
"DATA": "데이터",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Voeg een of meer URL's toe als EPG-bron",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Eigen EPG-bronnen verkiezen voor Xtream-afspeellijsten",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Standaard gebruiken Xtream-afspeellijsten de programmagids van je provider, en je EPG-bronnen vullen alleen ontbrekende kanalen aan. Schakel dit in om eerst je geüploade EPG te gebruiken.",
|
||||
"DATA": "Gegevens",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Dodaj jeden lub więcej adresów URL jako źródła EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Preferuj własne źródła EPG dla playlist Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Domyślnie playlisty Xtream korzystają z przewodnika po programie od dostawcy, a Twoje źródła EPG uzupełniają tylko brakujące kanały. Włącz, aby najpierw używać przesłanego EPG.",
|
||||
"DATA": "Dane",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Adicione uma ou mais URLs como fontes de EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Preferir as suas fontes EPG para listas Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Por padrão, as listas Xtream usam a guia de programação do seu provedor, e as suas fontes EPG só preenchem os canais em falta. Ative esta opção para usar primeiro o seu EPG.",
|
||||
"DATA": "Dados",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "Добавьте один или несколько URL-адресов источников EPG",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Предпочитать ваши источники EPG для плейлистов Xtream",
|
||||
"PREFER_UPLOADED_EPG_HINT": "По умолчанию плейлисты Xtream используют программу передач от вашего провайдера, а ваши источники EPG заполняют только недостающие каналы. Включите, чтобы сначала использовать ваш загруженный EPG.",
|
||||
"DATA": "Данные",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "EPG kaynağı olarak bir veya daha fazla URL ekleyin",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "Xtream oynatma listeleri için yüklediğin EPG'yi tercih et",
|
||||
"PREFER_UPLOADED_EPG_HINT": "Varsayılan olarak Xtream oynatma listeleri sağlayıcının yayın akışını kullanır ve yüklediğin EPG yalnızca eksik kanalları doldurur. Bunu açarak yüklediğin EPG'yi önce kullanabilirsin.",
|
||||
"DATA": "Veri",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "添加一个或多个 URL 作为 EPG 源",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "为 Xtream 播放列表优先使用上传的 EPG",
|
||||
"PREFER_UPLOADED_EPG_HINT": "默认情况下,Xtream 播放列表使用提供商的节目指南,您上传的 EPG 仅用于补充缺失的频道。启用此选项可优先使用您上传的 EPG。",
|
||||
"DATA": "数据",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
@@ -202,6 +202,8 @@
|
||||
"EPG_SOURCES_DESCRIPTION": "新增一個或多個網址作為 EPG 來源",
|
||||
"EPG_EMPTY_TITLE": "No EPG sources yet",
|
||||
"EPG_EMPTY_HINT": "Add a URL to fetch program data for your channels.",
|
||||
"PREFER_UPLOADED_EPG_TITLE": "為 Xtream 播放清單優先使用上傳的 EPG",
|
||||
"PREFER_UPLOADED_EPG_HINT": "預設情況下,Xtream 播放清單會使用供應商的節目表,您上傳的 EPG 僅用於補足缺少的頻道。開啟此選項以優先使用您上傳的 EPG。",
|
||||
"DATA": "資料",
|
||||
"BACKUP": "Backup",
|
||||
"BACKUP_DESCRIPTION": "Export your library as a snapshot, or restore from a previous backup.",
|
||||
|
||||
Reference in new issue
Block a user