Package elisa :: Package plugins :: Package bad :: Package gnome_plugin :: Module gnome_screensaver_service
[hide private]
[frames] | no frames]

Source Code for Module elisa.plugins.bad.gnome_plugin.gnome_screensaver_service

 1  # -*- coding: utf-8 -*- 
 2  # Copyright (C) 2007 by Benjamin Kampmann <big.master.ben@web.de> 
 3  # This code is published under MIT licence 
 4  # All rights reserved. 
 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   
29 -class GnomeScreensaverService(ServiceProvider):
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
44 - def initialize(self):
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 # Even if there is also a org.gnome.PowerManager, the 57 # ScreenSaver is for our use the better one 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
75 - def clean(self):
76 if self._pm_cookie: 77 self.pm_iface.UnInhibit(self._pm_cookie) 78 ServiceProvider.clean(self)
79
80 - def _player_started(self, msg, sender):
81 self.debug("Asking for Inhibition of PowerManager") 82 self._pm_cookie = self.pm_iface.Inhibit('elisa', 'playing media')
83
84 - def _player_stopped(self, msg, sender):
85 self.debug("Asking for UnInhibition of PowerManager") 86 self.pm_iface.UnInhibit(self._pm_cookie) 87 self._pm_cookie = None
88