[kupfer] screen: Don't give up just because SCREENDIR is missing



commit 24a7cf0e560ab3f000e65381907d23ff0ce2c27c
Author: Ulrik Sverdrup <ulrik sverdrup gmail com>
Date:   Tue Apr 12 19:07:35 2011 +0200

    screen: Don't give up just because SCREENDIR is missing
    
    the directory inside /var/run may be created later, and gio allows
    monitoring non-existing directories just fine.
    
    Launchpad-bug: https://bugs.launchpad.net/kupfer/+bug/753376

 kupfer/obj/helplib.py   |    8 +++++---
 kupfer/plugin/screen.py |    9 +++++----
 2 files changed, 10 insertions(+), 7 deletions(-)
---
diff --git a/kupfer/obj/helplib.py b/kupfer/obj/helplib.py
index 2f15598..a29cd50 100644
--- a/kupfer/obj/helplib.py
+++ b/kupfer/obj/helplib.py
@@ -48,7 +48,7 @@ class NonpersistentToken (PicklingHelperMixin):
 class FilesystemWatchMixin (object):
 	"""A mixin for Sources watching directories"""
 
-	def monitor_directories(self, *directories):
+	def monitor_directories(self, *directories, **kwargs):
 		"""Register @directories for monitoring;
 
 		On changes, the Source will be marked for update.
@@ -57,12 +57,14 @@ class FilesystemWatchMixin (object):
 
 		The token will be a false value if nothing could be monitored.
 
-		Nonexisting directories are skipped.
+		Nonexisting directories are skipped, if not passing
+		the kwarg @force
 		"""
 		tokens = []
+		force = kwargs.get('force', False)
 		for directory in directories:
 			gfile = gio.File(directory)
-			if not gfile.query_exists():
+			if not force and not gfile.query_exists():
 				continue
 			monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
 			if monitor:
diff --git a/kupfer/plugin/screen.py b/kupfer/plugin/screen.py
index a83af26..ded7069 100644
--- a/kupfer/plugin/screen.py
+++ b/kupfer/plugin/screen.py
@@ -70,16 +70,17 @@ class ScreenSessionsSource (Source, FilesystemWatchMixin):
 		super(ScreenSessionsSource, self).__init__(_("Screen Sessions"))
 
 	def initialize(self):
+		## the screen dir might not exist when we start
+		## luckily, gio can monitor directories before they exist
 		self.screen_dir = (os.getenv("SCREENDIR") or
 				"/var/run/screen/S-%s" % get_username())
 		if not os.path.exists(self.screen_dir):
-			self.screen_dir = None
 			self.output_debug("Screen socket dir or SCREENDIR not found")
-			return
-		self.monitor_token = self.monitor_directories(self.screen_dir)
+		self.monitor_token = self.monitor_directories(self.screen_dir,
+		                                              force=True)
 
 	def get_items(self):
-		if not self.screen_dir:
+		if not os.path.exists(self.screen_dir):
 			return
 		for pid, name, time, status in screen_sessions_infos():
 			yield ScreenSession(pid, name)



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