diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-06-14 20:24:58 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2017-06-14 20:24:58 +0000 |
| commit | b2576ddc181d3758e3a57d9cac871ee7d7e2ef06 (patch) | |
| tree | 1dfd6331a91f153d4a693a0aa32a774e2e53e2ea /src/qmmpui/fileloader.cpp | |
| parent | 9e3bcc8653f5e0500e9d0e4ee0c953e8bbf4ea4c (diff) | |
| download | qmmp-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.cpp | 109 |
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); |
