Beispiel #1
0
    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)
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
	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)
Beispiel #5
0
    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)
Beispiel #6
0
	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
Beispiel #7
0
	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
Beispiel #8
0
 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"]
Beispiel #9
0
    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
Beispiel #10
0
    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