[mythtv-commits] Ticket #13623: mythfilldatabase may not process valid XMLTV files if program starttime order is not increasing
MythTV
noreply at mythtv.org
Fri May 22 21:12:33 UTC 2020
#13623: mythfilldatabase may not process valid XMLTV files if program starttime
order is not increasing
-------------------------------------------+--------------------------
Reporter: Gary Buhrmaster | Owner: (none)
Type: Bug Report - General | Status: new
Priority: minor | Milestone: needs_triage
Component: MythTV - Mythfilldatabase | Version: Master Head
Severity: medium | Keywords:
Ticket locked: 0 |
-------------------------------------------+--------------------------
mythfilldatabase (with a9aa006139) may no longer process valid XMLTV files
if the program starttime order is not increasing.
Originally reported to the XMLTV project, where it was pointed out that
the issue is actually due to a MythTV issue. As the original reporter
chose not to create a MythTV ticket (s/he found their own workaround),
here is what seems to be the essential part of the original issue so that
it can be addressed here:
In a9aa006139 a new (to mythfilldatabase) test was added to check that the
starttime was increasing with each new program element on the same
channel, and reject the input file if it was not.
While many (most?) XMLTV grabbers appear to return the data in starttime
order (and for that matter, channel and starttime order), any such order
requirement is not part of the specification, and the original reporter
ran into this issue with their chosen grabber for a particular day.
The order check should be removed to support compliant source files.
FWIW, as I recall (it has been a long time since I last looked at the code
in question), MythTV itself does its own internal sorting of the program
data that it processes for its own purposes.
The mitigation until this issue is resolved is to run the output of a
grabber through TV_SORT (but note that if there is a lot of source data
TV_SORT can be very resource intensive (lots of memory and cpu)).
**COMPLETELY** untested patch (not compiled, let alone tested, just sort
of looks right):
{{{
diff --git a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
index 78f22170cd..bbce136c9d 100644
--- a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
+++ b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
@@ -205,8 +205,6 @@ bool XMLTVParser::parseFile(
QString aggregatedTitle;
QString aggregatedDesc;
bool haveReadTV = false;
- QString last_channel = ""; //xmltvId of the last program element we
read
- QDateTime last_starttime; //starttime of the last program element we
read
while (!xml.atEnd() && !xml.hasError() && (! (xml.isEndElement() &&
xml.name() == "tv")))
{
if (xml.readNextStartElement())
@@ -709,23 +707,6 @@ bool XMLTVParser::parseFile(
else
{
// so we have a (relatively) clean program element
now, which is good enough to process or to store
- if (pginfo->m_channel != last_channel) {
- //we have a channel change here
- last_channel = pginfo->m_channel;
- last_starttime = QDateTime(QDate(1970, 1, 1),
QTime(0, 0, 0)); //initialize it to a time far, far away ...
- }
- else {
- //we are still on the same channel
- if (pginfo->m_starttime >= last_starttime) {
- last_starttime = pginfo->m_starttime;
- }
- else {
- LOG(VB_GENERAL, LOG_ERR, QString("Malformed
XML file, program out of order at line %1,
%2").arg(xml.lineNumber()).arg(xml.errorString()));
- delete pginfo;
- return false;
- }
- }
-
if (pginfo->m_clumpidx.isEmpty())
(*proglist)[pginfo->m_channel].push_back(*pginfo);
else
}}}
--
Ticket URL: <https://code.mythtv.org/trac/ticket/13623>
MythTV <http://www.mythtv.org>
MythTV Media Center
More information about the mythtv-commits
mailing list