aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp')
-rw-r--r--src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp49
1 files changed, 36 insertions, 13 deletions
diff --git a/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp b/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp
index 87bd2eaf8..783f3c518 100644
--- a/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp
+++ b/src/plugins/PlayListFormats/m3u/m3uplaylistformat.cpp
@@ -32,34 +32,57 @@ const PlayListFormatProperties M3UPlaylistFormat::properties() const
return p;
}
-QStringList M3UPlaylistFormat::decode(const QString & contents)
+QList<PlayListTrack *> M3UPlaylistFormat::decode(const QByteArray &contents)
{
- QStringList out;
- QStringList splitted = contents.split("\n");
+ QList<PlayListTrack*> out;
+ QStringList splitted = QString::fromUtf8(contents).split("\n");
if(splitted.isEmpty())
- return QStringList();
+ return out;
+
+ QRegExp extInfRegExp("#EXTINF:(-{0,1}\\d+),(.*) - (.*)");
+ int length = 0;
+ QString artist, title;
+ bool hasExtInf = false;
foreach(QString str, splitted)
{
- str = str.trimmed ();
- if (str.startsWith("#EXTM3U") || str.startsWith("#EXTINF:") || str.isEmpty())
- continue;//TODO: Let's skip it for now..
- else if (str.startsWith("#") || str.isEmpty())
+ str = str.trimmed();
+ if(str.startsWith("#EXTM3U") || str.isEmpty())
continue;
- else
- out << str;
+
+ if(extInfRegExp.indexIn(str) > -1)
+ {
+ length = extInfRegExp.cap(1).toInt();
+ artist = extInfRegExp.cap(2);
+ title = extInfRegExp.cap(3);
+ hasExtInf = true;
+ }
+
+ if(str.startsWith("#"))
+ continue;
+
+ out << new PlayListTrack();
+ out.last()->insert(Qmmp::URL, str);
+
+ if(hasExtInf)
+ {
+ out.last()->setLength(length);
+ out.last()->insert(Qmmp::ARTIST, artist);
+ out.last()->insert(Qmmp::TITLE, title);
+ hasExtInf = false;
+ }
}
return out;
}
-QString M3UPlaylistFormat::encode(const QList<PlayListTrack*> & contents, const QString &path)
+QByteArray M3UPlaylistFormat::encode(const QList<PlayListTrack*> &contents, const QString &path)
{
QStringList out;
out << QString("#EXTM3U");
MetaDataFormatter formatter("%if(%p,%p - %t,%t)%if(%p|%t,,%f)");
QString m3uDir = QFileInfo(path).canonicalPath();
- foreach(PlayListTrack* f,contents)
+ foreach(PlayListTrack* f, contents)
{
QString info = "#EXTINF:" + QString::number(f->length()) + "," + formatter.format(f);
out.append(info);
@@ -75,7 +98,7 @@ QString M3UPlaylistFormat::encode(const QList<PlayListTrack*> & contents, const
else
out.append(f->url());
}
- return out.join("\n");
+ return out.join("\n").toUtf8();
}
Q_EXPORT_PLUGIN2(m3uplaylistformat,M3UPlaylistFormat)