1. Two files that have to match
The M3U playlist and the XMLTV guide are two separate files. For a programme to land under the right channel, something has to link them. The app tries three rules in turn, and one hit is enough:
- Identifier: the channel's
tvg-idin the playlist equals the channelidin XMLTV. Case does not matter. - Name: the channel name from the playlist equals the name from the guide, case-insensitively.
- Simplified name: HD, FHD, UHD, SD, 4K, PL and every character other than letters and digits are stripped from both names. "TVP 1 HD" and "tvp1" are then the same.
When no rule hits, the channel stays without a schedule - even if its programmes are in the XMLTV file. The app does not guess further by name similarity - a wrong match (one station's schedule under another) is worse than none.
2. What the app imports and what it skips
XMLTV files from large providers hold thousands of channels, of which a few hundred are in your list. The app stores only the programmes of channels it matched to the playlist. The rest of the file is skipped. That keeps the import to seconds rather than minutes and stops the database growing to hundreds of megabytes on a box with 4 GB of storage.
Side effect: the "EPG: N programmes" figure in the header is about matching, not about the file. Zero with a large file means "nothing matched", not "the file is empty".
3. The safeguard against wiping history
The guide accumulates history day by day (for catch-up). On every import the app cleans out channels that are no longer in the playlist. If matching failed on a single refresh - because the provider briefly changed identifiers or served a different file - the cleanup would wipe all the collected history.
That is why cleanup is suspended when fewer than half of the channels already in the database were matched. The app treats such a large drop as a matching error, not a real list change. The history stays; the next successful import puts things back to normal. This threshold was added after a report where one refresh matched 1 channel out of 300 and deleted the rest - and the only rescue was a manual guide reset.
4. How to find what does not match
- Open the playlist in a text editor and look at a few
#EXTINFlines. Is there atvg-id? What form does it take - "BBC1.uk", "bbc1", "12345"? - Open the XMLTV file (after unpacking
.gz) and find the<channel id="…">entries. Are the identifiers in the same convention? If the list says "BBC1.uk" and the guide says "bbc1.bbc.co.uk", nothing will hit. - Compare the names. Without identifiers, matching goes by name. "BBC One HD" hits "BBC One", but "BBC One (backup)" does not - after stripping characters the bracket remains as "backup".
- A guide from the list's provider. Panels that generate the playlist also generate XMLTV with the same identifiers. If you use a guide from elsewhere, that is the most common cause of zero matches.
5. Several guide sources
The url-tvg entry in the list header can hold several addresses separated
by commas. The app takes only the first. If your channels are described
only in the second file, enter its address manually in the list's EPG field - it takes
precedence over the header.
6. When matching worked and then stopped
- The provider changed identifiers. Refresh list and EPG manually (channel list menu). If it is fine after the refresh, it was a temporary inconsistency between the files.
- There is a schedule, but the wrong one. Two channels in the list
share a
tvg-idor the same simplified name (e.g. "Sky One" and "Sky One HD" are the same after simplification - intended; "BBC One" and "BBC Two" are not). Fix the identifiers in the list at the source. - The database looks corrupted - Settings → "Reset the guide". This deletes the collected history; it rebuilds one day at a time.
7. When it does not help
Write to kontakt@ipapptv.com with two
snippets: two or three #EXTINF lines from the playlist and two or three
<channel> entries from the XMLTV for the same stations. No addresses
with a username and password. From that it is immediately clear which rule should have
fired.
If you have a computer with ADB, the log adb logcat -s IPappTV-EPG during
a guide refresh shows the number of playlist keys, the number of channels in the database,
and whether cleanup was suspended.
