diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/qmmp/decoder.cpp | 19 | ||||
| -rw-r--r-- | src/qmmp/decoder.h | 6 | ||||
| -rw-r--r-- | src/qmmp/decoderfactory.h | 2 | ||||
| -rw-r--r-- | src/qmmp/effectfactory.h | 2 | ||||
| -rw-r--r-- | src/qmmpui/configdialog.cpp | 8 |
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); /* |
