[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[vidalia-svn] r3872: Changed the API a little bit. Added code for dynamic plugin (in vidalia/branches/extension-api/src: plugins/DashboardPlugin plugins/HomePlugin plugins/MessageLogPlugin plugins/NetworkMapPlugin vidalia)



Author: tyree731
Date: 2009-06-19 03:20:47 -0400 (Fri, 19 Jun 2009)
New Revision: 3872

Modified:
   vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp
   vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h
   vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp
   vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h
   vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp
   vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h
   vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp
   vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h
   vidalia/branches/extension-api/src/vidalia/MainWindow.cpp
   vidalia/branches/extension-api/src/vidalia/MainWindow.h
   vidalia/branches/extension-api/src/vidalia/PluginManager.cpp
   vidalia/branches/extension-api/src/vidalia/PluginManager.h
   vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h
Log:
Changed the API a little bit. Added code for dynamic plugin stuff, though it is quite incomplete.


Modified: vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
 {
 }
 
+QString DashboardPlugin::pluginHumanName() const
+{
+  return QString("Dashboard");
+}
+
 Q_EXPORT_PLUGIN2(dashboardplugin, DashboardPlugin)
 

Modified: vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/DashboardPlugin/DashboardPlugin.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
   DashboardPlugin();
   ~DashboardPlugin();
 
+  QString pluginHumanName() const;
 };
 
 #endif

Modified: vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
 {
 }
 
+QString HomePlugin::pluginHumanName() const
+{
+  return QString("Home Panel");
+}
+
 Q_EXPORT_PLUGIN2(homeplugin, HomePlugin)
 

Modified: vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/HomePlugin/HomePlugin.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -29,6 +29,8 @@
 public:
   HomePlugin();
   ~HomePlugin();
+
+  QString pluginHumanName() const;
 };
 
 #endif

Modified: vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
 {
 }
 
+QString MessageLogPlugin::pluginHumanName() const
+{
+  return QString("Message Log");
+}
+
 Q_EXPORT_PLUGIN2(messagelogplugin, MessageLogPlugin)
 

Modified: vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/MessageLogPlugin/MessageLogPlugin.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
   MessageLogPlugin();
   ~MessageLogPlugin();
 
+  QString pluginHumanName() const;
 };
 
 #endif

Modified: vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp
===================================================================
--- vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -24,5 +24,10 @@
 {
 }
 
+QString NetworkMapPlugin::pluginHumanName() const
+{
+  return QString("Network Map");
+}
+
 Q_EXPORT_PLUGIN2(networkmapplugin, NetworkMapPlugin)
 

Modified: vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h
===================================================================
--- vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/plugins/NetworkMapPlugin/NetworkMapPlugin.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -30,6 +30,7 @@
   NetworkMapPlugin();
   ~NetworkMapPlugin();
 
+  QString pluginHumanName() const;
 };
 
 #endif

Modified: vidalia/branches/extension-api/src/vidalia/MainWindow.cpp
===================================================================
--- vidalia/branches/extension-api/src/vidalia/MainWindow.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/MainWindow.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -107,6 +107,10 @@
 
   ui.setupUi(this);
 
+  /* Creates the plugin manager and load relevant plugins */
+  _pluginManager  = new PluginManager();
+  _pluginManager->loadPlugins("","");
+
   /* Create all the dialogs of which we only want one instance */
   _messageLog     = new MessageLog();
   _bandwidthGraph = new BandwidthGraph();
@@ -131,8 +135,6 @@
   _status = Unset;
   _isVidaliaRunningTor = false;
   updateTorStatus(Stopped);
-  /* Load all included plugins */
-  loadPlugins();
 
   /* Make the layout flush with the window */
   setContentsMargins(-12, -12, -12, -12);
@@ -227,6 +229,7 @@
   delete _messageLog;
   delete _dashboard;
   delete _homePanel;
+  delete _pluginManager;
   delete _bandwidthGraph;
   delete _netViewer;
   delete _configDialog;
@@ -635,28 +638,6 @@
   _browserProcess->start(browserExecutable, commandLine);
 }
 
-/** Searches for and loads both statically linked and dynamically linked 
- * plugins */
-void
-MainWindow::loadPlugins()
-{
-  foreach (QObject *plugin, QPluginLoader::staticInstances())
-    ; // handle the plugin
-/** Don't load dynamic plugins just yet */
-#if 0
-  QDir pluginsDir = QDir(qApp->applicationDirPath());
-
-  foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
-    QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
-    QObject *plugin = loader.instance();
-    if (plugin) {
-      ; // handle the plugin
-    }
-  }
-#endif
-  // Do stuff
-}
-
 /** Starts the web browser and IM client, if appropriately configured */
 void
 MainWindow::startSubprocesses()

Modified: vidalia/branches/extension-api/src/vidalia/MainWindow.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/MainWindow.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/MainWindow.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -23,6 +23,7 @@
 #include "VidaliaWindow.h"
 #include "HelperProcess.h"
 #include "TrayIcon.h"
+#include "PluginManager.h"
 #include "AboutDialog.h"
 #include "MessageLog.h"
 #include "BandwidthGraph.h"
