aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-06-26 05:52:50 +0000
committertrialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38>2018-06-26 05:52:50 +0000
commit2d7eebdbf07d374c23e40a01efec3d486f46a693 (patch)
tree32583da06bc646af29edd16766bdf8506d6f1bbc
parent0efd31a0967572e7be12e71a3a3040215f464e7e (diff)
downloadqmmp-2d7eebdbf07d374c23e40a01efec3d486f46a693.tar.gz
qmmp-2d7eebdbf07d374c23e40a01efec3d486f46a693.tar.bz2
qmmp-2d7eebdbf07d374c23e40a01efec3d486f46a693.zip
improved plugin search
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@8058 90c681e8-e032-0410-971d-27865f9a5e38
-rw-r--r--src/qmmp/abstractengine.cpp10
-rw-r--r--src/qmmp/decoder.cpp8
-rw-r--r--src/qmmp/effect.cpp10
-rw-r--r--src/qmmp/inputsource.cpp10
-rw-r--r--src/qmmp/output.cpp8
-rw-r--r--src/qmmp/qmmp.cpp28
-rw-r--r--src/qmmp/qmmp.h10
-rw-r--r--src/qmmp/qmmp.pro1
-rw-r--r--src/qmmp/visual.cpp14
-rw-r--r--src/qmmpui/commandlinemanager.cpp12
-rw-r--r--src/qmmpui/filedialog.cpp10
-rw-r--r--src/qmmpui/general.cpp10
-rw-r--r--src/qmmpui/playlistparser.cpp12
-rw-r--r--src/qmmpui/uiloader.cpp10
14 files changed, 62 insertions, 91 deletions
diff --git a/src/qmmp/abstractengine.cpp b/src/qmmp/abstractengine.cpp
index 3a57ba8f0..cdc324bf7 100644
--- a/src/qmmp/abstractengine.cpp
+++ b/src/qmmp/abstractengine.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009-2016 by Ilya Kotov *
+ * Copyright (C) 2009-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -53,13 +53,9 @@ void AbstractEngine::loadPlugins()
m_cache = new QList<QmmpPluginCache*>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Engines");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Engines"))
{
- QmmpPluginCache *item = new QmmpPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpPluginCache *item = new QmmpPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index 0db755592..f0139e3dd 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -130,13 +130,9 @@ void Decoder::loadPlugins()
m_cache = new QList<QmmpPluginCache*>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Input");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Input"))
{
- QmmpPluginCache *item = new QmmpPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpPluginCache *item = new QmmpPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmp/effect.cpp b/src/qmmp/effect.cpp
index 54b19dc39..32c9b0e63 100644
--- a/src/qmmp/effect.cpp
+++ b/src/qmmp/effect.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2007-2017 by Ilya Kotov *
+ * Copyright (C) 2007-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -85,13 +85,9 @@ void Effect::loadPlugins()
m_cache = new QList<QmmpPluginCache *>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Effect");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach(QString filePath, Qmmp::findPlugins("Effect"))
{
- QmmpPluginCache *item = new QmmpPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpPluginCache *item = new QmmpPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmp/inputsource.cpp b/src/qmmp/inputsource.cpp
index 68023ba54..27da7a53a 100644
--- a/src/qmmp/inputsource.cpp
+++ b/src/qmmp/inputsource.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2009-2013 by Ilya Kotov *
+ * Copyright (C) 2009-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -214,13 +214,9 @@ void InputSource::loadPlugins()
m_cache = new QList<QmmpPluginCache*>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Transports");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Transports"))
{
- QmmpPluginCache *item = new QmmpPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpPluginCache *item = new QmmpPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmp/output.cpp b/src/qmmp/output.cpp
index faddeb2fb..10b75229b 100644
--- a/src/qmmp/output.cpp
+++ b/src/qmmp/output.cpp
@@ -83,13 +83,9 @@ void Output::loadPlugins()
m_cache = new QList<QmmpPluginCache *>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Output");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Output"))
{
- QmmpPluginCache *item = new QmmpPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpPluginCache *item = new QmmpPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmp/qmmp.cpp b/src/qmmp/qmmp.cpp
index caa65fbb6..5c7b659dc 100644
--- a/src/qmmp/qmmp.cpp
+++ b/src/qmmp/qmmp.cpp
@@ -37,12 +37,12 @@ QString Qmmp::m_langID;
QString Qmmp::m_appDir;
#endif
-const QString Qmmp::configFile()
+QString Qmmp::configFile()
{
return configDir() + "/qmmprc";
}
-const QString Qmmp::configDir()
+QString Qmmp::configDir()
{
#ifdef Q_OS_WIN
if(m_configDir.isEmpty())
@@ -64,7 +64,7 @@ void Qmmp::setConfigDir(const QString &path)
m_configDir = path;
}
-const QString Qmmp::strVersion()
+QString Qmmp::strVersion()
{
QString ver = QString("%1.%2.%3")
.arg(QMMP_VERSION_MAJOR)
@@ -80,21 +80,33 @@ const QString Qmmp::strVersion()
return ver;
}
-const QString Qmmp::pluginsPath()
+QString Qmmp::pluginPath()
{
QByteArray path = qgetenv("QMMP_PLUGINS");
- if (!path.isEmpty())
- return path;
+ if(!path.isEmpty())
+ return path;
+ QString fallbackPath = qApp->applicationDirPath() + "/../lib/qmmp-" STR(QMMP_VERSION_MAJOR) "." STR(QMMP_VERSION_MINOR);
#ifdef QMMP_PLUGIN_DIR
- QDir dir(QMMP_PLUGIN_DIR "/" STR(QMMP_VERSION_MAJOR) "." STR(QMMP_VERSION_MINOR));
+ QDir dir(QMMP_PLUGIN_DIR);
#elif defined(Q_OS_WIN) && !defined(Q_OS_CYGWIN)
QDir dir(qApp->applicationDirPath() + "/plugins");
#else
- QDir dir(qApp->applicationDirPath() + "/../lib/qmmp-" STR(QMMP_VERSION_MAJOR) "." STR(QMMP_VERSION_MINOR));
+ QDir dir(fallbackPath);
#endif
+ if(!dir.exists())
+ dir = QDir(fallbackPath);
return dir.canonicalPath();
}
+QStringList Qmmp::findPlugins(const QString &prefix)
+{
+ QDir pluginDir(pluginPath() + "/" + prefix);
+ QStringList paths;
+ foreach (QFileInfo info, pluginDir.entryInfoList(QStringList() << "*.dll" << "*.so", QDir::Files))
+ paths << info.canonicalFilePath();
+ return paths;
+}
+
QString Qmmp::systemLanguageID()
{
if(m_langID.isEmpty())
diff --git a/src/qmmp/qmmp.h b/src/qmmp/qmmp.h
index 0be35e05f..2f22a1327 100644
--- a/src/qmmp/qmmp.h
+++ b/src/qmmp/qmmp.h
@@ -142,11 +142,11 @@ public:
/*!
* Returns the configuration file name, including the path.
*/
- static const QString configFile();
+ static QString configFile();
/*!
* Returns the configuration directory path.
*/
- static const QString configDir();
+ static QString configDir();
/*!
* Overrides default configuration directory path.
*/
@@ -154,11 +154,13 @@ public:
/*!
* Returns %Qmmp library version.
*/
- static const QString strVersion();
+ static QString strVersion();
/*!
* Returns the location of the installed Qmmp plugins.
*/
- static const QString pluginsPath();
+ static QString pluginPath();
+ static QStringList findPlugins(const QString &prefix);
+
/*!
* Returns system language if uiLanguageID() is 'auto'. Otherwise returns uiLanguageID().
*/
diff --git a/src/qmmp/qmmp.pro b/src/qmmp/qmmp.pro
index c7a9ec0b5..6f7b70ed6 100644
--- a/src/qmmp/qmmp.pro
+++ b/src/qmmp/qmmp.pro
@@ -93,6 +93,7 @@ unix {
!isEmpty(SVN_REVISION) {
DEFINES += SVN_REVISION=\\\"$$SVN_REVISION\\\"
}
+ DEFINES += QMMP_PLUGIN_DIR=\\\"$$PLUGIN_DIR\\\"
}
win32 {
diff --git a/src/qmmp/visual.cpp b/src/qmmp/visual.cpp
index b476a91a5..eb7062dda 100644
--- a/src/qmmp/visual.cpp
+++ b/src/qmmp/visual.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2017 by Ilya Kotov *
+ * Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -244,16 +244,12 @@ void Visual::checkFactories()
m_factories = new QList<VisualFactory *>;
m_files = new QHash <VisualFactory*, QString>;
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Visual");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Visual"))
{
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ QPluginLoader loader(filePath);
QObject *plugin = loader.instance();
if (loader.isLoaded())
- qDebug("Visual: loaded plugin %s", qPrintable(fileName));
+ qDebug("Visual: loaded plugin %s", qPrintable(QFileInfo(filePath).fileName()));
else
qWarning("Visual: %s", qPrintable(loader.errorString ()));
@@ -264,7 +260,7 @@ void Visual::checkFactories()
if (factory)
{
m_factories->append(factory);
- m_files->insert(factory, pluginsDir.absoluteFilePath(fileName));
+ m_files->insert(factory, filePath);
qApp->installTranslator(factory->createTranslator(qApp));
}
}
diff --git a/src/qmmpui/commandlinemanager.cpp b/src/qmmpui/commandlinemanager.cpp
index e50baaa9b..8074d5b12 100644
--- a/src/qmmpui/commandlinemanager.cpp
+++ b/src/qmmpui/commandlinemanager.cpp
@@ -43,16 +43,12 @@ void CommandLineManager::checkOptions()
m_options = new QList<CommandLineOption *>;
m_files = new QHash<CommandLineOption*, QString>;
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("CommandLineOptions");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("CommandLineOptions"))
{
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ QPluginLoader loader(filePath);
QObject *plugin = loader.instance();
if (loader.isLoaded())
- /*qDebug("CommandLineManager: loaded plugin %s", qPrintable(fileName))*/;
+ /*qDebug("CommandLineManager: loaded plugin %s", qPrintable(QFileInfo(filePath).filePath()));*/;
else
qWarning("CommandLineManager: %s", qPrintable(loader.errorString ()));
@@ -63,7 +59,7 @@ void CommandLineManager::checkOptions()
if (option)
{
m_options->append(option);
- m_files->insert(option, pluginsDir.absoluteFilePath(fileName));
+ m_files->insert(option, filePath);
qApp->installTranslator(option->createTranslator(qApp));
}
}
diff --git a/src/qmmpui/filedialog.cpp b/src/qmmpui/filedialog.cpp
index 5b01db370..60f9c6e97 100644
--- a/src/qmmpui/filedialog.cpp
+++ b/src/qmmpui/filedialog.cpp
@@ -1,5 +1,5 @@
/**************************************************************************
-* Copyright (C) 2008-2016 by Ilya Kotov *
+* Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -44,13 +44,9 @@ void FileDialog::loadPlugins()
m_cache->append(new QmmpUiPluginCache(new QtFileDialogFactory));
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("FileDialogs");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("FileDialogs"))
{
- QmmpUiPluginCache *item = new QmmpUiPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpUiPluginCache *item = new QmmpUiPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmpui/general.cpp b/src/qmmpui/general.cpp
index d93dcd5c6..c233ef2d4 100644
--- a/src/qmmpui/general.cpp
+++ b/src/qmmpui/general.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2014 by Ilya Kotov *
+ * Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -37,13 +37,9 @@ void General::loadPlugins()
m_cache = new QList<QmmpUiPluginCache*>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("General");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("General"))
{
- QmmpUiPluginCache *item = new QmmpUiPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpUiPluginCache *item = new QmmpUiPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;
diff --git a/src/qmmpui/playlistparser.cpp b/src/qmmpui/playlistparser.cpp
index cb2f144ae..2d8f67f06 100644
--- a/src/qmmpui/playlistparser.cpp
+++ b/src/qmmpui/playlistparser.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2008-2017 by Ilya Kotov *
+ * Copyright (C) 2008-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -163,16 +163,12 @@ void PlayListParser::loadFormats()
return;
m_formats = new QList<PlayListFormat*>();
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("PlayListFormats");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("PlayListFormats"))
{
- QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ QPluginLoader loader(filePath);
QObject *plugin = loader.instance();
if (loader.isLoaded())
- qDebug("PlayListParser: loaded plugin %s", qPrintable(fileName));
+ qDebug("PlayListParser: loaded plugin %s", qPrintable(QFileInfo(filePath).filePath()));
else
qWarning("PlayListParser: %s", qPrintable(loader.errorString ()));
diff --git a/src/qmmpui/uiloader.cpp b/src/qmmpui/uiloader.cpp
index 99e7a02ff..1c742d587 100644
--- a/src/qmmpui/uiloader.cpp
+++ b/src/qmmpui/uiloader.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2011-2017 by Ilya Kotov *
+ * Copyright (C) 2011-2018 by Ilya Kotov *
* forkotov02@ya.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -32,13 +32,9 @@ void UiLoader::loadPlugins()
m_cache = new QList<QmmpUiPluginCache*>;
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
- QDir pluginsDir (Qmmp::pluginsPath());
- pluginsDir.cd("Ui");
- QStringList filters;
- filters << "*.dll" << "*.so";
- foreach (QString fileName, pluginsDir.entryList(filters, QDir::Files))
+ foreach (QString filePath, Qmmp::findPlugins("Ui"))
{
- QmmpUiPluginCache *item = new QmmpUiPluginCache(pluginsDir.absoluteFilePath(fileName), &settings);
+ QmmpUiPluginCache *item = new QmmpUiPluginCache(filePath, &settings);
if(item->hasError())
{
delete item;