}
void Player::loadBackend() {
- m_pluginManager.setPluginDirectory("backendplugins");
+#ifdef Q_OS_WIN
+ QStringList pluginPaths{"backendplugins"};
+#else
+ QStringList pluginPaths{"/usr/lib/aniplayer/backendplugins",
+ "backendplugins"};
+#endif
+ m_pluginManager.setPluginDirectories(pluginPaths);
m_pluginManager.setPluginPrefix("backend");
m_pluginManager.loadDefaultPlugin();
m_backend = m_pluginManager.instance<BackendPluginBase>();
#include "pluginmanager.h"
+#include <QLoggingCategory>
+
+Q_LOGGING_CATEGORY(pluginManagerCategory, "PluginManager")
+
PluginManager::PluginManager() {}
QString PluginManager::errorString() const { return m_loader.errorString(); }
-QString PluginManager::pluginDirectory() const { return m_pluginDirectory; }
+QStringList PluginManager::pluginDirectories() const {
+ return m_pluginDirectories;
+}
QString PluginManager::pluginPrefix() const { return m_pluginPrefix; }
-void PluginManager::setPluginDirectory(QString pluginDirectory) {
- if (m_pluginDirectory == pluginDirectory)
+void PluginManager::setPluginDirectories(QStringList pluginDirectories) {
+ if (m_pluginDirectories == pluginDirectories)
return;
- m_pluginDirectory = pluginDirectory;
- emit pluginDirectoryChanged(pluginDirectory);
+ m_pluginDirectories = pluginDirectories;
+ emit pluginDirectoriesChanged(pluginDirectories);
}
void PluginManager::setPluginPrefix(QString pluginPrefix) {
if (!m_loader.unload())
return false;
- QString pluginPath = QString{"%1/%2_%3"}
- .arg(m_pluginDirectory)
- .arg(m_pluginPrefix)
- .arg(plugin);
- m_loader.setFileName(pluginPath);
+ for (const auto &path : m_pluginDirectories) {
+ const QString pluginPath =
+ QString{"%1/%2_%3"}.arg(path).arg(m_pluginPrefix).arg(plugin);
+ qCInfo(pluginManagerCategory) << "Trying to load plugin" << pluginPath;
+ m_loader.setFileName(pluginPath);
- m_loader.load();
+ if (m_loader.load()) {
+ qCInfo(pluginManagerCategory) << "Load successful";
+ break;
+ }
+ }
+
+ if (!m_loader.isLoaded())
+ qCCritical(pluginManagerCategory) << "Failed to load plugin" << plugin;
return m_loader.isLoaded();
}
#include <QObject>
#include <QPluginLoader>
+#include <QStringList>
class PluginManager : public QObject {
Q_OBJECT
- Q_PROPERTY(QString pluginDirectory READ pluginDirectory WRITE
- setPluginDirectory NOTIFY pluginDirectoryChanged)
+ Q_PROPERTY(QStringList pluginDirectories READ pluginDirectories WRITE
+ setPluginDirectories NOTIFY pluginDirectoriesChanged)
Q_PROPERTY(QString pluginPrefix READ pluginPrefix WRITE setPluginPrefix NOTIFY
pluginPrefixChanged)
public:
QString errorString() const;
- QString pluginDirectory() const;
+ QStringList pluginDirectories() const;
QString pluginPrefix() const;
template <typename Interface> Interface *instance() {
}
public slots:
- void setPluginDirectory(QString pluginDirectory);
+ void setPluginDirectories(QStringList pluginDirectories);
void setPluginPrefix(QString pluginPrefix);
bool load(const QString &plugin);
void loadDefaultPlugin();
signals:
- void pluginDirectoryChanged(QString pluginDirectory);
+ void pluginDirectoriesChanged(QStringList pluginDirectories);
void pluginPrefixChanged(QString pluginPrefix);
private:
- QString m_pluginDirectory;
+ QStringList m_pluginDirectories;
QString m_pluginPrefix;
QPluginLoader m_loader;
};