diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-05-03 16:53:57 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2021-05-03 16:53:57 +0000 |
| commit | 4a740dfd51fa5f493da8e331c543dfdbb8b2a2f5 (patch) | |
| tree | ef06c9b9441422a99e5b6d9b2610e1e4cc8872d7 | |
| parent | 8837280e6e7db8f21b63a76d34a42d1a5869066f (diff) | |
| download | qmmp-4a740dfd51fa5f493da8e331c543dfdbb8b2a2f5.tar.gz qmmp-4a740dfd51fa5f493da8e331c543dfdbb8b2a2f5.tar.bz2 qmmp-4a740dfd51fa5f493da8e331c543dfdbb8b2a2f5.zip | |
optimization: do not load decoder plugins on startup
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@9935 90c681e8-e032-0410-971d-27865f9a5e38
| -rw-r--r-- | src/qmmp/abstractengine.cpp | 14 | ||||
| -rw-r--r-- | src/qmmp/abstractengine.h | 4 | ||||
| -rw-r--r-- | src/qmmp/decoder.cpp | 14 | ||||
| -rw-r--r-- | src/qmmp/decoder.h | 4 | ||||
| -rw-r--r-- | src/qmmp/metadatamanager.cpp | 13 | ||||
| -rw-r--r-- | src/qmmp/metadatamanager.h | 4 | ||||
| -rw-r--r-- | src/qmmp/qmmpplugincache.cpp | 13 | ||||
| -rw-r--r-- | src/qmmp/qmmpplugincache_p.h | 3 |
8 files changed, 54 insertions, 15 deletions
diff --git a/src/qmmp/abstractengine.cpp b/src/qmmp/abstractengine.cpp index 9b0bc6ab2..e3bda3114 100644 --- a/src/qmmp/abstractengine.cpp +++ b/src/qmmp/abstractengine.cpp @@ -125,6 +125,20 @@ QList<EngineFactory *> AbstractEngine::enabledFactories() return list; } +QStringList AbstractEngine::nameFilters() +{ + loadPlugins(); + QStringList filters; + for(QmmpPluginCache *item : qAsConst(*m_cache)) + { + if(m_disabledNames.contains(item->shortName())) + continue; + + filters << item->filters(); + } + return filters; +} + EngineFactory *AbstractEngine::findByFilePath(const QString& source) { loadPlugins(); diff --git a/src/qmmp/abstractengine.h b/src/qmmp/abstractengine.h index 7a6d26a98..e2455afaf 100644 --- a/src/qmmp/abstractengine.h +++ b/src/qmmp/abstractengine.h @@ -87,6 +87,10 @@ public: */ static QList<EngineFactory*> enabledFactories(); /*! + * Returns a list of file name filters, i.e. "*.mp3 *.mpg". + */ + static QStringList nameFilters(); + /*! * Returns EngineFactory pointer which supports file \b path or 0 if file \b path is unsupported. */ static EngineFactory *findByFilePath(const QString &path); diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp index 0d4c16b8f..e03dfdc23 100644 --- a/src/qmmp/decoder.cpp +++ b/src/qmmp/decoder.cpp @@ -343,3 +343,17 @@ QList<DecoderFactory *> Decoder::enabledFactories() } return list; } + +QStringList Decoder::nameFilters() +{ + loadPlugins(); + QStringList filters; + for(QmmpPluginCache *item : qAsConst(*m_cache)) + { + if(m_disabledNames.contains(item->shortName())) + continue; + + filters << item->filters(); + } + return filters; +} diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h index 3d71e16e4..ae3ec516f 100644 --- a/src/qmmp/decoder.h +++ b/src/qmmp/decoder.h @@ -153,6 +153,10 @@ public: */ static QList<DecoderFactory*> enabledFactories(); /*! + * Returns a list of file name filters, i.e. "*.mp3 *.mpg". + */ + static QStringList nameFilters(); + /*! * Returns plugin file path. * @param factory Decoder plugin factory. */ diff --git a/src/qmmp/metadatamanager.cpp b/src/qmmp/metadatamanager.cpp index 14c9f742e..4d43abf70 100644 --- a/src/qmmp/metadatamanager.cpp +++ b/src/qmmp/metadatamanager.cpp @@ -149,17 +149,8 @@ QStringList MetaDataManager::filters() const QStringList MetaDataManager::nameFilters() const { - QStringList filters; - for(const DecoderFactory *fact : Decoder::enabledFactories()) - { - if (Decoder::isEnabled(fact)) - filters << fact->properties().filters; - } - for(const EngineFactory *fact : AbstractEngine::enabledFactories()) - { - if (AbstractEngine::isEnabled(fact)) - filters << fact->properties().filters; - } + QStringList filters = Decoder::nameFilters(); + filters << AbstractEngine::nameFilters(); if(m_settings->determineFileTypeByContent()) filters << "*"; filters.removeDuplicates(); diff --git a/src/qmmp/metadatamanager.h b/src/qmmp/metadatamanager.h index 2490048fc..82487c40c 100644 --- a/src/qmmp/metadatamanager.h +++ b/src/qmmp/metadatamanager.h @@ -50,7 +50,7 @@ public: * @param ignoredPaths Pointer to a list of the files which should be ignored by the recursive search * (useful to exclude cue data files from playlist) */ - QList <TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts = TrackInfo::AllParts, QStringList *ignoredPaths = nullptr) const; + QList<TrackInfo *> createPlayList(const QString &path, TrackInfo::Parts parts = TrackInfo::AllParts, QStringList *ignoredPaths = nullptr) const; /*! * Creats metadata object, which provides full access to file tags. * @param url File path or URL. @@ -63,7 +63,7 @@ public: */ QStringList filters() const; /*! - * Returns a list of file name filters, i.e. "*.mp3 *.mpg" + * Returns a list of file name filters, i.e. "*.mp3 *.mpg". */ QStringList nameFilters() const; /*! diff --git a/src/qmmp/qmmpplugincache.cpp b/src/qmmp/qmmpplugincache.cpp index 70d96c491..713436dbc 100644 --- a/src/qmmp/qmmpplugincache.cpp +++ b/src/qmmp/qmmpplugincache.cpp @@ -46,13 +46,14 @@ QmmpPluginCache::QmmpPluginCache(const QString &file, QSettings *settings) { QStringList values = settings->value(m_path).toStringList(); - if(values.count() != 3) + if(values.count() != 4) update = true; else { m_shortName = values.at(0); m_priority = values.at(1).toInt(); - update = (info.lastModified().toString(Qt::ISODate) != values.at(2)); + m_filters = values.at(2).split(";"); + update = (info.lastModified().toString(Qt::ISODate) != values.at(3)); } } else @@ -65,6 +66,7 @@ QmmpPluginCache::QmmpPluginCache(const QString &file, QSettings *settings) { m_shortName = factory->properties().shortName; m_priority = factory->properties().priority; + m_filters = factory->properties().filters; } else if(OutputFactory *factory = outputFactory()) { @@ -75,6 +77,7 @@ QmmpPluginCache::QmmpPluginCache(const QString &file, QSettings *settings) { m_shortName = factory->properties().shortName; m_priority = 0; + m_filters = factory->properties().filters; } else if(EffectFactory *factory = effectFactory()) { @@ -97,6 +100,7 @@ QmmpPluginCache::QmmpPluginCache(const QString &file, QSettings *settings) QStringList values; values << m_shortName; values << QString::number(m_priority); + values << m_filters.join(";"); values << info.lastModified().toString(Qt::ISODate); settings->setValue(m_path, values); qDebug("QmmpPluginCache: added cache item \"%s=%s\"", @@ -116,6 +120,11 @@ const QString QmmpPluginCache::file() const return m_path; } +const QStringList &QmmpPluginCache::filters() const +{ + return m_filters; +} + int QmmpPluginCache::priority() const { return m_priority; diff --git a/src/qmmp/qmmpplugincache_p.h b/src/qmmp/qmmpplugincache_p.h index 3041d0126..dee5a0a7f 100644 --- a/src/qmmp/qmmpplugincache_p.h +++ b/src/qmmp/qmmpplugincache_p.h @@ -22,6 +22,7 @@ #define QMMPPLUGINCACHE_P_H #include <QString> +#include <QStringList> #include <QObject> #include <QSettings> @@ -41,6 +42,7 @@ public: const QString shortName() const; const QString file() const; + const QStringList &filters() const; int priority() const; bool hasError() const; @@ -57,6 +59,7 @@ private: void loadTranslation(const QString &translation); QString m_path; QString m_shortName; + QStringList m_filters; bool m_error = false; QObject *m_instance = nullptr; DecoderFactory *m_decoderFactory = nullptr; |
