def media_server_found(self,device,udn=None):
        for service in device['services']:
            service_type = service.split('/')[-1]
            if service_type == 'ContentDirectory':

                def got_icons(r,udn,item):
                    print 'got_icons', r
                    for icon in r:
                        ###FIXME, we shouldn't just use the first icon
                        icon_loader = gtk.gdk.PixbufLoader()
                        icon_loader.write(urllib.urlopen(str(icon['url']))._read())
                        icon_loader.close()
                        icon = icon_loader.get_pixbuf()
                        icon = icon.scale_simple(16,16,gtk.gdk.INTERP_BILINEAR)
                        self.store.set_value(item, 2, icon)
                        break

                def reply(r,udn):
                    if 'CreateObject' in r:
                        self.devices[udn] =  {'ContentDirectory':{}}
                        self.devices[udn]['ContentDirectory']['actions'] = r

                        item = self.store.append(None)
                        self.store.set_value(item, 0, str(device['friendly_name']))
                        self.store.set_value(item, 1, str(device['udn']))
                        self.store.set_value(item, 2, self.device_icon)

                        d = self.bus.get_object(BUS_NAME+'.device',device['path'])
                        d.get_device_icons(reply_handler=lambda x : got_icons(x,str(device['udn']),item),error_handler=self.handle_error)

                s = self.bus.get_object(BUS_NAME+'.service',service)
                s.get_available_actions(reply_handler=lambda x : reply(x,str(device['udn'])),error_handler=self.handle_error)
Example #2
0
    def media_server_found(self,device,udn=None):
        for service in device['services']:
            service_type = service.split('/')[-1]
            if service_type == 'ContentDirectory':

                def got_icons(r,udn,item):
                    print 'got_icons', r
                    for icon in r:
                        ###FIXME, we shouldn't just use the first icon
                        icon_loader = gtk.gdk.PixbufLoader()
                        icon_loader.write(urllib.urlopen(str(icon['url'])).read())
                        icon_loader.close()
                        icon = icon_loader.get_pixbuf()
                        icon = icon.scale_simple(16,16,gtk.gdk.INTERP_BILINEAR)
                        self.store.set_value(item, 2, icon)
                        break

                def reply(r,udn):
                    if 'CreateObject' in r:
                        self.devices[udn] =  {'ContentDirectory':{}}
                        self.devices[udn]['ContentDirectory']['actions'] = r

                        item = self.store.append(None)
                        self.store.set_value(item, 0, str(device['friendly_name']))
                        self.store.set_value(item, 1, str(device['udn']))
                        self.store.set_value(item, 2, self.device_icon)

                        d = self.bus.get_object(BUS_NAME+'.device',device['path'])
                        d.get_device_icons(reply_handler=lambda x : got_icons(x,str(device['udn']),item),error_handler=self.handle_error)

                s = self.bus.get_object(BUS_NAME+'.service',service)
                s.get_available_actions(reply_handler=lambda x : reply(x,str(device['udn'])),error_handler=self.handle_error)
Example #3
0
    def _device_added(self, service, instance, do_service_change=True):
        path = self._get_service_mapping_path(service, instance)
        if path in self._dbusservice:
            self._dbusservice[path] = service
        else:
            self._dbusservice.add_path(path, service)

        if do_service_change:
            self._handleservicechange()

        service_type = service.split('.')[2]
        if service_type == 'battery' or service_type == 'solarcharger':
            try:
                proxy = self._dbusmonitor.dbusConn.get_object(service,
                                                              '/ProductId',
                                                              introspect=False)
                method = proxy.get_dbus_method('GetValue')
                self._supervised[service] = method
            except dbus.DBusException:
                pass

        if service_type == 'battery' and self._dbusmonitor.get_value(
                service, '/ProductId') == 0xB004:
            logging.info('LG battery service appeared: %s' % service)
            self._lg_battery = service
            self._lg_voltage_buffer = []
            self._dbusservice['/Dc/Battery/Alarms/CircuitBreakerTripped'] = 0
Example #4
0
def getDBusDesc(service):
    service = service.split(':')[-1]
    bus   = dbus.SessionBus() 
    obj   = bus.get_object(service, "/")
    iface = dbus.Interface(obj, service) # + ".iface")
    desc = iface.get_info()

    return desc
Example #5
0
    def __init__(self, service):
        QSource.QSource.__init__(self)

        print('DataSource DBUS: ', service)
        self.service = service.split(':')[-1]

        # Reqired by PyMca?
        self.sourceName   = getDBusDesc(self.service)
        self.sourceType   = SOURCE_TYPE
Example #6
0
def isServiceStarted(service):
    service = service.split("/")
    path = "/" + "/".join(service[1:])
    service = service[0]

    bus = dbus.SessionBus()

    for a in bus.list_names():
        if service in a:
            return True

    return False
