home *** CD-ROM | disk | FTP | other *** search
- """
- Helper classes to monitor directories/files for changes using gnomevfs
- """
-
- import traceback
- import gnomevfs
- import gobject, gtk
-
- class Watcher(gobject.GObject):
- __gsignals__ = {
- "changed" : (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, [gobject.TYPE_STRING]),
- }
- def __init__(self):
- gobject.GObject.__init__(self)
- self.watched = {}
- self.monitor_type = gnomevfs.MONITOR_FILE
-
- def add(self, args):
- if not type(args) is list:
- args = [args]
-
- for name in args:
- if name == "":
- continue
-
- if not name in self.watched:
- try:
- self.watched[name] = gnomevfs.monitor_add(name, self.monitor_type, self._on_change)
- except Exception, msg:
- traceback.print_exc()
- self.watched[name] = 0
-
- def remove(self, args):
- if not type(args) is list:
- args = [args]
-
- for name in args:
- if name in self.watched:
- if self.watched[name] != 0:
- gnomevfs.monitor_cancel(self.watched[name])
- del self.watched[name]
-
- def remove_all(self):
- self.remove(self.watched.keys())
-
- def _on_change(self, monitor, changed, event):
- if event == gnomevfs.MONITOR_EVENT_CHANGED or event == gnomevfs.MONITOR_EVENT_CREATED:
- gobject.idle_add(self.emit, 'changed', gnomevfs.get_local_path_from_uri(changed))
-
- class FileWatcher(Watcher):
- def __init__(self):
- Watcher.__init__(self)
-
- class DirWatcher(Watcher):
- def __init__(self):
- Watcher.__init__(self)
- self.monitor_type = gnomevfs.MONITOR_DIRECTORY
-
- if gtk.pygtk_version < (2,8,0):
- gobject.type_register(Watcher)
- gobject.type_register(FileWatcher)
- gobject.type_register(DirWatcher)
-