diff --git a/src/media/anime_db_2.cpp b/src/media/anime_db_2.cpp index 4c6381ab..8fc9eb64 100644 --- a/src/media/anime_db_2.cpp +++ b/src/media/anime_db_2.cpp @@ -17,10 +17,21 @@ */ #include +#include #include #include "anime_db.hpp" +namespace { + +// This regex is used to remove the extra root element from v1's XML documents so that they +// can be read by `QXmlStreamReader` without an "Extra content at end of document" error. +// See #842 for more information. +static const QRegularExpression metaElementRegex{".+", + QRegularExpression::DotMatchesEverythingOption}; + +} // namespace + namespace anime { QList readDatabase() { @@ -30,7 +41,10 @@ QList readDatabase() { if (!file.open(QIODevice::ReadOnly)) return {}; - QXmlStreamReader xml(&file); + QString str{file.readAll()}; + str.remove(metaElementRegex); + + QXmlStreamReader xml(str); if (!xml.readNextStartElement()) return {}; if (xml.name() != u"database") return {}; @@ -115,7 +129,10 @@ QList readListEntries() { if (!file.open(QIODevice::ReadOnly)) return {}; - QXmlStreamReader xml(&file); + QString str{file.readAll()}; + str.remove(metaElementRegex); + + QXmlStreamReader xml(str); if (!xml.readNextStartElement()) return {}; if (xml.name() != u"library") return {};