summaryrefslogtreecommitdiffstats
path: root/core/pluginmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/pluginmanager.cpp')
-rw-r--r--core/pluginmanager.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/core/pluginmanager.cpp b/core/pluginmanager.cpp
new file mode 100644
index 000000000..28c978280
--- /dev/null
+++ b/core/pluginmanager.cpp
@@ -0,0 +1,53 @@
+#include "pluginmanager.h"
+
+#include <QApplication>
+#include <QDir>
+#include <QPluginLoader>
+#include <QDebug>
+
+static QList<ISocialNetworkIntegration*> _socialNetworks;
+
+PluginManager& PluginManager::instance()
+{
+ static PluginManager self;
+ return self;
+}
+
+PluginManager::PluginManager()
+{
+}
+
+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");
+
+ qDebug() << "Plugins Directory: " << pluginsDir;
+ 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)) {
+ qDebug() << "Adding the plugin: " << social->socialNetworkName();
+ _socialNetworks.push_back(social);
+ }
+ }
+}
+
+QList<ISocialNetworkIntegration*> PluginManager::socialNetworkIntegrationPlugins() const
+{
+ return _socialNetworks;
+}