diff options
| -rw-r--r-- | src/app/builtincommandlineoption.cpp | 41 | ||||
| -rw-r--r-- | src/qmmp/metadatamanager.cpp | 13 | ||||
| -rw-r--r-- | src/qmmp/metadatamanager.h | 4 | ||||
| -rw-r--r-- | src/qmmpui/fileloader.cpp | 2 |
4 files changed, 44 insertions, 16 deletions
diff --git a/src/app/builtincommandlineoption.cpp b/src/app/builtincommandlineoption.cpp index 8ba8df509..372d63cc9 100644 --- a/src/app/builtincommandlineoption.cpp +++ b/src/app/builtincommandlineoption.cpp @@ -25,6 +25,8 @@ #include <qmmpui/filedialog.h> #include <qmmpui/uihelper.h> #include <qmmpui/qmmpuisettings.h> +#include <qmmpui/playlistdownloader.h> +#include <qmmpui/playlistparser.h> #include <qmmp/metadatamanager.h> #include "builtincommandlineoption.h" @@ -80,22 +82,29 @@ void BuiltinCommandLineOption::executeCommand(const QString &option_string, SoundCore *core = SoundCore::instance(); MediaPlayer *player = MediaPlayer::instance(); PlayListManager *pl_manager = PlayListManager::instance(); + QmmpUiSettings *settings = QmmpUiSettings::instance(); if(!core || !player) return; if(option_string == "--enqueue" || option_string == "-e" || option_string.isEmpty()) { if(args.isEmpty()) return; - QStringList full_path_list; + QStringList full_path_list, remote_pls_list; foreach(QString s, args) { - if ((s.startsWith("/")) || (s.contains("://"))) //is it absolute path or url? - full_path_list << s; - else + if (s.startsWith("/")) //absolute path + full_path_list << s; + else if(s.contains("://")) //url + { + if(PlayListParser::findByUrl(s)) //remote playlist + remote_pls_list << s; + else + full_path_list << s; //url + } + else //relative path full_path_list << cwd + "/" + s; } //default playlist - QmmpUiSettings *settings = QmmpUiSettings::instance(); if(settings->useDefaultPlayList()) { if(!pl_manager->playListNames().contains(settings->defaultPlayListName())) @@ -103,6 +112,8 @@ void BuiltinCommandLineOption::executeCommand(const QString &option_string, pl_manager->selectPlayList(settings->defaultPlayListName()); } pl_manager->activatePlayList(pl_manager->selectedPlayList()); + m_model = pl_manager->selectedPlayList(); + if(option_string.isEmpty()) //clear playlist if option is empty { if (core->state() != Qmmp::Stopped) @@ -112,15 +123,21 @@ void BuiltinCommandLineOption::executeCommand(const QString &option_string, } m_model = pl_manager->selectedPlayList(); m_model->clear(); - connect(m_model, SIGNAL(itemAdded(PlayListItem*)), player, SLOT(play())); - connect(core, SIGNAL(stateChanged(Qmmp::State)), SLOT(disconnectPl())); - connect(m_model, SIGNAL(loaderFinished()), SLOT(disconnectPl())); - m_model->add(full_path_list); + if(!full_path_list.isEmpty()) + { + connect(m_model, SIGNAL(itemAdded(PlayListItem*)), player, SLOT(play())); + connect(core, SIGNAL(stateChanged(Qmmp::State)), SLOT(disconnectPl())); + connect(m_model, SIGNAL(loaderFinished()), SLOT(disconnectPl())); + } } - else + m_model->add(full_path_list); + if(!remote_pls_list.isEmpty()) { - pl_manager->selectedPlayList()->add(full_path_list); - return; + PlayListDownloader *downloader = new PlayListDownloader(this); + connect(downloader, SIGNAL(done(QStringList)), m_model, SLOT(add(QStringList))); + connect(downloader, SIGNAL(done(QStringList)), downloader, SLOT(deleteLater())); + connect(downloader, SIGNAL(error(QString)), downloader, SLOT(deleteLater())); + downloader->start(remote_pls_list.at(0)); } } else if (option_string == "--play" || option_string == "-p") diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp index 0fa5cf93b..21bfef294 100644 --- a/src/qmmp/metadatamanager.cpp +++ b/src/qmmp/metadatamanager.cpp @@ -247,10 +247,15 @@ QFileInfoList MetaDataManager::findCoverFiles(QDir dir, int depth) const return file_list; } - void MetaDataManager::clearCoverChache() - { - m_cover_cache.clear(); - } +void MetaDataManager::clearCoverChache() +{ + m_cover_cache.clear(); +} + +void MetaDataManager::prepareForAnotherThread() +{ + protocols(); //this hack should load all requied plugins +} MetaDataManager *MetaDataManager::instance() { diff --git a/src/qmmp/metadatamanager.h b/src/qmmp/metadatamanager.h index b96cfc89d..b0bc46c91 100644 --- a/src/qmmp/metadatamanager.h +++ b/src/qmmp/metadatamanager.h @@ -95,6 +95,10 @@ public: */ void clearCoverChache(); /*! + * Prepares object for usage by another thread to avoid warnings about parent the different thread + */ + void prepareForAnotherThread(); + /*! * Returns a pointer to the MetaDataManager instance. */ static MetaDataManager* instance(); diff --git a/src/qmmpui/fileloader.cpp b/src/qmmpui/fileloader.cpp index 4df1eec40..98e881872 100644 --- a/src/qmmpui/fileloader.cpp +++ b/src/qmmpui/fileloader.cpp @@ -87,6 +87,7 @@ void FileLoader::run() void FileLoader::loadFile(const QString &path) { m_files.enqueue(path); + MetaDataManager::instance()->prepareForAnotherThread(); m_filters = MetaDataManager::instance()->nameFilters(); start(QThread::IdlePriority); } @@ -94,6 +95,7 @@ void FileLoader::loadFile(const QString &path) void FileLoader::loadFiles(const QStringList &paths) { m_files << paths; + MetaDataManager::instance()->prepareForAnotherThread(); m_filters = MetaDataManager::instance()->nameFilters(); start(QThread::IdlePriority); } |