Example #7
0
 def _get_service_path(self, service):
     s = service.split('/')
     assert len(s) == 2, 'The setting (%s) is invalid!' % service
     serviceclass = s[0]
     instance = int(s[1])
     services = self._dbusmonitor.get_service_list(classfilter=serviceclass)
     if instance not in services.values():
         # Once chosen battery monitor does not exist. Don't auto change the setting (it might come
         # back). And also don't autoselect another.
         servicepath = None
     else:
         # According to https://www.python.org/dev/peps/pep-3106/, dict.keys() and dict.values()
         # always have the same order.
         servicepath = services.keys()[services.values().index(instance)]
     return servicepath
 def _get_service_path(self, service):
     s = service.split('/')
     assert len(s) == 2, 'The setting (%s) is invalid!' % service
     serviceclass = s[0]
     instance = int(s[1])
     services = self._dbusmonitor.get_service_list(classfilter=serviceclass)
     if instance not in services.values():
         # Once chosen battery monitor does not exist. Don't auto change the setting (it might come
         # back). And also don't autoselect another.
         servicepath = None
     else:
         # According to https://www.python.org/dev/peps/pep-3106/, dict.keys() and dict.values()
         # always have the same order.
         servicepath = services.keys()[services.values().index(instance)]
     return servicepath
    def media_server_found(self,device,udn=None):
        #print "media_server_found", device['friendly_name']
        item = self.store.append(None)
        self.store.set_value(item, NAME_COLUMN, device['friendly_name'])
        self.store.set_value(item, ID_COLUMN, '0')
        self.store.set_value(item, UPNP_CLASS_COLUMN, 'root')
        self.store.set_value(item, CHILD_COUNT_COLUMN, -1)
        self.store.set_value(item, UDN_COLUMN, str(device['udn']))
        self.store.set_value(item, ICON_COLUMN, self.device_icon)
        self.store.set_value(item, DIDL_COLUMN, '')
        self.store.set_value(item, TOOLTIP_ICON_COLUMN, None)

        self.store.append(item, ('...loading...','','placeholder',-1,'','',None,'',None))

        self.devices[str(device['udn'])] =  {'ContentDirectory':{}}
        for service in device['services']:
            service_type = service.split('/')[-1]
            if service_type == 'ContentDirectory':
                self.store.set_value(item, SERVICE_COLUMN, service)
                self.devices[str(device['udn'])]['ContentDirectory'] = {}

                def reply(r,udn):
                    self.devices[udn]['ContentDirectory']['actions'] = r

                def got_icons(r,udn,item):
                    #print 'got_icons', r
                    for icon in r:
                        ###FIXME, we shouldn't just use the first icon
                        icon_loader = gtk.gdk.PixbufLoader()
                        icon_loader.write(urllib.urlopen(str(icon['url']))._read())
                        icon_loader.close()
                        icon = icon_loader.get_pixbuf()
                        icon = icon.scale_simple(16,16,gtk.gdk.INTERP_BILINEAR)
                        self.store.set_value(item, ICON_COLUMN, icon)
                        break


                def reply_subscribe(udn, service, r):
                    for k,v in r.iteritems():
                        self.state_variable_change(udn,service,k,v)

                s = self.bus.get_object(BUS_NAME+'.service',service)
                s.connect_to_signal('StateVariableChanged', self.state_variable_change, dbus_interface=BUS_NAME+'.service')
                s.get_available_actions(reply_handler=lambda x : reply(x,str(device['udn'])),error_handler=self.handle_error)
                s.subscribe(reply_handler=reply_subscribe,error_handler=self.handle_error)

                d = self.bus.get_object(BUS_NAME+'.device',device['path'])
                d.get_device_icons(reply_handler=lambda x : got_icons(x,str(device['udn']),item),error_handler=self.handle_error)
