[kupfer: 7/31] plugin.*: Adapt sources to Source.initialize



commit f76a3df9081c909a338dfcccd4d23e25761d5c88
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Wed Dec 30 05:40:15 2009 +0100

    plugin.*: Adapt sources to Source.initialize

 contrib/runningapplications.py     |    3 +++
 kupfer/plugin/applications.py      |    7 +++----
 kupfer/plugin/clipboard.py         |   10 +++-------
 kupfer/plugin/core/selection.py    |    8 +++-----
 kupfer/plugin/documents.py         |    7 +++----
 kupfer/plugin/gajim.py             |    6 ++----
 kupfer/plugin/nautilusselection.py |   10 ++++++----
 kupfer/plugin/notes.py             |    6 ++----
 kupfer/plugin/pidgin.py            |    4 +++-
 kupfer/plugin/screen.py            |    9 ++++-----
 kupfer/plugin/services.py          |    7 +++----
 kupfer/plugin/templates.py         |   20 +++++++++++---------
 kupfer/plugin/top.py               |    5 ++---
 kupfer/plugin/tsclient.py          |    7 ++-----
 14 files changed, 50 insertions(+), 59 deletions(-)
---
diff --git a/contrib/runningapplications.py b/contrib/runningapplications.py
index df595b9..a62c48a 100644
--- a/contrib/runningapplications.py
+++ b/contrib/runningapplications.py
@@ -18,6 +18,9 @@ class RunningApplicationsSource (Source):
 	"""List currently running applications """
 	def __init__(self):
 		Source.__init__(self, _("Running Applications"))
+		self.all_apps = []
+
+	def initialize(self):
 		self.all_apps = gio.app_info_get_all()
 
 	def is_dynamic(self):
diff --git a/kupfer/plugin/applications.py b/kupfer/plugin/applications.py
index d6a037b..16b94e2 100644
--- a/kupfer/plugin/applications.py
+++ b/kupfer/plugin/applications.py
@@ -3,7 +3,7 @@ from gio import app_info_get_all
 from gio.unix import desktop_app_info_set_desktop_env
 
 from kupfer.objects import (Source, AppLeaf, Action, FileLeaf,
-		PicklingHelperMixin, FilesystemWatchMixin, )
+		FilesystemWatchMixin, )
 from kupfer import config, utils, plugin_support
 
 __kupfer_name__ = _("Applications")
@@ -26,7 +26,7 @@ __kupfer_settings__ = plugin_support.PluginSettings(
 	},
 )
 
-class AppSource (Source, PicklingHelperMixin, FilesystemWatchMixin):
+class AppSource (Source, FilesystemWatchMixin):
 	"""
 	Applications source
 
@@ -35,9 +35,8 @@ class AppSource (Source, PicklingHelperMixin, FilesystemWatchMixin):
 	"""
 	def __init__(self):
 		super(AppSource, self).__init__(_("Applications"))
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
 		application_dirs = config.get_data_dirs("", "applications")
 		self.monitor_token = self.monitor_directories(*application_dirs)
 
diff --git a/kupfer/plugin/clipboard.py b/kupfer/plugin/clipboard.py
index 9752f2b..6be6b72 100644
--- a/kupfer/plugin/clipboard.py
+++ b/kupfer/plugin/clipboard.py
@@ -2,7 +2,7 @@ from collections import deque
 
 import gtk
 
-from kupfer.objects import Source, Action, TextLeaf, Leaf, PicklingHelperMixin
+from kupfer.objects import Source, Action, TextLeaf, Leaf
 from kupfer import utils, plugin_support
 from kupfer.helplib import gobject_connect_weakly
 
@@ -31,16 +31,12 @@ class ClipboardText (TextLeaf):
 			'Clipboard with %(num)d lines "%(desc)s"',
 			numlines) % {"num": numlines, "desc": desc }
 
-class ClipboardSource (Source, PicklingHelperMixin):
-	"""
-	"""
+class ClipboardSource (Source):
 	def __init__(self):
 		Source.__init__(self, _("Clipboards"))
 		self.clipboards = deque()
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
-		"""Setup change callback on unpickling"""
+	def initialize(self):
 		clip = gtk.clipboard_get(gtk.gdk.SELECTION_CLIPBOARD)
 		gobject_connect_weakly(clip, "owner-change", self._clipboard_changed)
 
