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.
Part of a broader link-health sweep across lists/. Tested every URL
directly (curl/ffprobe), replaced dead ones where a working source
was findable, moved the rest to each file's Invalid section.
- Monaco: both channels were dead (S3 access denied / DNS failure);
found current sources for TV Monaco (okast.tv master.m3u8, no
per-session token) and Monaco Info (webtv.monacoinfo.com).
- Paraguay: Unicanal and ABC TV's direct CDN URLs were dead; both run
active official YouTube channels, switched to the same Ⓨ /live
pattern already used elsewhere in the repo. Trece's stream is dead
and its own site actually embeds Unicanal's feed instead of its
own, so no fix found - moved to Invalid.
- Kosovo: RTK 1/2/4's tokenized URLs are dead and no current source
found; RTK 3 has a working non-tokenized URL, kept.
- Armenia: Armenia 1, Kentron TV and Armenia TV had dead URLs; found
working replacements. 5TV only has a short-lived (~5h) signed-token
URL with no stable gateway, so it wasn't worth hardcoding - moved
to Invalid.
- New lists/zz_music_en.md for the "NOW" retro-music FAST channels
(Now 70's/80's, NOW Rock) - no existing thematic list fit them.