From a3c742d104f03cc7c86b112bee7a0e54e5ea67a9 Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Mon, 12 Nov 2018 21:47:42 +0000 Subject: feature to disable tag reading while loading a playlist(#925) git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8419 90c681e8-e032-0410-971d-27865f9a5e38 --- src/qmmpui/configdialog.cpp | 6 ++- src/qmmpui/fileloader.cpp | 94 ++++++++++++++++++++++++++++++++++------ src/qmmpui/fileloader_p.h | 1 + src/qmmpui/forms/configdialog.ui | 82 +++++++++++++++++++++++------------ src/qmmpui/qmmpuisettings.cpp | 23 +++++++--- src/qmmpui/qmmpuisettings.h | 15 ++++++- 6 files changed, 171 insertions(+), 50 deletions(-) diff --git a/src/qmmpui/configdialog.cpp b/src/qmmpui/configdialog.cpp index dc4b24fde..d23ce4768 100644 --- a/src/qmmpui/configdialog.cpp +++ b/src/qmmpui/configdialog.cpp @@ -106,7 +106,8 @@ void ConfigDialog::readSettings() //playlist options QmmpUiSettings *guis = QmmpUiSettings::instance(); m_ui->groupLineEdit->setText(guis->groupFormat()); - m_ui->metadataCheckBox->setChecked(guis->useMetaData()); + m_ui->metaDataCheckBox->setChecked(guis->useMetaData()); + m_ui->plMetaDataCheckBox->setChecked(guis->readMetaDataForPlayLists()); m_ui->underscoresCheckBox->setChecked(guis->convertUnderscore()); m_ui->per20CheckBox->setChecked(guis->convertTwenty()); m_ui->clearPrevPLCheckBox->setChecked(guis->clearPreviousPlayList()); @@ -376,7 +377,8 @@ void ConfigDialog::saveSettings() if (QmmpUiSettings *guis = QmmpUiSettings::instance()) { guis->setGroupFormat(m_ui->groupLineEdit->text().trimmed()); - guis->setUseMetaData(m_ui->metadataCheckBox->isChecked()); + guis->setUseMetaData(m_ui->metaDataCheckBox->isChecked()); + guis->setReadMetaDataForPlayLists(m_ui->plMetaDataCheckBox->isChecked()); guis->setConvertUnderscore(m_ui->underscoresCheckBox->isChecked()); guis->setConvertTwenty(m_ui->per20CheckBox->isChecked()); guis->setClearPreviousPlayList(m_ui->clearPrevPLCheckBox->isChecked()); diff --git a/src/qmmpui/fileloader.cpp b/src/qmmpui/fileloader.cpp index 37b6a2b75..ac3a43749 100644 --- a/src/qmmpui/fileloader.cpp +++ b/src/qmmpui/fileloader.cpp @@ -34,6 +34,7 @@ FileLoader::FileLoader(QObject *parent) : QThread(parent) qRegisterMetaType >("QList"); m_settings = QmmpUiSettings::instance(); m_finished = false; + m_readMetaDataForPlayLists = true; m_parts = TrackInfo::NoParts; connect(qApp, SIGNAL(aboutToQuit()), SLOT(finish())); } @@ -86,24 +87,89 @@ void FileLoader::insertPlayList(const QString &path, PlayListItem *before) { QList tracks = PlayListParser::loadPlaylist(path); - while (!tracks.isEmpty() && !m_finished) + if(m_readMetaDataForPlayLists) { - PlayListTrack *t = tracks.takeFirst(); - QList infoList = MetaDataManager::instance()->createPlayList(t->path(), m_parts); - if(infoList.count() != 1) //invalid or unsupported track + QList tmp; + while(!tracks.isEmpty() && !m_finished) { - qDeleteAll(infoList); - infoList.clear(); - delete t; - continue; + PlayListTrack *t = tracks.takeFirst(); + QList infoList = MetaDataManager::instance()->createPlayList(t->path(), m_parts); + if(infoList.count() != 1) //invalid or unsupported track + { + qDeleteAll(infoList); + infoList.clear(); + delete t; + continue; + } + + if(!infoList.first()->value(Qmmp::ALBUM).isEmpty() && !infoList.first()->value(Qmmp::ARTIST).isEmpty()) + t->updateMetaData(infoList.first()); + delete infoList.takeFirst(); + tmp << t; + if(tmp.count() > 30) + { + emit newTracksToInsert(before, tmp); + tmp.clear(); + } + } + if(!tmp.isEmpty() && !m_finished) + { + emit newTracksToInsert(before, tmp); + tmp.clear(); } - TrackInfo *info = infoList.takeFirst(); - if(!info->value(Qmmp::ALBUM).isEmpty() && !info->value(Qmmp::ARTIST).isEmpty()) - t->updateMetaData(info); + if(!tmp.isEmpty()) + { + qDeleteAll(tmp); + tmp.clear(); + } + } + else + { + QStringList protocols = MetaDataManager::instance()->protocols(); + QList filters; + foreach(const QString &pattern, MetaDataManager::instance()->nameFilters()) + filters << QRegExp(pattern, Qt::CaseInsensitive, QRegExp::Wildcard); - emit newTracksToInsert(before, QList() << t); //TODO optimization - delete info; + + foreach(PlayListTrack *t, tracks) + { + if(t->path().contains("://")) + { + if(!protocols.contains(t->path().section("://",0,0))) + { + tracks.removeAll(t); + delete t; + } + } + else if(!QFile::exists(t->path())) + { + tracks.removeAll(t); + delete t; + } + else + { + bool found = false; + foreach(const QRegExp &filter, filters) + { + if(filter.exactMatch(t->path())) + { + found = true; + break; + } + } + if(!found) + { + tracks.removeAll(t); + delete t; + } + } + } + if(!m_finished && !tracks.isEmpty()) + { + emit newTracksToInsert(before, tracks); + tracks.clear(); + } } //clear remaining tracks qDeleteAll(tracks); @@ -246,6 +312,7 @@ void FileLoader::addPlayList(const QString &fmt, const QByteArray &data) PlayListParser::loadFormats(); m_filters = MetaDataManager::instance()->nameFilters(); m_parts = m_settings->useMetaData() ? TrackInfo::AllParts : TrackInfo::NoParts; + m_readMetaDataForPlayLists = m_settings->readMetaDataForPlayLists(); } start(QThread::IdlePriority); } @@ -272,6 +339,7 @@ void FileLoader::insert(PlayListItem *before, const QStringList &paths) MetaDataManager::instance()->prepareForAnotherThread(); m_filters = MetaDataManager::instance()->nameFilters(); m_parts = m_settings->useMetaData() ? TrackInfo::AllParts : TrackInfo::NoParts; + m_readMetaDataForPlayLists = m_settings->readMetaDataForPlayLists(); } start(QThread::IdlePriority); } diff --git a/src/qmmpui/fileloader_p.h b/src/qmmpui/fileloader_p.h index d479ef786..f6b68f7c1 100644 --- a/src/qmmpui/fileloader_p.h +++ b/src/qmmpui/fileloader_p.h @@ -101,6 +101,7 @@ private: QStringList m_filters; QmmpUiSettings *m_settings; bool m_finished; + bool m_readMetaDataForPlayLists; TrackInfo::Parts m_parts; QMutex m_mutex; diff --git a/src/qmmpui/forms/configdialog.ui b/src/qmmpui/forms/configdialog.ui index dc7dde824..40d49f705 100644 --- a/src/qmmpui/forms/configdialog.ui +++ b/src/qmmpui/forms/configdialog.ui @@ -124,43 +124,53 @@ - + Load metadata from files - + Convert underscores to blanks - + Convert %20 to blanks - + Group format: - + - + ... + + + + false + + + Read tags while loading a playlist + + + @@ -891,12 +901,12 @@ setEnabled(bool) - 348 - 38 + 275 + 37 - 348 - 38 + 275 + 37 @@ -907,12 +917,12 @@ setEnabled(bool) - 348 - 38 + 275 + 37 - 348 - 38 + 275 + 37 @@ -923,12 +933,12 @@ setEnabled(bool) - 272 - 38 + 275 + 37 - 272 - 38 + 275 + 37 @@ -939,8 +949,8 @@ setEnabled(bool) - 272 - 38 + 275 + 37 272 @@ -955,8 +965,8 @@ reject() - 657 - 448 + 633 + 482 225 @@ -971,8 +981,8 @@ accept() - 657 - 448 + 633 + 482 141 @@ -987,12 +997,28 @@ setEnabled(bool) - 457 - 226 + 275 + 37 + + + 275 + 37 + + + + + metaDataCheckBox + toggled(bool) + plMetaDataCheckBox + setEnabled(bool) + + + 257 + 50 - 580 - 227 + 261 + 80 diff --git a/src/qmmpui/qmmpuisettings.cpp b/src/qmmpui/qmmpuisettings.cpp index bb52472b1..561e6c496 100644 --- a/src/qmmpui/qmmpuisettings.cpp +++ b/src/qmmpui/qmmpuisettings.cpp @@ -41,12 +41,13 @@ QmmpUiSettings::QmmpUiSettings(QObject *parent) : QObject(parent) m_convertTwenty = s.value ("convert_twenty", true).toBool(); m_useMetaData = s.value ("load_metadata", true).toBool(); m_autosave_playlist = s.value("autosave", true).toBool(); - m_repeate_list = s.value("repeate_list",false).toBool(); - m_shuffle = s.value("shuffle",false).toBool(); - m_groups_enabled = s.value("groups",false).toBool(); - m_repeat_track = s.value("repeate_track",false).toBool(); - m_no_pl_advance = s.value("no_advance",false).toBool(); + m_repeate_list = s.value("repeate_list", false).toBool(); + m_shuffle = s.value("shuffle", false).toBool(); + m_groups_enabled = s.value("groups", false).toBool(); + m_repeat_track = s.value("repeate_track", false).toBool(); + m_no_pl_advance = s.value("no_advance", false).toBool(); m_clear_prev_playlist = s.value("clear_previous", false).toBool(); + m_read_metadata_for_playlist = s.value("read_metadata_for_playlist", true).toBool(); s.endGroup(); s.beginGroup("General"); m_resume_on_startup = s.value("resume_on_startup", false).toBool(); @@ -179,6 +180,7 @@ void QmmpUiSettings::sync() s.setValue("PlayList/repeate_track", m_repeat_track); s.setValue("PlayList/no_advance", m_no_pl_advance); s.setValue("PlayList/clear_previous", m_clear_prev_playlist); + s.setValue("PlayList/read_metadata_for_playlist", m_read_metadata_for_playlist); s.setValue("General/resume_on_startup", m_resume_on_startup); s.setValue("General/restrict_filters", m_restrict_filters); s.setValue("General/exclude_filters", m_exclude_filters); @@ -299,3 +301,14 @@ bool QmmpUiSettings::clearPreviousPlayList() const { return m_clear_prev_playlist; } + +bool QmmpUiSettings::readMetaDataForPlayLists() const +{ + return m_read_metadata_for_playlist; +} + +void QmmpUiSettings::setReadMetaDataForPlayLists(bool enabled) +{ + m_read_metadata_for_playlist = enabled; + m_timer->start(); +} diff --git a/src/qmmpui/qmmpuisettings.h b/src/qmmpui/qmmpuisettings.h index 685122ccb..36e0f930a 100644 --- a/src/qmmpui/qmmpuisettings.h +++ b/src/qmmpui/qmmpuisettings.h @@ -159,7 +159,7 @@ public: */ void setAutoSavePlayList(bool enabled); /*! - * Return the current setting for the playlist auto-save option. + * Returns the current setting for the playlist auto-save option. * @return \b true if the playlist should be saved automatically, \b false * otherwise. */ @@ -170,11 +170,21 @@ public: */ void setClearPreviousPlayList(bool enabled); /*! - * Return the current setting for the option to clear playlist when opening new one. + * Returns the current setting for the option to clear playlist when opening new one. * @return \b true if the playlist should be saved automatically, \b false * otherwise. */ bool clearPreviousPlayList() const; + /*! + * Returns the current setting for the option to read tags when loading a playlist. + * \return \b true if tag reading is enabled, \b false otherwise. + */ + bool readMetaDataForPlayLists() const; + /*! + * Enable/disable tag reading when loading a playlist. + * @param enabled New setting for this option (\b true to enable) + */ + void setReadMetaDataForPlayLists(bool enabled); /*! * Returns a pointer to the QmmpUiSettings instance. */ @@ -256,6 +266,7 @@ private: bool m_repeat_track; bool m_no_pl_advance; bool m_clear_prev_playlist; + bool m_read_metadata_for_playlist; //general bool m_resume_on_startup; QStringList m_exclude_filters, m_restrict_filters; -- cgit v1.2.3-13-gbd6f