[kupfer] core: Allow loading plugins at runtime



commit 9431a467f1473ca09f0b21e4ecdc8c756224b9c7
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Thu Feb 4 00:16:17 2010 +0100

    core: Allow loading plugins at runtime
    
    Listen to the settings controller signal for enabled plugin and load
    plugins in the DataController.
    
    We initialize plugins when loaded late with SourceController and
    recalculate the source catalog and root.

 kupfer/core/data.py |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/kupfer/core/data.py b/kupfer/core/data.py
index 17dd628..03fd907 100644
--- a/kupfer/core/data.py
+++ b/kupfer/core/data.py
@@ -533,6 +533,7 @@ class DataController (gobject.GObject, pretty.OutputMixin):
 		S_sources = []
 
 		setctl = settings.GetSettingsController()
+		setctl.connect("plugin-enabled-changed", self._plugin_enabled)
 
 		for item in plugins.get_plugin_ids():
 			if not setctl.get_plugin_enabled(item):
@@ -562,6 +563,21 @@ class DataController (gobject.GObject, pretty.OutputMixin):
 		self.register_content_decorators(plugin.content_decorators)
 		return set(plugin.sources)
 
+	def _plugin_enabled(self, setctl, plugin_id, enabled):
+		from kupfer.core import plugins
+		if enabled and not plugins.is_plugin_loaded(plugin_id):
+			sources = self._load_plugin(plugin_id)
+			self._insert_sources(plugin_id, sources)
+
+	def _insert_sources(self, plugin_id, sources):
+		if not sources:
+			return
+		setctl = settings.GetSettingsController()
+		is_toplevel = setctl.get_plugin_is_toplevel(plugin_id)
+		sc = GetSourceController()
+		sc.add(sources, toplevel=is_toplevel, initialize=True)
+		self.source_pane.source_rebase(sc.root)
+
 	def _finish(self, sched):
 		self.output_info("Saving data...")
 		learn.finish()



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