Example #10
0
    def media_server_found(self,device,udn=None):
        #print "media_server_found", device['friendly_name']
        item = self.store.append(None)
        self.store.set_value(item, NAME_COLUMN, device['friendly_name'])
        self.store.set_value(item, ID_COLUMN, '0')
        self.store.set_value(item, UPNP_CLASS_COLUMN, 'root')
        self.store.set_value(item, CHILD_COUNT_COLUMN, -1)
        self.store.set_value(item, UDN_COLUMN, str(device['udn']))
        self.store.set_value(item, ICON_COLUMN, self.device_icon)
        self.store.set_value(item, DIDL_COLUMN, '')
        self.store.set_value(item, TOOLTIP_ICON_COLUMN, None)

        self.store.append(item, ('...loading...','','placeholder',-1,'','',None,'',None))

        self.devices[str(device['udn'])] =  {'ContentDirectory':{}}
        for service in device['services']:
            service_type = service.split('/')[-1]
            if service_type == 'ContentDirectory':
                self.store.set_value(item, SERVICE_COLUMN, service)
                self.devices[str(device['udn'])]['ContentDirectory'] = {}

                def reply(r,udn):
                    self.devices[udn]['ContentDirectory']['actions'] = r

                def got_icons(r,udn,item):
                    #print 'got_icons', r
                    for icon in r:
                        ###FIXME, we shouldn't just use the first icon
                        icon_loader = gtk.gdk.PixbufLoader()
                        icon_loader.write(urllib.urlopen(str(icon['url'])).read())
                        icon_loader.close()
                        icon = icon_loader.get_pixbuf()
                        icon = icon.scale_simple(16,16,gtk.gdk.INTERP_BILINEAR)
                        self.store.set_value(item, ICON_COLUMN, icon)
                        break


                def reply_subscribe(udn, service, r):
                    for k,v in r.iteritems():
                        self.state_variable_change(udn,service,k,v)

                s = self.bus.get_object(BUS_NAME+'.service',service)
                s.connect_to_signal('StateVariableChanged', self.state_variable_change, dbus_interface=BUS_NAME+'.service')
                s.get_available_actions(reply_handler=lambda x : reply(x,str(device['udn'])),error_handler=self.handle_error)
                s.subscribe(reply_handler=reply_subscribe,error_handler=self.handle_error)

                d = self.bus.get_object(BUS_NAME+'.device',device['path'])
                d.get_device_icons(reply_handler=lambda x : got_icons(x,str(device['udn']),item),error_handler=self.handle_error)
Example #11
0
def findServices(service):
    service = service.split("/")
    path = "/" + "/".join(service[1:])
    service = service[0]

    pattern = re.compile(service)
    bus = dbus.SessionBus()

    services = []
    for a in bus.list_names():
        if pattern.match(a):
            print(bus.get_object(a, path))
            if bus.get_object(a, "/"):
                services += [a]

    return services
    def get_file_items(self, window, files):
        if self.coherence == None:
            return
        if len(files) == 0:
            return

        for file in files:
            if file.is_directory() or file.get_uri_scheme() != 'file':
                return

        #pin = self.coherence.get_pin('Nautilus::MediaServer::%d'%os.getpid())
        #print 'Pin:',pin
        #if pin == 'Coherence::Pin::None':
        #    return
        devices = self.coherence.get_devices(dbus_interface=BUS_NAME)
        i = 0
        menuitem = None
        for device in devices:
            print device['friendly_name'], device['device_type']
            if device['device_type'].split(':')[3] == 'MediaRenderer':
                if i == 0:
                    menuitem = Nautilus.MenuItem(
                        name='CoherencePlayExtension::Play',
                        label='Play on MediaRenderer',
                        tip=
                        'Play the selected file(s) on a DLNA/UPnP MediaRenderer',
                        icon='media')
                    submenu = Nautilus.Menu()
                    menuitem.set_submenu(submenu)

                item = Nautilus.MenuItem(
                    name='CoherencePlayExtension::Play%d' % i,
                    label=device['friendly_name'],
                    tip='')
                for service in device['services']:
                    service_type = service.split('/')[-1]
                    if service_type == 'AVTransport':
                        item.connect('activate', self.play, service,
                                     device['path'], files)
                        break
                submenu.append_item(item)
                i += 1

        if i == 0:
            return

        return menuitem,
    def get_file_items(self, window, files):
        if self.coherence == None:
            return
        if len(files) == 0:
            return

        for file in files:
            if file.is_directory() or file.get_uri_scheme() != 'file':
                return

        #pin = self.coherence.get_pin('Nemo::MediaServer::%d'%os.getpid())
        #print 'Pin:',pin
        #if pin == 'Coherence::Pin::None':
        #    return
        devices = self.coherence.get_devices(dbus_interface=BUS_NAME)
        i=0
        menuitem = None
        for device in devices:
            print device['friendly_name'],device['device_type']
            if device['device_type'].split(':')[3] == 'MediaRenderer':
                if i == 0:
                    menuitem = Nemo.MenuItem(name='CoherencePlayExtension::Play',
                                             label='Play on MediaRenderer',
                                             tip='Play the selected file(s) on a DLNA/UPnP MediaRenderer')
                    submenu = Nemo.Menu()
                    menuitem.set_submenu(submenu)

                item = Nemo.MenuItem(name='CoherencePlayExtension::Play%d' %i,
                                     label=device['friendly_name'], tip='')
                for service in device['services']:
                    service_type = service.split('/')[-1]
                    if service_type == 'AVTransport':
                        item.connect('activate', self.play,service, device['path'], files)
                        break
                submenu.append_item(item)
                i += 1

        if i == 0:
            return

        return menuitem,
	def _get_instance_service_name(self, service, instance):
		return '%s/%s' % ('.'.join(service.split('.')[0:3]), instance)
Example #15
0
 def _get_instance_service_name(self, service, instance):
     return '%s/%s' % ('.'.join(service.split('.')[0:3]), instance)