42 channels across 14 lists have an EPG column in their markdown table row
but the column is blank. The condition in Channel.to_m3u_line() only checked
for None (no EPG column at all) but not for an empty string, so these
channels got a tvg-id="" attribute in the generated playlist. An empty
tvg-id tells IPTV players "this channel has an EPG ID and it is the empty
string", which prevents EPG matching rather than falling back to name-based
matching the way a missing attribute would.
Changing `if self.epg is not None` to `if self.epg` makes both None and
empty string omit the attribute, matching the existing pattern used by
the chno and country_code attributes on the lines just above.
Issue #483: these circled-letter suffixes are in-list markers for
human readers (subscription-required, geo-blocked, YouTube-sourced,
etc.), but were leaking into the generated tvg-name verbatim (e.g.
tvg-name="Rai 1 Ⓖ"), breaking EPG matching for any provider keying
off channel name. Now stripped from tvg-name only; the display name
after the comma still shows the marker as before.
- Norway: NRK1/2/3/Super's old akamaized path returned "Invalid URL"
for everyone; replaced with the current path (now correctly
geo-blocked instead of broken for everyone). Kanal 10 Norge's CDN
is dead, switched to its YouTube channel. TV 2 Sport 1 and TV 2
Nyheter are dead with no free source found (TV 2 Sport appears to
require a paid TV 2 Play subscription now) - moved to Invalid.
Fixes#1113.
- Portugal: SIC's cloudfront URL was dead, replaced with a working
okast.tv source. Fixes#1109.
- Venezuela: "Venezolana de Televisión" pointed at a Dailymotion embed
page instead of a stream URL, which explains why it showed
unrelated content - moved to Invalid, no working replacement found
yet. Fixes#969.
Add ISO 3166-1 alpha-2 country codes via tvg-country attribute
to all #EXTINF lines, enabling IPTV players to filter and display
channels by country.
Co-authored-by: Kálmán „KAMI” Szalai <kami911gmail.com>