diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-06-26 05:52:50 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2018-06-26 05:52:50 +0000 |
| commit | 2d7eebdbf07d374c23e40a01efec3d486f46a693 (patch) | |
| tree | 32583da06bc646af29edd16766bdf8506d6f1bbc | |
| parent | 0efd31a0967572e7be12e71a3a3040215f464e7e (diff) | |
| download | qmmp-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.cpp | 10 | ||||
| -rw-r--r-- | src/qmmp/decoder.cpp | 8 | ||||
| -rw-r--r-- | src/qmmp/effect.cpp | 10 | ||||
| -rw-r--r-- | src/qmmp/inputsource.cpp | 10 | ||||
| -rw-r--r-- | src/qmmp/output.cpp | 8 | ||||
| -rw-r--r-- | src/qmmp/qmmp.cpp | 28 | ||||
| -rw-r--r-- | src/qmmp/qmmp.h | 10 | ||||
| -rw-r--r-- | src/qmmp/qmmp.pro | 1 | ||||
| -rw-r--r-- | src/qmmp/visual.cpp | 14 | ||||
| -rw-r--r-- | src/qmmpui/commandlinemanager.cpp | 12 | ||||
| -rw-r--r-- | src/qmmpui/filedialog.cpp | 10 | ||||
| -rw-r--r-- | src/qmmpui/general.cpp | 10 | ||||
| -rw-r--r-- | src/qmmpui/playlistparser.cpp | 12 | ||||
| -rw-r--r-- | src/qmmpui/uiloader.cpp | 10 |
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; |
