summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--subsurface-core/CMakeLists.txt1
-rw-r--r--subsurface-core/pluginmanager.cpp44
-rw-r--r--subsurface-core/pluginmanager.h19
3 files changed, 64 insertions, 0 deletions
diff --git a/subsurface-core/CMakeLists.txt b/subsurface-core/CMakeLists.txt
index 60efb7d92..e56f8bb34 100644
--- a/subsurface-core/CMakeLists.txt
+++ b/subsurface-core/CMakeLists.txt
@@ -72,6 +72,7 @@ set(SUBSURFACE_CORE_LIB_SRCS
qtserialbluetooth.cpp
metrics.cpp
color.cpp
+ pluginmanager.cpp
${SERIAL_FTDI}
${PLATFORM_SRC}
${BT_CORE_SRC_FILES}
diff --git a/subsurface-core/pluginmanager.cpp b/subsurface-core/pluginmanager.cpp
new file mode 100644
index 000000000..41d226f61
--- /dev/null
+++ b/subsurface-core/pluginmanager.cpp
@@ -0,0 +1,44 @@
+#include "pluginmanager.h"
+
+#include <QApplication>
+#include <QDir>
+#include <QPluginLoader>
+
+static QList<ISocialNetworkIntegration*> _socialNetworks;
+
+PluginManager& PluginManager::instance() {
+ static PluginManager self;
+ return self;
+}
+
+void PluginManager::loadPlugins() {
+ QDir pluginsDir(qApp->applicationDirPath());
+
+#if defined(Q_OS_WIN)
+ if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
+ pluginsDir.cdUp();
+#elif defined(Q_OS_MAC)
+ if (pluginsDir.dirName() == "MacOS") {
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ }
+#endif
+ pluginsDir.cd("plugins");
+
+ foreach (const QString& fileName, pluginsDir.entryList(QDir::Files)) {
+ QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ QObject *plugin = loader.instance();
+ if(!plugin) {
+ continue;
+ }
+
+ if (ISocialNetworkIntegration *social = qobject_cast<ISocialNetworkIntegration*>(plugin)){
+ _socialNetworks.push_back(social);
+ }
+ }
+}
+
+QList<ISocialNetworkIntegration*> PluginManager::socialNetworkIntegrationPlugins() const {
+ return _socialNetworks;
+} \ No newline at end of file
diff --git a/subsurface-core/pluginmanager.h b/subsurface-core/pluginmanager.h
new file mode 100644
index 000000000..c4943895c
--- /dev/null
+++ b/subsurface-core/pluginmanager.h
@@ -0,0 +1,19 @@
+#ifndef PLUGINMANAGER_H
+#define PLUGINMANAGER_H
+
+#include <QObject>
+
+#include "isocialnetworkintegration.h"
+
+class PluginManager {
+public:
+ static PluginManager& instance();
+ void loadPlugins();
+ QList<ISocialNetworkIntegration*> socialNetworkIntegrationPlugins() const;
+private:
+ PluginManager();
+ PluginManager(const PluginManager&) = delete;
+ PluginManager& operator=(const PluginManager&) = delete;
+};
+
+#endif \ No newline at end of file