diff --git a/kupfer/plugin/core/selection.py b/kupfer/plugin/core/selection.py
index 28ffa04..1fd4eb3 100644
--- a/kupfer/plugin/core/selection.py
+++ b/kupfer/plugin/core/selection.py
@@ -2,7 +2,6 @@ import gtk
 
 from kupfer.objects import Source, Leaf
 from kupfer.objects import TextLeaf, SourceLeaf
-from kupfer.helplib import DbusWeakCallback, PicklingHelperMixin
 from kupfer.helplib import gobject_connect_weakly
 from kupfer import kupferstring
 
@@ -32,15 +31,14 @@ class InvisibleSourceLeaf (SourceLeaf):
 	def is_valid(self):
 		return False
 
-class SelectionSource (Source, PicklingHelperMixin):
+class SelectionSource (Source):
 	def __init__(self):
 		Source.__init__(self, _("Selected Text"))
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
+		self._text = None
 		clip = gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY)
 		gobject_connect_weakly(clip, "owner-change", self._clipboard_changed)
-		self._text = None
 
 	def _clipboard_changed(self, clipboard, event):
 		self._text = clipboard.wait_for_text()
diff --git a/kupfer/plugin/documents.py b/kupfer/plugin/documents.py
index 910ebd6..f990d2e 100644
--- a/kupfer/plugin/documents.py
+++ b/kupfer/plugin/documents.py
@@ -4,7 +4,7 @@ import gio
 from gtk import recent_manager_get_default
 
 from kupfer.objects import (Leaf, Action, Source,
-		AppLeaf, FileLeaf, UrlLeaf, PicklingHelperMixin )
+		AppLeaf, FileLeaf, UrlLeaf, )
 from kupfer import objects, plugin_support
 from kupfer import launch, icons
 from kupfer.helplib import gobject_connect_weakly
@@ -26,14 +26,13 @@ __kupfer_settings__ = plugin_support.PluginSettings(
 )
 
 
-class RecentsSource (Source, PicklingHelperMixin):
+class RecentsSource (Source):
 	def __init__(self, name=None):
 		if not name:
 			name = _("Recent Items")
 		super(RecentsSource, self).__init__(name)
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
 		"""Set up change callback"""
 		manager = recent_manager_get_default()
 		gobject_connect_weakly(manager, "changed", self._recent_changed)
diff --git a/kupfer/plugin/gajim.py b/kupfer/plugin/gajim.py
index 16fa803..d8791da 100644
--- a/kupfer/plugin/gajim.py
+++ b/kupfer/plugin/gajim.py
@@ -156,6 +156,7 @@ class ContactsSource(AppLeafContentMixin, Source, PicklingHelperMixin):
 		self.mark_for_update()
 		self._contacts = []
 
+	def initialize(self):
 		# listen to d-bus signals for updates
 		signals = [
 			"ContactAbsence",
@@ -166,10 +167,7 @@ class ContactsSource(AppLeafContentMixin, Source, PicklingHelperMixin):
 			"RosterInfo",
 		]
 
