def __init__(self,options): # command line arguments self.options = options # Logging logging.basicConfig( filename=self.options.logfile, level=getattr(logging,self.options.loglevel), format='%(asctime)-15s %(levelname)-6s %(message)s' ) logging.info(u"Started yavdr-frontend") # dbus SystemBus and SessionBus try: self.systembus = dbus.SystemBus() logging.info(u'Connected to SystemBus') except: logging.exception(u"could not connect to SystemBus") sys.exit(1) try: self.sessionbus = dbus.SessionBus() logging.info(u'Connected to SessionBus') except: logging.exception(u"could not connect to SessionBus") sys.exit(1) self.hdf = HDF(options.hdf_file) self.running = self.wait_for_vdrstart() # wait for VDR upstart job status running try:# Add watchdog for vdr-upstart-job to detect stopping and restarts logging.debug(u'connecting to upstart') self.upstart_vdr = self.systembus.get_object("org.freedesktop.DBus","/com/ubuntu/Upstart/jobs/vdr") self.upstart_vdr.connect_to_signal("VDR", self.signal_handler, dbus_interface="com.ubuntu.Upstart0_6.Instance") self.systembus.add_signal_receiver(self.signal_handler, interface_keyword='dbus_interface', member_keyword='member', sender_keyword='sender', path_keyword='path' ) logging.debug(u'connected to upstart') except dbus.DBusException: logging.debug(u'ran into exception') logging.exception(traceback.print_exc()) self.vdrCommands = vdrDBusCommands(self) # dbus2vdr fuctions self.dbusService = dbusService.dbusService(self) self.settings = Settings(self) self.graphtft = GraphTFT(self) self.wnckC = wnckController(self) self.dbusPIP = dbusService.dbusPIP(self) self.adeskbar = adeskbarDBus(self.systembus) self.powermanager = PowerManager(self.systembus) self.frontend = None self.lircConnection = lircConnection(self,self.vdrCommands) # connect to (event)lircd-Socket try: self.startup() except dbus.DBusException as error: logging.exception('dbus Error, could not init frontend') if "ServiceUnknown" in error.get_name(): logging.error('dbus2vdr not rechable, assuming vdr crashed since entering main instance') except: logging.exception('something went wrong, could not init frontend')
def startup(self): self.vdrCommands = vdrDBusCommands(self) # dbus2vdr fuctions self.graphtft = GraphTFT(self) self.xbmc = XBMC(self) self.youtube = YouTube(self) logging.info('run startup()') if self.hdf.readKey('vdr.frontend') == 'softhddevice' and self.vdrCommands.vdrSetup.check_plugin('softhddevice'): self.settings.check_pulseaudio() # Wait until pulseaudio has loaded it's tcp module logging.info(u'Configured softhddevide as primary frontend') self.vdrCommands.vdrRemote.enable() self.frontend = self.vdrCommands.vdrSofthddevice elif self.hdf.readKey('vdr.frontend') == 'sxfe' and self.vdrCommands.vdrSetup.check_plugin('xineliboutput'): logging.info('using vdr-sxfe as primary frontend') self.frontend = vdrSXFE(self) self.vdrCommands.vdrRemote.enable() elif self.hdf.readKey('vdr.frontend') == 'xine' and self.vdrCommands.vdrSetup.check_plugin('xine'): logging.info('using xine as primary frontend') self.frontend = vdrXINE(self) self.vdrCommands.vdrRemote.enable() elif self.hdf.readKey('vdr.frontend') == 'xbmc': self.frontend = self.xbmc self.settings.vdr_remote = False # Make shure VDR doesn't listen to remote self.vdrCommands.vdrRemote.disable() try: if self.frontend: if self.settings.manualstart and not self.settings.acpi_wakeup: logging.debug('self.frontend exists') self.dbusService.atta() else: self.graphtft.graphtft_switch() subprocess.call(["/usr/bin/feh","--bg-fill",self.hdf.readKey('logo_detached')], env=settings.env) if settings.manualstart == False: self.settings.timer = gobject.timeout_add(300000, self.dbusService.send_shutdown) elif self.settings.acpi_wakeup: if self.vdrCommands.vdrSetup.get('MinUserInactivity')[0] != 0: interval, default, answer = setup.vdrsetupget("MinEventTimeout") interval_ms = interval * 60000 # * 60s * 1000ms settings.timer = gobject.timeout_add(interval_ms, self.dbusService.setUserInactive) else: logging.debug('self.frontend is None') return False except: logging.exception('no frontend initialized') return True