EPG-Quelle gewechselt: epg.pw -> iptv-epg.org (sauberes UTC, korrekte Daten)
This commit is contained in:
parent
ed7a237e33
commit
4f8d924df5
1 changed files with 14 additions and 18 deletions
|
|
@ -21,8 +21,10 @@ public class EpgService
|
|||
/// <summary>Cache-Verzeichnis für heruntergeladene XMLTV-Dateien</summary>
|
||||
private static readonly string CacheDir = AppPaths.Epg;
|
||||
|
||||
/// <summary>EPG-Quelle: kostenloser XMLTV-Feed für deutschsprachige Sender (DE/AT/CH)</summary>
|
||||
private const string EpgUrl = "https://epg.pw/xmltv/epg_DE.xml.gz";
|
||||
/// <summary>EPG-Quelle: kostenloser XMLTV-Feed fuer Deutschland
|
||||
/// iptv-epg.org liefert sauberes UTC mit korrektem +0000 (Tagesschau 20:00 lokal = 1800 +0000).
|
||||
/// Zuvor war epg.pw im Einsatz, das aber unsystematisch falsche Zeiten lieferte.</summary>
|
||||
private const string EpgUrl = "https://iptv-epg.org/files/epg-de.xml.gz";
|
||||
|
||||
/// <summary>In-Memory-Index: Sendername (normalisiert) → Liste der Events, sortiert nach Startzeit</summary>
|
||||
private Dictionary<string, List<EpgEvent>> _eventsByChannel = new();
|
||||
|
|
@ -172,14 +174,7 @@ public class EpgService
|
|||
_eventsByChannel = events;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// XMLTV-Zeit "20260510120000 +0200" → lokale DateTime.
|
||||
///
|
||||
/// WICHTIG: epg.pw markiert alle Zeiten mit "+0000", liefert sie aber faktisch
|
||||
/// schon in lokaler Zeit (MEZ/MESZ). Das ist ein Bug im Feed. Wir behandeln
|
||||
/// daher "+0000" speziell: Zeit direkt als lokal interpretieren, nicht konvertieren.
|
||||
/// Echte Offsets (z.B. "+0200") werden korrekt umgerechnet.
|
||||
/// </summary>
|
||||
/// <summary>XMLTV-Zeit "20260510120000 +0200" → lokale DateTime.</summary>
|
||||
private static DateTime ParseXmltvTime(string s)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(s)) return DateTime.MinValue;
|
||||
|
|
@ -191,13 +186,6 @@ public class EpgService
|
|||
|
||||
if (parts.Length == 2 && parts[1].Length == 5)
|
||||
{
|
||||
// Sonderfall: epg.pw liefert IMMER "+0000", obwohl die Zeiten in Wahrheit
|
||||
// schon lokale Sendezeiten sind (Tagesschau 20:00 steht als 200000 +0000,
|
||||
// nicht 180000 +0000). Daher "+0000" als "bereits lokal" behandeln.
|
||||
if (parts[1] == "+0000" || parts[1] == "-0000")
|
||||
return dt;
|
||||
|
||||
// Echter Offset → konvertieren
|
||||
var sign = parts[1][0] == '-' ? -1 : 1;
|
||||
var hh = int.Parse(parts[1].Substring(1, 2));
|
||||
var mm = int.Parse(parts[1].Substring(3, 2));
|
||||
|
|
@ -214,7 +202,15 @@ public class EpgService
|
|||
public static string NormalizeName(string name)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(name)) return "";
|
||||
var s = name.Trim().ToLowerInvariant();
|
||||
var s = name.Trim();
|
||||
|
||||
// Länder-Präfixe entfernen (iptv-epg.org Feed verwendet "DE - Sendername")
|
||||
string[] prefixes = { "DE - ", "AT - ", "CH - " };
|
||||
foreach (var pre in prefixes)
|
||||
if (s.StartsWith(pre, StringComparison.OrdinalIgnoreCase))
|
||||
s = s[pre.Length..].TrimStart();
|
||||
|
||||
s = s.ToLowerInvariant();
|
||||
// HD/SD-Suffixe entfernen
|
||||
string[] suffixes = { " hd", " uhd", " 4k", " sd", " austria", " österreich", " schweiz" };
|
||||
foreach (var suf in suffixes)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue