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