1# -*- coding: utf-8 -*- 2# 3# gPodder - A media aggregator and podcast client 4# Copyright (c) 2005-2018 The gPodder Team 5# 6# gPodder is free software; you can redistribute it and/or modify 7# it under the terms of the GNU General Public License as published by 8# the Free Software Foundation; either version 3 of the License, or 9# (at your option) any later version. 10# 11# gPodder is distributed in the hope that it will be useful, 12# but WITHOUT ANY WARRANTY; without even the implied warranty of 13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14# GNU General Public License for more details. 15# 16# You should have received a copy of the GNU General Public License 17# along with this program. If not, see <http://www.gnu.org/licenses/>. 18# 19 20 21# 22# services.py -- Core Services for gPodder 23# Thomas Perl <thp@perli.net> 2007-08-24 24# 25# 26 27import gpodder 28from gpodder import util 29 30_ = gpodder.gettext 31 32 33class ObservableService(object): 34 def __init__(self, signal_names=[]): 35 self.observers = {} 36 for signal in signal_names: 37 self.observers[signal] = [] 38 39 def register(self, signal_name, observer): 40 if signal_name in self.observers: 41 if observer not in self.observers[signal_name]: 42 self.observers[signal_name].append(observer) 43 return True 44 45 return False 46 47 def unregister(self, signal_name, observer): 48 if signal_name in self.observers: 49 if observer in self.observers[signal_name]: 50 self.observers[signal_name].remove(observer) 51 return True 52 53 return False 54 55 def notify(self, signal_name, *args): 56 if signal_name in self.observers: 57 for observer in self.observers[signal_name]: 58 util.idle_add(observer, *args) 59 60 return True 61 62 return False 63