aboutsummaryrefslogtreecommitdiff
path: root/src/qmmpui/fileloader.cpp
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-06-14 20:24:58 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2017-06-14 20:24:58 +0000
commitb2576ddc181d3758e3a57d9cac871ee7d7e2ef06 (patch)
tree1dfd6331a91f153d4a693a0aa32a774e2e53e2ea /src/qmmpui/fileloader.cpp
parent9e3bcc8653f5e0500e9d0e4ee0c953e8bbf4ea4c (diff)
downloadqmmp-b2576ddc181d3758e3a57d9cac871ee7d7e2ef06.tar.gz
qmmp-b2576ddc181d3758e3a57d9cac871ee7d7e2ef06.tar.bz2
qmmp-b2576ddc181d3758e3a57d9cac871ee7d7e2ef06.zip
improved playlist formats support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@7237 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/qmmpui/fileloader.cpp')
-rw-r--r--src/qmmpui/fileloader.cpp109
1 files changed, 98 insertions, 11 deletions
diff --git a/src/qmmpui/fileloader.cpp b/src/qmmpui/fileloader.cpp
index 0b0958423..e42226a4d 100644
--- a/src/qmmpui/fileloader.cpp
+++ b/src/qmmpui/fileloader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2006-2015 by Ilya Kotov *
+ * Copyright (C) 2006-2017 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -26,6 +26,7 @@
#include "fileloader_p.h"
#include "qmmpuisettings.h"
#include "playlistitem.h"
+#include "playlistparser.h"
#include "playlisttrack.h"
FileLoader::FileLoader(QObject *parent) : QThread(parent)
@@ -53,6 +54,62 @@ QList<PlayListTrack *> FileLoader::processFile(const QString &path, QStringList
return tracks;
}
+void FileLoader::insertPlayList(const QString &fmt, const QByteArray &contents, PlayListItem *before)
+{
+ QList<PlayListTrack *> tracks = PlayListParser::loadPlaylist(fmt, contents);
+
+ while (!tracks.isEmpty() && !m_finished)
+ {
+ PlayListTrack *t = tracks.takeFirst();
+ QList <FileInfo *> infoList = MetaDataManager::instance()->createPlayList(t->url(), m_use_meta);
+ if(infoList.count() != 1) //invalid or unsupported track
+ {
+ qDeleteAll(infoList);
+ infoList.clear();
+ delete t;
+ continue;
+ }
+
+ FileInfo *info = infoList.first();
+ if(!info->metaData(Qmmp::ALBUM).isEmpty() && !info->metaData(Qmmp::ARTIST).isEmpty())
+ t->updateMetaData(infoList.first());
+
+ emit newTracksToInsert(before, QList<PlayListTrack *>() << t);
+ delete info;
+ }
+ //clear remaining tracks
+ qDeleteAll(tracks);
+ tracks.clear();
+}
+
+void FileLoader::insertPlayList(const QString &path, PlayListItem *before)
+{
+ QList<PlayListTrack *> tracks = PlayListParser::loadPlaylist(path);
+
+ while (!tracks.isEmpty() && !m_finished)
+ {
+ PlayListTrack *t = tracks.takeFirst();
+ QList <FileInfo *> infoList = MetaDataManager::instance()->createPlayList(t->url(), m_use_meta);
+ if(infoList.count() != 1) //invalid or unsupported track
+ {
+ qDeleteAll(infoList);
+ infoList.clear();
+ delete t;
+ continue;
+ }
+
+ FileInfo *info = infoList.first();
+ if(!info->metaData(Qmmp::ALBUM).isEmpty() && !info->metaData(Qmmp::ARTIST).isEmpty())
+ t->updateMetaData(infoList.first());
+
+ emit newTracksToInsert(before, QList<PlayListTrack *>() << t);
+ delete info;
+ }
+ //clear remaining tracks
+ qDeleteAll(tracks);
+ tracks.clear();
+}
+
void FileLoader::addDirectory(const QString& s, PlayListItem *before)
{
QList<PlayListTrack *> tracks;
@@ -127,20 +184,31 @@ void FileLoader::run()
PlayListItem *before = i.before;
QString path = i.path;
- QFileInfo info(path);
-
- if(info.isDir())
+ if(!path.isEmpty())
{
- addDirectory(path, before);
+ QFileInfo info(path);
- }
- else if(info.isFile() || path.contains("://"))
- {
- QList<PlayListTrack *> tracks = processFile(path);
- if(!tracks.isEmpty())
+ if(info.isDir())
+ {
+ addDirectory(path, before);
+
+ }
+ else if(info.isFile() && PlayListParser::isPlayList(path))
{
- emit newTracksToInsert(before, tracks);
+ insertPlayList(path, before);
}
+ else if(info.isFile() || path.contains("://"))
+ {
+ QList<PlayListTrack *> tracks = processFile(path);
+ if(!tracks.isEmpty())
+ {
+ emit newTracksToInsert(before, tracks);
+ }
+ }
+ }
+ else if(!i.playListContent.isEmpty() && !i.playListFormat.isEmpty())
+ {
+ insertPlayList(i.playListFormat, i.playListContent, before);
}
m_mutex.lock();
@@ -163,6 +231,25 @@ void FileLoader::add(const QStringList &paths)
insert(0, paths);
}
+void FileLoader::addPlayList(const QString &fmt, const QByteArray &data)
+{
+ m_mutex.lock();
+ LoaderTask task;
+ task.before = 0;
+ task.playListFormat = fmt;
+ task.playListContent = data;
+ m_tasks.append(task);
+ m_mutex.unlock();
+ if(!isRunning())
+ {
+ MetaDataManager::instance()->prepareForAnotherThread();
+ PlayListParser::loadFormats();
+ m_filters = MetaDataManager::instance()->nameFilters();
+ m_use_meta = m_settings->useMetadata();
+ }
+ start(QThread::IdlePriority);
+}
+
void FileLoader::insert(PlayListItem *before, const QString &path)
{
insert(before, QStringList() << path);