aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-05-03 16:53:57 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2021-05-03 16:53:57 +0000
commit4a740dfd51fa5f493da8e331c543dfdbb8b2a2f5 (patch)
treeef06c9b9441422a99e5b6d9b2610e1e4cc8872d7 /src
parent8837280e6e7db8f21b63a76d34a42d1a5869066f (diff)
downloadqmmp-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
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/abstractengine.cpp14
-rw-r--r--src/qmmp/abstractengine.h4
-rw-r--r--src/qmmp/decoder.cpp14
-rw-r--r--src/qmmp/decoder.h4
-rw-r--r--src/qmmp/metadatamanager.cpp13
-rw-r--r--src/qmmp/metadatamanager.h4
-rw-r--r--src/qmmp/qmmpplugincache.cpp13
-rw-r--r--src/qmmp/qmmpplugincache_p.h3
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;