@@ -242,6 +243,8 @@
   NetViewer* _netViewer;
   /** A ConfigDialog object which lets the user configure Tor and Vidalia */
   ConfigDialog* _configDialog;
+  /** A Plugin Manager object which loads and manages Vidalia Plugins. */
+  PluginManager* _pluginManager;
   /** A TorControl object that handles communication with Tor */
   TorControl* _torControl;
   /** A HelperProcess object that manages the web browser */

Modified: vidalia/branches/extension-api/src/vidalia/PluginManager.cpp
===================================================================
--- vidalia/branches/extension-api/src/vidalia/PluginManager.cpp	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/PluginManager.cpp	2009-06-19 07:20:47 UTC (rev 3872)
@@ -16,11 +16,65 @@
 
 #include "PluginManager.h"
 
-PluginManager::PluginManager() {
+#include <QDir>
+#include <QPluginLoader>
+#include <QStringList>
+
+PluginManager::PluginManager() 
+{
 }
 
-PluginManager::~PluginManager() {
+PluginManager::~PluginManager() 
+{
 }
 
-void PluginManager::loadPlugins() {
+void PluginManager::loadPlugins(QString applicationDirectory, 
+				QString dataDirectory)
+{
+  foreach (QObject *plugin, QPluginLoader::staticInstances()) {
+    VidaliaPluginInterface* pluginInstance = 
+      qobject_cast<VidaliaPluginInterface*>(plugin);
+      if (pluginInstance) {
+	_pluginList.push_back(pluginInstance);
+      }
+      else {
+	/** Invalid plugin type? */
+      }
+  }
+
+  QDir dataPluginsDir = QDir(dataDirectory);
+  QDir applicationPluginsDir = QDir(applicationDirectory);
+#if defined(Q_OS_WIN)
+#elif defined(Q_OS_OSX)
+  applicationPluginsDir.cdup();
+  applicationPluginsDir.cd("Resources");
+#else
+  // *nix's
+#endif
+  applicationPluginsDir.cd("Plugins");
+
+  /** I'll fix the copy-paste later. */
+  foreach (QString fileName, applicationPluginsDir.entryList(QDir::Files)) {
+    QPluginLoader loader(applicationPluginsDir.absoluteFilePath(fileName));
+    VidaliaPluginInterface* pluginInstance = 
+      qobject_cast<VidaliaPluginInterface*>(loader.instance());
+    if (pluginInstance) {
+      _pluginList.push_back(pluginInstance);
+    }
+    else {
+      /** Either not a plugin file or not a vidaliaplugininterface plugin */
+    }
+  }
+
+  foreach (QString fileName, dataPluginsDir.entryList(QDir::Files)) {
+    QPluginLoader loader(dataPluginsDir.absoluteFilePath(fileName));
+    VidaliaPluginInterface* pluginInstance =
+      qobject_cast<VidaliaPluginInterface*>(loader.instance());
+    if (pluginInstance) {
+      _pluginList.push_back(pluginInstance);
+    }
+    else {
+      /** Either not a plugin file or not a vidaliaplugininterface plugin */
+    }
+  }
 }

Modified: vidalia/branches/extension-api/src/vidalia/PluginManager.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/PluginManager.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/PluginManager.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -14,22 +14,17 @@
 ** \brief Class for loading and managing plugins within Vidalia.
 */
 
-#include <QMap>
+#include <QList>
+#include <QObject>
 #include <QString>
 
 #include "VidaliaPluginInterface.h"
 
-/** Define platform-dependent location of plugins. */
-#if defined(Q_OS_WIN)
-#endif
-#if defined(Q_OS_MAC)
-#endif
-
 /** Class for the loading and managing of dynamic and static plugins from within
  * Vidalia. Provides an interface for plugins to interact with the Vidalia
  * application as well providing a number of useful functions for interplugin
  * communication. */
-class PluginManager
+class PluginManager : public QObject
 {
 public:
   /** PluginManager constructor. */
@@ -37,7 +32,7 @@
   /** PluginManager destructor. */
   ~PluginManager();
   /** Loads all included static and dynamic plugins. */
-  void loadPlugins();
+  void loadPlugins(QString applicationDirectory, QString dataDirectory);
 private:
-  QMap<QString,VidaliaPluginInterface*> pluginMap;
+  QList<VidaliaPluginInterface*> _pluginList;
 };

Modified: vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h
===================================================================
--- vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h	2009-06-18 06:31:24 UTC (rev 3871)
+++ vidalia/branches/extension-api/src/vidalia/VidaliaPluginInterface.h	2009-06-19 07:20:47 UTC (rev 3872)
@@ -47,8 +47,10 @@
   virtual ConfigPage* preferenceMenuEntry() const { return 0; }
   /** Virtual function to allow for UI retranslation. */
   virtual void retranslateUI() {}
+  /** Virtual function to return a human readable name for a plugin. */
+  virtual QString pluginHumanName() const = 0;
   /** Virtual function to return a plugin's description. */
-  virtual QString description() { return QString(""); }
+  virtual QString pluginDescription() const { return QString(""); }
 };
 
 Q_DECLARE_INTERFACE(VidaliaPluginInterface,