aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/qmmp/decoder.cpp19
-rw-r--r--src/qmmp/decoder.h6
-rw-r--r--src/qmmp/decoderfactory.h2
-rw-r--r--src/qmmp/effectfactory.h2
-rw-r--r--src/qmmpui/configdialog.cpp8
5 files changed, 24 insertions, 13 deletions
diff --git a/src/qmmp/decoder.cpp b/src/qmmp/decoder.cpp
index 54dfbc20c..1b556cfdd 100644
--- a/src/qmmp/decoder.cpp
+++ b/src/qmmp/decoder.cpp
@@ -88,7 +88,13 @@ QMap<Qmmp::MetaData, QString> Decoder::takeMetaData()
QList<DecoderFactory*> *Decoder::m_factories = 0;
QList<DecoderFactory*> *Decoder::m_disabledFactories = 0;
DecoderFactory *Decoder::m_lastFactory = 0;
-QStringList Decoder::m_files;
+QHash <DecoderFactory*, QString> *Decoder::m_files = 0;
+
+//sort factories by priority
+static bool _decoderLessComparator(DecoderFactory* f1, DecoderFactory* f2)
+{
+ return f1->properties().priority < f2->properties().priority;
+}
void Decoder::checkFactories()
{
@@ -97,9 +103,9 @@ void Decoder::checkFactories()
QSettings settings (Qmmp::configFile(), QSettings::IniFormat);
QStringList disabledNames = settings.value("Decoder/disabled_plugins").toStringList ();
- m_files.clear();
m_factories = new QList<DecoderFactory *>;
m_disabledFactories = new QList<DecoderFactory *>;
+ m_files = new QHash <DecoderFactory*, QString>;
QDir pluginsDir (Qmmp::pluginsPath());
pluginsDir.cd("Input");
@@ -112,13 +118,14 @@ void Decoder::checkFactories()
else
qWarning("Decoder: %s", qPrintable(loader.errorString ()));
DecoderFactory *factory = 0;
+
if (plugin)
factory = qobject_cast<DecoderFactory *>(plugin);
if (factory)
{
m_factories->append(factory);
- m_files << pluginsDir.absoluteFilePath(fileName);
+ m_files->insert(factory, pluginsDir.absoluteFilePath(fileName));
qApp->installTranslator(factory->createTranslator(qApp));
if(disabledNames.contains(factory->properties().shortName))
m_disabledFactories->append(factory);
@@ -136,17 +143,19 @@ void Decoder::checkFactories()
disabledNames.removeAll(name);
}
settings.setValue("Decoder/disabled_plugins",disabledNames);
+ qSort(m_factories->begin(), m_factories->end(), _decoderLessComparator);
}
}
-QStringList Decoder::files()
+QString Decoder::filePath(DecoderFactory *factory)
{
checkFactories();
- return m_files;
+ return m_files->value(factory);
}
QStringList Decoder::protocols()
{
+ checkFactories();
QStringList protocolsList;
foreach(DecoderFactory *f, *m_factories)
{
diff --git a/src/qmmp/decoder.h b/src/qmmp/decoder.h
index 729580ebf..be1336bc7 100644
--- a/src/qmmp/decoder.h
+++ b/src/qmmp/decoder.h
@@ -128,9 +128,9 @@ public:
*/
static QList<DecoderFactory*> *factories();
/*!
- * Returns a list of input plugin file names.
+ * Returns file path of the \b factory
*/
- static QStringList files();
+ static QString filePath(DecoderFactory *factory);
/*!
* Returns a list of supported protocols (including meta-protocols).
* This fuction ignores disabled decoders.
@@ -162,7 +162,7 @@ private:
static QList<DecoderFactory*> *m_factories;
static QList<DecoderFactory*> *m_disabledFactories;
static DecoderFactory *m_lastFactory;
- static QStringList m_files;
+ static QHash <DecoderFactory*, QString> *m_files;
AudioParameters m_parameters;
QIODevice *m_input;
bool m_hasMetaData;
diff --git a/src/qmmp/decoderfactory.h b/src/qmmp/decoderfactory.h
index 3d2901d7e..0716b0fb8 100644
--- a/src/qmmp/decoderfactory.h
+++ b/src/qmmp/decoderfactory.h
@@ -48,6 +48,7 @@ public:
hasSettings = false;
noInput = false;
noOutput = false;
+ priority = 0;
}
QString name; /*!< Input plugin full name */
QString shortName; /*!< Input plugin short name for internal usage */
@@ -60,6 +61,7 @@ public:
bool hasSettings; /*!< Should be \b true if plugin has settings dialog, otherwise \b false */
bool noInput; /*!< Should be \b true if plugin has own input, otherwise \b false */
bool noOutput; /*!< Should be \b true if plugin has own output, otherwise \b false */
+ int priority; /*!< Decoder priority. Decoders with lowest value will be used first */
};
/*! @brief Input plugin interface (decoder factory).
* @author Ilya Kotov <forkotov02@hotmail.ru>
diff --git a/src/qmmp/effectfactory.h b/src/qmmp/effectfactory.h
index 1471d9af8..a258fa9f7 100644
--- a/src/qmmp/effectfactory.h
+++ b/src/qmmp/effectfactory.h
@@ -55,7 +55,7 @@ public:
QString shortName; /*!< Effect plugin short name for internal usage */
bool hasAbout; /*!< Should be \b true if plugin has about dialog, otherwise returns \b false */
bool hasSettings; /*!< Should be \b true if plugin has settings dialog, otherwise returns \b false */
- int priority; /*!< Effect priority. Effecs with higher priority are applied first */
+ int priority; /*!< Effect priority. Effecs with higher priority will be applied first */
};
/*! @brief Effect plugin interface (effect factory).
* @author Ilya Kotov <forkotov02@hotmail.ru>
diff --git a/src/qmmpui/configdialog.cpp b/src/qmmpui/configdialog.cpp
index 19c1cc00e..9017f4ee3 100644
--- a/src/qmmpui/configdialog.cpp
+++ b/src/qmmpui/configdialog.cpp
@@ -170,10 +170,10 @@ void ConfigDialog::loadPluginsInfo()
load input plugins information
*/
item = new QTreeWidgetItem (m_ui->treeWidget, QStringList() << tr("Decoders"));
- QList <DecoderFactory *> *decoders = Decoder::factories();
- files = Decoder::files();
- for (int i = 0; i < decoders->count (); ++i)
- new PluginItem (item, decoders->at(i), files.at (i));
+ foreach(DecoderFactory *factory, *Decoder::factories())
+ {
+ new PluginItem (item, factory, Decoder::filePath(factory));
+ }
m_ui->treeWidget->addTopLevelItem(item);
item->setExpanded(true);
/*