Move observer code out of DownloadStatusManager into ObservableService
git-svn-id: svn://svn.berlios.de/gpodder/trunk@487 b0d088ad-0a06-0410-aad2-9ed5178a7e87
This commit is contained in:
parent
8ba93845be
commit
4c2e0aacb3
|
@ -1,3 +1,12 @@
|
|||
Mon, 10 Dec 2007 09:42:06 +0100 <thp@perli.net>
|
||||
Move observer code out of DownloadStatusManager into ObservableService
|
||||
|
||||
* src/gpodder/services.py: Move out all observer-related code like
|
||||
registration, unregistration and notification to a new
|
||||
ObservableService class; subclass ObservableService in
|
||||
DownloadStatusManager; this makes the observer code in
|
||||
DownloadStatusManager re-usable (will be needed for new sync code)
|
||||
|
||||
Mon, 10 Dec 2007 09:33:26 +0100 <thp@perli.net>
|
||||
Selective iPod episode clean-up; "delete older than X days"
|
||||
|
||||
|
|
|
@ -34,7 +34,39 @@ import gobject
|
|||
import threading
|
||||
|
||||
|
||||
class DownloadStatusManager( object):
|
||||
class ObservableService(object):
|
||||
def __init__(self, signal_names=[]):
|
||||
self.observers = {}
|
||||
for signal in signal_names:
|
||||
self.observers[signal] = []
|
||||
|
||||
def register(self, signal_name, observer):
|
||||
if signal_name in self.observers:
|
||||
if not observer in self.observers[signal_name]:
|
||||
self.observers[signal_name].append(observer)
|
||||
else:
|
||||
log('Observer already added to signal "%s".', signal_name, sender=self)
|
||||
else:
|
||||
log('Signal "%s" is not available for registration.', signal_name, sender=self)
|
||||
|
||||
def unregister(self, signal_name, observer):
|
||||
if signal_name in self.observers:
|
||||
if observer in self.observers[signal_name]:
|
||||
self.observers[signal_name].remove(observer)
|
||||
else:
|
||||
log('Observer could not be removed from signal "%s".', signal_name, sender=self)
|
||||
else:
|
||||
log('Signal "%s" is not available for un-registration.', signal_name, sender=self)
|
||||
|
||||
def notify(self, signal_name, *args):
|
||||
if signal_name in self.observers:
|
||||
for observer in self.observers[signal_name]:
|
||||
gobject.idle_add(observer, *args)
|
||||
else:
|
||||
log('Signal "%s" is not available for notification.', signal_name, sender=self)
|
||||
|
||||
|
||||
class DownloadStatusManager(ObservableService):
|
||||
COLUMN_NAMES = { 0: 'episode', 1: 'speed', 2: 'progress', 3: 'url' }
|
||||
COLUMN_TYPES = ( gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_FLOAT, gobject.TYPE_STRING )
|
||||
|
||||
|
@ -49,35 +81,9 @@ class DownloadStatusManager( object):
|
|||
|
||||
self.tree_model = gtk.ListStore( *self.COLUMN_TYPES)
|
||||
self.tree_model_lock = threading.Lock()
|
||||
|
||||
self.observers = { 'list-changed': [], 'progress-changed': [], 'progress-detail': [], }
|
||||
|
||||
|
||||
def register( self, signal_name, observer):
|
||||
if signal_name in self.observers:
|
||||
if not observer in self.observers[signal_name]:
|
||||
self.observers[signal_name].append( observer)
|
||||
else:
|
||||
log( 'Observer already added to signal "%s".', signal_name, sender = self)
|
||||
else:
|
||||
log( 'Signal "%s" is not available for registration.', signal_name, sender = self)
|
||||
|
||||
def unregister( self, signal_name, observer):
|
||||
if signal_name in self.observers:
|
||||
if observer in self.observers[signal_name]:
|
||||
self.observers[signal_name].remove( observer)
|
||||
else:
|
||||
log( 'Observer could not be removed from signal "%s".', signal_name, sender = self)
|
||||
else:
|
||||
log( 'Signal "%s" is not available for un-registration.', signal_name, sender = self)
|
||||
|
||||
def notify( self, signal_name, *args):
|
||||
if signal_name in self.observers:
|
||||
for observer in self.observers[signal_name]:
|
||||
gobject.idle_add( observer, *args)
|
||||
else:
|
||||
log( 'Signal "%s" is not available for notification.', signal_name, sender = self)
|
||||
|
||||
|
||||
signal_names = ['list-changed', 'progress-changed', 'progress-detail']
|
||||
ObservableService.__init__(self, signal_names)
|
||||
|
||||
def notify_progress( self):
|
||||
now = ( self.count(), self.average_progress() )
|
||||
|
|
Loading…
Reference in New Issue