Improve ASX/WPL parser. Should be more XML-conform now.

This commit is contained in:
LoRd_MuldeR 2011-01-31 16:55:24 +01:00
parent ac53f70488
commit 628bf3de25
2 changed files with 28 additions and 36 deletions

View File

@ -25,7 +25,7 @@
#define VER_LAMEXP_MAJOR 4 #define VER_LAMEXP_MAJOR 4
#define VER_LAMEXP_MINOR_HI 0 #define VER_LAMEXP_MINOR_HI 0
#define VER_LAMEXP_MINOR_LO 0 #define VER_LAMEXP_MINOR_LO 0
#define VER_LAMEXP_BUILD 282 #define VER_LAMEXP_BUILD 283
#define VER_LAMEXP_SUFFIX Beta-3 #define VER_LAMEXP_SUFFIX Beta-3
/* /*

View File

@ -31,9 +31,13 @@
#include <QDate> #include <QDate>
#include <QTime> #include <QTime>
#include <QDebug> #include <QDebug>
#include <QMessageBox>
#include <math.h> #include <math.h>
//Un-escape XML characters
#define XML_DECODE replace("&amp;", "&").replace("&apos;", "'").replace("&nbsp;", " ").replace("&quot;", "\"").replace("&lt;", "<").replace("&gt;", ">")
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
// Constructor // Constructor
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -499,19 +503,27 @@ bool FileAnalyzer::parsePlaylist_pls(QFile &data, QStringList &fileList, const Q
bool FileAnalyzer::parsePlaylist_wpl(QFile &data, QStringList &fileList, const QDir &baseDir, const QDir &rootDir) bool FileAnalyzer::parsePlaylist_wpl(QFile &data, QStringList &fileList, const QDir &baseDir, const QDir &rootDir)
{ {
QRegExp skipData("<!--(.+)-->", Qt::CaseInsensitive);
QRegExp wplEntry("<(media|ref)[^<>]*(src|href)=\"([^\"]+)\"[^<>]*>", Qt::CaseInsensitive); QRegExp wplEntry("<(media|ref)[^<>]*(src|href)=\"([^\"]+)\"[^<>]*>", Qt::CaseInsensitive);
QByteArray line = data.readLine();
while(line.size() > 0) skipData.setMinimal(true);
QByteArray buffer = data.readAll();
QString line = QString::fromUtf8(buffer.constData(), buffer.size()).simplified();
buffer.clear();
int index = 0;
while((index = skipData.indexIn(line)) >= 0)
{ {
bool flag = false; line.remove(index, skipData.matchedLength());
}
QString temp1(QDir::fromNativeSeparators(QString::fromUtf8(line.constData(), line.size()).trimmed())); int offset = 0;
QString temp2(QDir::fromNativeSeparators(QString::fromLatin1(line.constData(), line.size()).trimmed()));
if(!flag && wplEntry.indexIn(temp1) >= 0) while((offset = wplEntry.indexIn(line, offset) + 1) > 0)
{ {
QFileInfo filename(QDir::fromNativeSeparators(wplEntry.cap(3)).trimmed()); QFileInfo filename(QDir::fromNativeSeparators(wplEntry.cap(3).XML_DECODE.trimmed()));
filename.setCaching(false); filename.setCaching(false);
fixFilePath(filename, baseDir, rootDir); fixFilePath(filename, baseDir, rootDir);
@ -520,30 +532,10 @@ bool FileAnalyzer::parsePlaylist_wpl(QFile &data, QStringList &fileList, const Q
if(isPlaylist(filename.canonicalFilePath()) == noPlaylist) if(isPlaylist(filename.canonicalFilePath()) == noPlaylist)
{ {
fileList << filename.canonicalFilePath(); fileList << filename.canonicalFilePath();
flag = true;
} }
} }
} }
if(!flag && wplEntry.indexIn(temp2) >= 0)
{
QFileInfo filename(QDir::fromNativeSeparators(wplEntry.cap(3)).trimmed());
filename.setCaching(false);
fixFilePath(filename, baseDir, rootDir);
if(filename.exists())
{
if(isPlaylist(filename.canonicalFilePath()) == noPlaylist)
{
fileList << filename.canonicalFilePath();
flag = true;
}
}
}
line = data.readLine();
}
return true; return true;
} }