-		try:
-			session_bus = dbus.Bus()
-		except dbus.DBusException:
-			return
+		session_bus = dbus.Bus()
 
 		for signal in signals:
 			dbus_signal_connect_weakly(session_bus, signal,
diff --git a/kupfer/plugin/nautilusselection.py b/kupfer/plugin/nautilusselection.py
index 7f4521b..9131005 100644
--- a/kupfer/plugin/nautilusselection.py
+++ b/kupfer/plugin/nautilusselection.py
@@ -6,6 +6,7 @@ import gobject
 from kupfer.objects import Source, Leaf, FileLeaf, SourceLeaf, PicklingHelperMixin
 from kupfer import objects
 from kupfer.helplib import DbusWeakCallback
+from kupfer import plugin_support
 
 __kupfer_name__ = _("Selected File")
 __kupfer_sources__ = ("SelectionSource", )
@@ -13,6 +14,8 @@ __description__ = _("Provides current nautilus selection, using Kupfer's Nautilu
 __version__ = ""
 __author__ = "Ulrik Sverdrup <ulrik sverdrup gmail com>"
 
+plugin_support.check_dbus_connection()
+
 class SelectedFile (FileLeaf):
 	qf_id = "selectedfile"
 	def __init__(self, filepath):
@@ -36,10 +39,9 @@ class SelectionSource (Source, PicklingHelperMixin):
 
 	def unpickle_finish(self):
 		self._selection = []
-		try:
-			session_bus = dbus.Bus()
-		except dbus.DBusException:
-			return
+
+	def initialize(self):
+		session_bus = dbus.Bus()
 		callback = DbusWeakCallback(self._selected_signal)
 		callback.token = session_bus.add_signal_receiver(
 				callback,
diff --git a/kupfer/plugin/notes.py b/kupfer/plugin/notes.py
index cd785b4..b4d76be 100644
--- a/kupfer/plugin/notes.py
+++ b/kupfer/plugin/notes.py
@@ -190,14 +190,12 @@ class ClassProperty (property):
 	def __get__(self, cls, owner):
 		return self.fget.__get__(None, owner)()
 
-class NotesSource (AppLeafContentMixin, Source, PicklingHelperMixin,
-		FilesystemWatchMixin):
+class NotesSource (AppLeafContentMixin, Source, FilesystemWatchMixin):
 	def __init__(self):
 		Source.__init__(self, _("Notes"))
 		self._notes = []
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
 		"""Set up filesystem monitors to catch changes"""
 		# We monitor all directories that exist of a couple of candidates
 		dirs = []
diff --git a/kupfer/plugin/pidgin.py b/kupfer/plugin/pidgin.py
index a5611cf..413a3ea 100644
--- a/kupfer/plugin/pidgin.py
+++ b/kupfer/plugin/pidgin.py
@@ -139,7 +139,9 @@ class ContactsSource(AppLeafContentMixin, Source, PicklingHelperMixin):
 
 	def unpickle_finish(self):
 		self.mark_for_update()
-		self.all_buddies = {}
+		self.pickle_prepare()
+
+	def initialize(self):
 		self._install_dbus_signal()
 		self._buddy_update_timer = scheduler.Timer()
 		self._buddy_update_queue = set()
diff --git a/kupfer/plugin/screen.py b/kupfer/plugin/screen.py
index a082df7..ab05780 100644
--- a/kupfer/plugin/screen.py
+++ b/kupfer/plugin/screen.py
@@ -1,6 +1,7 @@
 import os
 
-from kupfer.objects import Leaf, Action, Source, PicklingHelperMixin, FilesystemWatchMixin
+from kupfer.objects import Leaf, Action, Source
+from kupfer.helplib import FilesystemWatchMixin
 from kupfer import utils, objects
 
 __kupfer_name__ = _("GNU Screen")
@@ -55,14 +56,12 @@ class ScreenSession (Leaf):
 	def get_icon_name(self):
 		return "gnome-window-manager"
 
-class ScreenSessionsSource (Source, PicklingHelperMixin, FilesystemWatchMixin):
+class ScreenSessionsSource (Source, FilesystemWatchMixin):
 	"""Source for GNU Screen sessions"""
 	def __init__(self):
 		super(ScreenSessionsSource, self).__init__(_("Screen Sessions"))
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
-		"""Set up a directory watch on Screen's socket dir"""
+	def initialize(self):
 		self.screen_dir = (os.getenv("SCREENDIR") or
 				"/var/run/screen/S-%s" % get_username())
 		if not os.path.exists(self.screen_dir):
diff --git a/kupfer/plugin/services.py b/kupfer/plugin/services.py
index 46ad0bc..daddd4c 100644
--- a/kupfer/plugin/services.py
+++ b/kupfer/plugin/services.py
@@ -3,7 +3,7 @@ import os
 
 from kupfer import plugin_support
 from kupfer.objects import Leaf, Action, Source 
-from kupfer.helplib import FilesystemWatchMixin, PicklingHelperMixin
+from kupfer.helplib import FilesystemWatchMixin
 from kupfer import utils
 
 __kupfer_name__ = _("System Services")
@@ -86,15 +86,14 @@ class StopService(_ServiceAction):
 		_ServiceAction.__init__(self, _('Stop Service'), 'stop', 'stop')
 
 
-class SystemServicesSource(Source, FilesystemWatchMixin, PicklingHelperMixin):
+class SystemServicesSource(Source, FilesystemWatchMixin):
 	''' Index system services from /etc/*/init.d/ '''
 
 	def __init__(self, name=_("System Services")):
 		Source.__init__(self, name)
 		self._initd_path = None
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
 		# path to file with list notebooks
 		for initd_path in ('/etc/init.d/', '/etc/rc.d/init.d', '/etc/rc.d'):
 			if os.path.exists(initd_path) and os.path.isdir(initd_path):
diff --git a/kupfer/plugin/templates.py b/kupfer/plugin/templates.py
index 6da5835..737e737 100644
--- a/kupfer/plugin/templates.py
+++ b/kupfer/plugin/templates.py
@@ -6,7 +6,7 @@ import glib
 from kupfer.objects import Leaf, Action, Source, FileLeaf
 from kupfer import icons, utils
 from kupfer import helplib
-from kupfer.helplib import FilesystemWatchMixin, PicklingHelperMixin
+from kupfer.helplib import FilesystemWatchMixin
 from kupfer import plugin_support
 
 __kupfer_name__ = _("Document Templates")
@@ -82,24 +82,26 @@ class CreateNewDocument (Action):
 
 CreateDocumentIn = helplib.reverse_action(CreateNewDocument, rank=10)
 
-class TemplatesSource (Source, PicklingHelperMixin, FilesystemWatchMixin):
+class TemplatesSource (Source, FilesystemWatchMixin):
 	def __init__(self):
 		Source.__init__(self, _("Document Templates"))
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
-		# Set up change callback
+	@classmethod
+	def _get_tmpl_dir(self):
 		tmpl_dir = glib.get_user_special_dir(glib.USER_DIRECTORY_TEMPLATES)
 		if not tmpl_dir:
 			tmpl_dir = os.path.expanduser(DEFAULT_TMPL_DIR)
-		self.tmpl_dir = tmpl_dir
-		self.monitor_token = self.monitor_directories(self.tmpl_dir)
+		return tmpl_dir
+
+	def initialize(self):
+		self.monitor_token = self.monitor_directories(self._get_tmpl_dir())
 
 	def get_items(self):
+		tmpl_dir = self._get_tmpl_dir()
 		yield EmptyFile()
 		try:
-			for fname in os.listdir(self.tmpl_dir):
-				yield Template(os.path.join(self.tmpl_dir, fname))
+			for fname in os.listdir(tmpl_dir):
+				yield Template(os.path.join(tmpl_dir, fname))
 		except EnvironmentError, exc:
 			self.output_error(exc)
 
diff --git a/kupfer/plugin/top.py b/kupfer/plugin/top.py
index ac000dd..b5cd1ac 100644
--- a/kupfer/plugin/top.py
+++ b/kupfer/plugin/top.py
@@ -7,8 +7,8 @@ import signal
 import operator
 
 from kupfer.objects import Action, Source, Leaf
-from kupfer import scheduler
 from kupfer.helplib import PicklingHelperMixin
+from kupfer import scheduler
 from kupfer import plugin_support
 
 __kupfer_name__ = _("Top")
@@ -88,14 +88,13 @@ class _SignalsSource(Source):
 class TaskSource(Source, PicklingHelperMixin):
 	def __init__(self, name=_("Running Tasks")):
 		Source.__init__(self, name)
-		self.unpickle_finish()
 
 	def pickle_prepare(self):
 		# clear saved processes
 		self.mark_for_update()
 		self._timer = None
 
-	def unpickle_finish(self):
+	def initialize(self):
 		self._timer = scheduler.Timer()
 
 	def get_items(self):
diff --git a/kupfer/plugin/tsclient.py b/kupfer/plugin/tsclient.py
index f61802d..6474e67 100644
--- a/kupfer/plugin/tsclient.py
+++ b/kupfer/plugin/tsclient.py
@@ -44,8 +44,7 @@ class TsclientOpenSession(Action):
 		return 'tsclient'
 
 
-class TsclientSessionSource(AppLeafContentMixin, Source, PicklingHelperMixin,
-		FilesystemWatchMixin):
+class TsclientSessionSource(AppLeafContentMixin, Source, FilesystemWatchMixin):
 	''' indexes session saved in tsclient '''
 
 	appleaf_content_id = 'tsclient'
@@ -53,12 +52,10 @@ class TsclientSessionSource(AppLeafContentMixin, Source, PicklingHelperMixin,
 	def __init__(self, name=_("TSClient sessions")):
 		Source.__init__(self, name)
 		self._sessions_dir = os.path.expanduser('~/.tsclient')
-		self.unpickle_finish()
 
-	def unpickle_finish(self):
+	def initialize(self):
 		if not os.path.isdir(self._sessions_dir):
 			return
-
 		self.monitor_token = self.monitor_directories(self._sessions_dir)
 
 	def monitor_include_file(self, gfile):



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