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)
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)
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
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
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
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
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)
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)
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)