def on_device_disconnect(self, device): self.terminate_all_scripts(device.Address) serial_services = [ service for service in device.get_services() if service.group == 'serial' ] if not serial_services: return ports = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev["state"] == "connected": return dev["id"] active_ports = map(flt, ports) for port in active_ports: name = "/dev/rfcomm%d" % port try: dprint("Disconnecting", name) serial_services[0].disconnect(name) except: dprint("Failed to disconnect", name)
def on_nm_ppp_stats(self, down, up, path): if not path in self.nm_paths: props = self.bus.call_blocking( "org.freedesktop.NetworkManager", path, "org.freedesktop.DBus.Properties", "GetAll", "s", ["org.freedesktop.NetworkManager.Device"]) if props["Driver"] == "bluetooth" and "rfcomm" in props[ "Interface"]: self.nm_paths[path] = True portid = int(props["Interface"].strip("rfcomm")) ls = rfcomm_list() for dev in ls: if dev["id"] == portid: adapter = self.Applet.Manager.get_adapter(dev["src"]) device = adapter.find_device(dev["dst"]) device = Device(device) self.monitor_interface(NMMonitor, device, path) return else: self.nm_paths[path] = False
def on_nm_ppp_stats(self, down, up, path): if not path in self.nm_paths: props = self.bus.call_blocking("org.freedesktop.NetworkManager", path, "org.freedesktop.DBus.Properties", "GetAll", "s", ["org.freedesktop.NetworkManager.Device"]) if props["Driver"] == "bluetooth" and "rfcomm" in props["Interface"]: self.nm_paths[path] = True portid = int(props["Interface"].strip("rfcomm")) ls = rfcomm_list() for dev in ls: if dev["id"] == portid: adapter = self.Applet.Manager.get_adapter(dev["src"]) device = adapter.find_device(dev["dst"]) device = Device(device) self.monitor_interface(NMMonitor, device, path) return else: self.nm_paths[path] = False
def on_device_disconnect(self, device): if "serial" in device.Services: ports = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev["state"] == "connected": return dev["id"] active_ports = map(flt, ports) serial = device.Services["serial"] for port in active_ports: if port: name = "/dev/rfcomm%d" % port try: serial.Disconnect(name) except: dprint("Failed to disconnect", name)
def on_device_disconnect(self, device): self.terminate_all_scripts(device.Address) if "serial" in device.Services: ports = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev["state"] == "connected": return dev["id"] active_ports = map(flt, ports) serial = device.Services["serial"] for port in active_ports: name = "/dev/rfcomm%d" % port try: dprint("Disconnecting", name) serial.Disconnect(name) except: dprint("Failed to disconnect", name)
def Generate(self): self.clear() appl = AppletService() if not self.is_popup or self.props.visible: device = self.Blueman.List.get(self.Blueman.List.selected(), "device")["device"] else: (x,y) = self.Blueman.List.get_pointer() path = self.Blueman.List.get_path_at_pos(x, y) if path != None: device = self.Blueman.List.get(path[0][0], "device")["device"] else: return if not device.Valid: return self.SelectedDevice = device op = self.get_op(device) if op != None: item = create_menuitem(op, get_icon("gtk-connect", 16)) item.props.sensitive = False item.show() self.append(item) return if device.Fake: item = create_menuitem(_("Add Device"), get_icon("gtk-add", 16)) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.add_device(device)) item.show() self.append(item) item.props.tooltip_text = _("Add this device to known devices list") item = create_menuitem(_("Setup..."), get_icon("gtk-properties", 16)) self.append(item) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.setup(device)) item.show() item.props.tooltip_text = _("Run the setup assistant for this device") item = create_menuitem(_("Pair"), get_icon("gtk-dialog-authentication", 16)) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.bond(device)) self.append(item) item.show() item.props.tooltip_text = _("Create pairing with the device") item = gtk.SeparatorMenuItem() item.show() self.append(item) send_item = create_menuitem(_("Send a file..."), get_icon("gtk-copy", 16)) self.Signals.Handle("gobject", send_item, "activate", lambda x: self.Blueman.send(device)) send_item.show() self.append(send_item) else: dprint(device.Alias) uuids = device.UUIDs item = None items = [] for name, service in device.Services.iteritems(): if name == "serial": ports_list = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev["state"] == "connected": return dev["channel"] active_ports = map(flt, ports_list) def get_port_id(channel): for dev in ports_list: if dev["dst"] == device.Address and dev["state"] == "connected" and dev["channel"] == channel: return dev["id"] serial_items = [] num_ports = 0 has_dun = False try: for port_name, channel, uuid in sdp_get_cached_rfcomm(device.Address): if SERIAL_PORT_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem(port_name, get_x_icon("blueman-serial", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((150, item)) else: item = create_menuitem(port_name, get_icon("blueman-serial", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, channel) item.show() serial_items.append(item) elif DIALUP_NET_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem(port_name, get_x_icon("modem", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((150, item)) else: item = create_menuitem(port_name, get_icon("modem", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, channel) item.show() serial_items.append(item) has_dun = True except KeyError: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == DIALUP_NET_SVCLASS_ID: item = create_menuitem(_("Dialup Service"), get_icon("modem", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, uuid) item.show() serial_items.append(item) has_dun = True if uuid16 == SERIAL_PORT_SVCLASS_ID: item = create_menuitem(_("Serial Service"), get_icon("blueman-serial", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, uuid) item.show() serial_items.append(item) for dev in ports_list: if dev["dst"] == device.Address: if dev["state"] == "connected": devname = _("Serial Port %s") % "rfcomm%d" % dev["id"] item = create_menuitem(devname, get_x_icon("modem", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name, "/dev/rfcomm%d" % dev["id"]) items.append((120, item)) item.show() def open_settings(i, device): from blueman.gui.GsmSettings import GsmSettings d = GsmSettings(device.Address) d.run() d.destroy() if has_dun and "PPPSupport" in appl.QueryPlugins(): item = gtk.SeparatorMenuItem() item.show() serial_items.append(item) item = create_menuitem(_("Dialup Settings"), get_icon("gtk-preferences", 16)) serial_items.append(item) item.show() self.Signals.Handle("gobject", item, "activate", open_settings, device) if len(serial_items) > 1: sub = gtk.Menu() sub.show() item = create_menuitem(_("Serial Ports"), get_icon("modem", 16)) item.set_submenu(sub) item.show() items.append((90, item)) for item in serial_items: sub.append(item) else: for item in serial_items: items.append((80, item)) elif name == "network": self.Signals.Handle("bluez", service, self.service_property_changed, "PropertyChanged") sprops = service.GetProperties() if not sprops["Connected"]: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == GN_SVCLASS_ID: item = create_menuitem(_("Group Network"), get_icon("network-wireless", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, uuid) item.show() items.append((80, item)) if uuid16 == NAP_SVCLASS_ID: item = create_menuitem(_("Network Access Point"), get_icon("network-wireless", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name, uuid) item.show() items.append((81, item)) else: item = create_menuitem(_("Network"), get_x_icon("network-wireless", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name) item.show() items.append((101, item)) if "DhcpClient" in appl.QueryPlugins(): def renew(x): appl.DhcpClient(sprops["Device"]) item = create_menuitem(_("Renew IP Address"), get_icon("gtk-refresh", 16)) self.Signals.Handle("gobject", item, "activate", renew) item.show() items.append((201, item)) elif name == "input": self.Signals.Handle("bluez", service, self.service_property_changed, "PropertyChanged") sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Input Service"), get_x_icon("mouse", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name) items.append((100, item)) else: item = create_menuitem(_("Input Service"), get_icon("mouse", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name) items.append((1, item)) item.show() elif name == "headset": sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name) items.append((110, item)) else: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name) items.append((10, item)) item.show() elif name == "audiosink": sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name) items.append((120, item)) else: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _("Allows to send audio to remote device") self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name) items.append((20, item)) item.show() elif name == "audiosource": sprops = service.GetProperties() if not sprops["State"] == "disconnected": item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) self.Signals.Handle("gobject", item, "activate", self.on_disconnect, device, name) items.append((121, item)) else: item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _("Allows to receive audio from remote device") self.Signals.Handle("gobject", item, "activate", self.on_connect, device, name) items.append((21, item)) item.show() have_disconnectables = False have_connectables = False if True in map(lambda x: x[0] >= 100, items): have_disconnectables = True if True in map(lambda x: x[0] < 100, items): have_connectables = True if True in map(lambda x: x[0] >= 200, items): item = gtk.SeparatorMenuItem() item.show() items.append((199, item)) if have_connectables: item = gtk.MenuItem() label = gtk.Label() label.set_markup(_("<b>Connect To:</b>")) label.props.xalign = 0.0 label.show() item.add(label) item.props.sensitive = False item.show() items.append((0, item)) if have_disconnectables: item = gtk.MenuItem() label = gtk.Label() label.set_markup(_("<b>Disconnect:</b>")) label.props.xalign = 0.0 label.show() item.add(label) item.props.sensitive = False item.show() items.append((99, item)) items.sort(lambda a, b: cmp(a[0], b[0])) for priority, item in items: self.append(item) if items != []: item = gtk.SeparatorMenuItem() item.show() self.append(item) del items send_item = create_menuitem(_("Send a file..."), get_icon("gtk-copy", 16)) send_item.props.sensitive = False self.append(send_item) send_item.show() browse_item = create_menuitem(_("Browse device..."), get_icon("gtk-open", 16)) browse_item.props.sensitive = False self.append(browse_item) browse_item.show() for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == OBEX_OBJPUSH_SVCLASS_ID: self.Signals.Handle("gobject", send_item, "activate", lambda x: self.Blueman.send(device)) send_item.props.sensitive = True if uuid16 == OBEX_FILETRANS_SVCLASS_ID: self.Signals.Handle("gobject", browse_item, "activate", lambda x: self.Blueman.browse(device)) browse_item.props.sensitive = True item = gtk.SeparatorMenuItem() item.show() self.append(item) item = create_menuitem(_("Pair"), get_icon("gtk-dialog-authentication", 16)) item.props.tooltip_text = _("Create pairing with the device") self.append(item) item.show() if not device.Paired: self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.bond(device)) else: item.props.sensitive = False if not device.Trusted: item = create_menuitem(_("Trust"), get_icon("blueman-trust", 16)) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.toggle_trust(device)) self.append(item) item.show() else: item = create_menuitem(_("Untrust"), get_icon("blueman-untrust", 16)) self.append(item) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.toggle_trust(device)) item.show() item.props.tooltip_text = _("Mark/Unmark this device as trusted") item = create_menuitem(_("Setup..."), get_icon("gtk-properties", 16)) self.append(item) self.Signals.Handle("gobject", item, "activate", lambda x: self.Blueman.setup(device)) item.show() item.props.tooltip_text = _("Run the setup assistant for this device") def update_services(item): def prog_msg(msg): prog.stop() prog.set_label(msg) prog.set_cancellable(False) self.unset_op(device) gobject.timeout_add(1500, prog.finalize) def reply(): prog_msg(_("Success!")) MessageArea.close() def error(*args): dprint("err", args) prog_msg(_("Fail")) MessageArea.show_message(e_(str(args[0]))) prog = ManagerProgressbar(self.Blueman, False, _("Refreshing")) prog.start() self.set_op(device, _("Refreshing Services...")) appl.RefreshServices(device.GetObjectPath(), reply_handler=reply, error_handler=error) item = create_menuitem(_("Refresh Services"), get_icon("gtk-refresh", 16)) self.append(item) self.Signals.Handle(item, "activate", update_services) item.show() item = gtk.SeparatorMenuItem() item.show() self.append(item) item = create_menuitem(_("Remove..."), get_icon("gtk-delete", 16)) self.Signals.Handle(item, "activate", lambda x: self.Blueman.remove(device)) self.append(item) item.show() item.props.tooltip_text = _("Remove this device from the known devices list") item = gtk.SeparatorMenuItem() item.show() self.append(item) item = create_menuitem(_("Disconnect Device"), get_icon("gtk-disconnect", 16)) item.props.tooltip_text = _("Forcefully disconnect a device") self.append(item) item.show() def on_disconnect(item): def finished(*args): self.unset_op(device) self.set_op(device, _("Disconnecting...")) self.Blueman.disconnect(device, reply_handler=finished, error_handler=finished) if device.Connected: self.Signals.Handle(item, "activate", on_disconnect) else: item.props.sensitive = False
def on_request_menu_items(self, manager_menu, device): items = [] uuids = device.UUIDs appl = AppletService() for name, service in device.Services.iteritems(): if name == "serial": ports_list = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev["state"] == "connected": return dev["channel"] active_ports = map(flt, ports_list) def get_port_id(channel): for dev in ports_list: if dev["dst"] == device.Address and dev["state"] == "connected" and dev["channel"] == channel: return dev["id"] serial_items = [] num_ports = 0 has_dun = False try: for port_name, channel, uuid in sdp_get_cached_rfcomm(device.Address): if SERIAL_PORT_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem(port_name, get_x_icon("blueman-serial", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((item, 150)) else: item = create_menuitem(port_name, get_icon("blueman-serial", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, channel) item.show() serial_items.append(item) elif DIALUP_NET_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem(port_name, get_x_icon("modem", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((item, 150)) else: item = create_menuitem(port_name, get_icon("modem", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, channel) item.show() serial_items.append(item) has_dun = True except KeyError: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == DIALUP_NET_SVCLASS_ID: item = create_menuitem(_("Dialup Service"), get_icon("modem", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() serial_items.append(item) has_dun = True if uuid16 == SERIAL_PORT_SVCLASS_ID: item = create_menuitem(_("Serial Service"), get_icon("blueman-serial", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() serial_items.append(item) for dev in ports_list: if dev["dst"] == device.Address: if dev["state"] == "connected": devname = _("Serial Port %s") % "rfcomm%d" % dev["id"] item = create_menuitem(devname, get_x_icon("modem", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % dev["id"]) items.append((item, 120)) item.show() def open_settings(i, device): from blueman.gui.GsmSettings import GsmSettings d = GsmSettings(device.Address) d.run() d.destroy() if has_dun and "PPPSupport" in appl.QueryPlugins(): item = gtk.SeparatorMenuItem() item.show() serial_items.append(item) item = create_menuitem(_("Dialup Settings"), get_icon("gtk-preferences", 16)) serial_items.append(item) item.show() manager_menu.Signals.Handle("gobject", item, "activate", open_settings, device) if len(serial_items) > 1: sub = gtk.Menu() sub.show() item = create_menuitem(_("Serial Ports"), get_icon("modem", 16)) item.set_submenu(sub) item.show() items.append((item, 90)) for item in serial_items: sub.append(item) else: for item in serial_items: items.append((item, 80)) elif name == "network": manager_menu.Signals.Handle("bluez", service, manager_menu.service_property_changed, "PropertyChanged") sprops = service.GetProperties() if not sprops["Connected"]: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == GN_SVCLASS_ID: item = create_menuitem(_("Group Network"), get_icon("network-wireless", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() items.append((item, 80)) if uuid16 == NAP_SVCLASS_ID: item = create_menuitem(_("Network Access Point"), get_icon("network-wireless", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() items.append((item, 81)) else: item = create_menuitem(_("Network"), get_x_icon("network-wireless", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) item.show() items.append((item, 101)) if "DhcpClient" in appl.QueryPlugins(): def renew(x): appl.DhcpClient(sprops["Device"]) item = create_menuitem(_("Renew IP Address"), get_icon("gtk-refresh", 16)) manager_menu.Signals.Handle("gobject", item, "activate", renew) item.show() items.append((item, 201)) elif name == "input": manager_menu.Signals.Handle("bluez", service, manager_menu.service_property_changed, "PropertyChanged") sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Input Service"), get_x_icon("mouse", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 100)) else: item = create_menuitem(_("Input Service"), get_icon("mouse", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 1)) item.show() elif name == "headset": sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 110)) else: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 10)) item.show() elif name == "audiosink": sprops = service.GetProperties() if sprops["Connected"]: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 120)) else: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _("Allows to send audio to remote device") manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 20)) item.show() elif name == "audiosource": sprops = service.GetProperties() if not sprops["State"] == "disconnected": item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 121)) else: item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _("Allows to receive audio from remote device") manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 21)) item.show() return items
def serial_port_id(self, channel): for dev in rfcomm_list(): if dev["dst"] == self.device.Address and dev[ "state"] == "connected" and dev["channel"] == channel: return dev["id"]
def on_request_menu_items_bluez4(self, manager_menu, device): # BlueZ 4 only items = [] uuids = device.UUIDs appl = AppletService() for name, service in device.Services.items(): if name == "serial": ports_list = rfcomm_list() def flt(dev): if dev["dst"] == device.Address and dev[ "state"] == "connected": return dev["channel"] active_ports = map(flt, ports_list) def get_port_id(channel): for dev in ports_list: if dev["dst"] == device.Address and dev[ "state"] == "connected" and dev[ "channel"] == channel: return dev["id"] serial_items = [] num_ports = 0 has_dun = False try: for port_name, channel, uuid in sdp_get_cached_rfcomm( device.Address): if SERIAL_PORT_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem( port_name, get_x_icon("blueman-serial", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((item, 150)) else: item = create_menuitem( port_name, get_icon("blueman-serial", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, channel) item.show() serial_items.append(item) elif DIALUP_NET_SVCLASS_ID in uuid: if name is not None: if channel in active_ports: item = create_menuitem( port_name, get_x_icon("modem", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % get_port_id(channel)) item.show() items.append((item, 150)) else: item = create_menuitem( port_name, get_icon("modem", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, channel) item.show() serial_items.append(item) has_dun = True except KeyError: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == DIALUP_NET_SVCLASS_ID: item = create_menuitem(_("Dialup Service"), get_icon("modem", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() serial_items.append(item) has_dun = True if uuid16 == SERIAL_PORT_SVCLASS_ID: item = create_menuitem( _("Serial Service"), get_icon("blueman-serial", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() serial_items.append(item) for dev in ports_list: if dev["dst"] == device.Address: if dev["state"] == "connected": devname = _( "Serial Port %s") % "rfcomm%d" % dev["id"] item = create_menuitem(devname, get_x_icon("modem", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_disconnect, device, name, "/dev/rfcomm%d" % dev["id"]) items.append((item, 120)) item.show() def open_settings(i, device): from blueman.gui.GsmSettings import GsmSettings d = GsmSettings(device.Address) d.run() d.destroy() if has_dun and "PPPSupport" in appl.QueryPlugins(): item = Gtk.SeparatorMenuItem() item.show() serial_items.append(item) item = create_menuitem(_("Dialup Settings"), get_icon("preferences-desktop", 16)) serial_items.append(item) item.show() manager_menu.Signals.Handle("gobject", item, "activate", open_settings, device) if len(serial_items) > 1: sub = Gtk.Menu() sub.show() item = create_menuitem(_("Serial Ports"), get_icon("modem", 16)) item.set_submenu(sub) item.show() items.append((item, 90)) for item in serial_items: sub.append(item) else: for item in serial_items: items.append((item, 80)) elif name == "network": manager_menu.Signals.Handle( "bluez", service, manager_menu.service_property_changed, "PropertyChanged") sprops = service.get_properties() if not sprops["Connected"]: for uuid in uuids: uuid16 = uuid128_to_uuid16(uuid) if uuid16 == GN_SVCLASS_ID: item = create_menuitem( _("Group Network"), get_icon("network-wireless", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() items.append((item, 80)) if uuid16 == NAP_SVCLASS_ID: item = create_menuitem( _("Network Access Point"), get_icon("network-wireless", 16)) manager_menu.Signals.Handle( "gobject", item, "activate", manager_menu.on_connect, device, name, uuid) item.show() items.append((item, 81)) else: item = create_menuitem(_("Network"), get_x_icon("network-wireless", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) item.show() items.append((item, 101)) if "DhcpClient" in appl.QueryPlugins(): def renew(x): appl.DhcpClient(sprops["Interface"]) item = create_menuitem(_("Renew IP Address"), get_icon("view-refresh", 16)) manager_menu.Signals.Handle("gobject", item, "activate", renew) item.show() items.append((item, 201)) elif name == "input": manager_menu.Signals.Handle( "bluez", service, manager_menu.service_property_changed, "PropertyChanged") sprops = service.get_properties() if sprops["Connected"]: item = create_menuitem(_("Input Service"), get_x_icon("mouse", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 100)) else: item = create_menuitem(_("Input Service"), get_icon("mouse", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 1)) item.show() elif name == "headset": sprops = service.get_properties() if sprops["Connected"]: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 110)) else: item = create_menuitem(_("Headset Service"), get_icon("blueman-handsfree", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 10)) item.show() elif name == "audiosink": sprops = service.get_properties() if sprops["Connected"]: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 120)) else: item = create_menuitem(_("Audio Sink"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _( "Allows to send audio to remote device") manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 20)) item.show() elif name == "audiosource": sprops = service.get_properties() if not sprops["State"] == "disconnected": item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, device, name) items.append((item, 121)) else: item = create_menuitem(_("Audio Source"), get_icon("blueman-headset", 16)) item.props.tooltip_text = _( "Allows to receive audio from remote device") manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, device, name) items.append((item, 21)) item.show() return items
def on_request_menu_items(self, manager_menu, device): items = [] appl = AppletService() self.has_dun = False serial_items = [] def add_menu_item(manager_menu, service): if service.connected: item = create_menuitem(service.name, get_x_icon(service.icon, 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, service) items.append((item, service.priority + 100)) else: item = create_menuitem(service.name, get_icon(service.icon, 16)) if service.description: item.props.tooltip_text = service.description manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_connect, service) if service.group == 'serial': serial_items.append(item) if isinstance(service, DialupNetwork): self.has_dun = True else: items.append((item, service.priority)) item.show() for service in device.get_services(): if service.group == 'network': manager_menu.Signals.Handle( "bluez", Network(device.get_object_path()), manager_menu.service_property_changed, "PropertyChanged") if isinstance(service, Input): manager_menu.Signals.Handle( "bluez", device, manager_menu.service_property_changed, "PropertyChanged") add_menu_item(manager_menu, service) if service.group == 'serial': for dev in rfcomm_list(): if dev["dst"] == device.Address and dev[ "state"] == "connected": devname = _("Serial Port %s") % "rfcomm%d" % dev["id"] item = create_menuitem(devname, get_x_icon("modem", 16)) manager_menu.Signals.Handle("gobject", item, "activate", manager_menu.on_disconnect, service, dev["id"]) items.append((item, 120)) item.show() if service.group == 'network' and service.connected: if "DhcpClient" in appl.QueryPlugins(): def renew(x): appl.DhcpClient( Network(device.get_object_path()).get_properties() ["Interface"]) item = create_menuitem(_("Renew IP Address"), get_icon("view-refresh", 16)) manager_menu.Signals.Handle("gobject", item, "activate", renew) item.show() items.append((item, 201)) if self.has_dun and "PPPSupport" in appl.QueryPlugins(): def open_settings(i, device): from blueman.gui.GsmSettings import GsmSettings d = GsmSettings(device.Address) d.run() d.destroy() item = Gtk.SeparatorMenuItem() item.show() serial_items.append(item) item = create_menuitem(_("Dialup Settings"), get_icon("gtk-preferences", 16)) serial_items.append(item) item.show() manager_menu.Signals.Handle("gobject", item, "activate", open_settings, device) if len(serial_items) > 1: sub = Gtk.Menu() sub.show() item = create_menuitem(_("Serial Ports"), get_icon("modem", 16)) item.set_submenu(sub) item.show() items.append((item, 90)) for item in serial_items: sub.append(item) else: for item in serial_items: items.append((item, 80)) return items