1
2
3
4
5
6 """
7 Gnome Screen Saver ServiceProvider component class
8
9 This Component can block the GnomeScreenSaver in different modes. That
10 is very useful, if you have a remote control or other input device
11 which is not reconized by the Screensaver on its own.
12
13 This Compontent blocks with this usage also the PowerManager of GNOME,
14 so that the sleep/Screen procedures shouldn't happen.
15
16 """
17
18 __maintainer__ = 'Benjamin Kampmann <benjamin@fluendo.com>'
19
20 from elisa.base_components.service_provider import ServiceProvider
21 from elisa.core import common, component
22 from elisa.core.player import PlayerPlaying, PlayerStopping
23
24 import dbus
25 if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
26 import dbus.glib
27 from dbus.exceptions import DBusException
28
30 """
31 This class connect to the Gnome Screen Saver and blocks it
32 """
33
34 config_doc = {'blocking_mode' : 'Block the Screensaver. Available modes'
35 ' are: \n * 1 : block on playing only\n'
36 ' * 2 : block from the start to the end,'
37 ' use this, if you are only using remotes,'
38 ' on which the screensaver is not'
39 ' reacting'
40 ' * else: do not block!\n'}
41
42 default_config = {'blocking_mode' : 2}
43
45 ServiceProvider.initialize(self)
46 self.pm_iface = None
47 self._pm_cookie = None
48
49 try:
50 self.ses = dbus.SessionBus()
51 except DBusException, error:
52 msg = "DBus is not running."
53 raise component.InitializeFailure(self.name, msg)
54
55 try:
56
57
58 self.pm = self.ses.get_object('org.gnome.ScreenSaver',
59 '/org/gnome/Screensaver')
60 self.pm_iface = dbus.Interface(self.pm, "org.gnome.ScreenSaver")
61 except Exception, e:
62 msg = "Could not connect to the Gnome ScreenSaver: %s" % e
63 raise component.InitializeFailure(self.name, msg)
64
65 blocking_mode = self.config.get('blocking_mode', 1)
66 if blocking_mode == 1:
67 self.info("Using the stop-on-playing-only mode")
68 bus = common.application.bus
69 bus.register(self._player_started, PlayerPlaying)
70 bus.register(self._player_stopped, PlayerStopping)
71 elif blocking_mode == 2:
72 self.info("Using full-block mode")
73 self._pm_cookie = self.pm_iface.Inhibit('elisa', 'running')
74
79
81 self.debug("Asking for Inhibition of PowerManager")
82 self._pm_cookie = self.pm_iface.Inhibit('elisa', 'playing media')
83
85 self.debug("Asking for UnInhibition of PowerManager")
86 self.pm_iface.UnInhibit(self._pm_cookie)
87 self._pm_cookie = None
88