Diff between 9169be4ff8b4dcf24098fb1cd3fe7bed429b5481 and bec7ef3c3c7d0731e353aaa8fb2d7b44098bf5c8

Changed Files

File Additions Deletions Status
test/test-discovery +63 -26 modified

Full Patch

diff --git a/test/test-discovery b/test/test-discovery
index 0004f52..c13bfac 100755
--- a/test/test-discovery
+++ b/test/test-discovery
@@ -12,7 +12,7 @@ import bluezutils
 compact = False
 devices = {}
 
-def print_compact(path, address, properties):
+def print_compact(address, properties):
 	name = ""
 	address = "<unknown>"
 
@@ -24,14 +24,16 @@ def print_compact(path, address, properties):
 		elif (key == "Address"):
 			address = value
 
-	if path in devices:
+	if "Logged" in properties:
 		flag = "*"
 	else:
 		flag = " "
 
 	print("%s%s %s" % (flag, address, name))
 
-def print_normal(path, address, properties):
+	properties["Logged"] = True
+
+def print_normal(address, properties):
 	print("[ " + address + " ]")
 
 	for key in properties.keys():
@@ -45,41 +47,63 @@ def print_normal(path, address, properties):
 
 	print()
 
-def skip_dev(path, new_dev):
-	if not compact:
-		return False;
+	properties["Logged"] = True
 
-	if not path in devices:
+def skip_dev(old_dev, new_dev):
+	if not "Logged" in old_dev:
 		return False
-
-	old_dev = devices[path]
-
 	if "Name" in old_dev:
 		return True
-
 	if not "Name" in new_dev:
 		return True
-
 	return False
 
-def print_dev(path, props):
-	if "Address" in props:
-		address = props["Address"]
+def interfaces_added(path, interfaces):
+	properties = interfaces["org.bluez.Device1"]
+	if not properties:
+		return
+
+	if path in devices:
+		dev = devices[path]
+
+		if compact and skip_dev(dev, properties):
+			return
+		devices[path] = dict(devices[path].items() + properties.items())
+	else:
+		devices[path] = properties
+
+	if "Address" in devices[path]:
+		address = properties["Address"]
 	else:
 		address = "<unknown>"
 
 	if compact:
-		print_compact(path, address, props)
+		print_compact(address, devices[path])
 	else:
-		print_normal(path, address, props)
+		print_normal(address, devices[path])
 
-def devices_found(found_devs):
-	for path, properties in found_devs.iteritems():
-		if (skip_dev(path, properties)):
-			continue
+def properties_changed(interface, changed, invalidated, path):
+	if interface != "org.bluez.Device1":
+		return
 
-		print_dev(path, properties)
-		devices[path] = properties
+	if path in devices:
+		dev = devices[path]
+
+		if compact and skip_dev(dev, changed):
+			return
+		devices[path] = dict(devices[path].items() + changed.items())
+	else:
+		devices[path] = changed
+
+	if "Address" in devices[path]:
+		address = devices[path]["Address"]
+	else:
+		address = "<unknown>"
+
+	if compact:
+		print_compact(address, devices[path])
+	else:
+		print_normal(address, devices[path])
 
 def property_changed(name, value):
 	if (name == "Discovering" and not value):
@@ -105,14 +129,27 @@ if __name__ == '__main__':
 	if options.compact:
 		compact = True;
 
-	bus.add_signal_receiver(devices_found,
-					dbus_interface = "org.bluez.Adapter1",
-					signal_name = "DevicesFound")
+	bus.add_signal_receiver(interfaces_added,
+			dbus_interface = "org.freedesktop.DBus.ObjectManager",
+			signal_name = "InterfacesAdded")
+
+	bus.add_signal_receiver(properties_changed,
+			dbus_interface = "org.freedesktop.DBus.Properties",
+			signal_name = "PropertiesChanged",
+			arg0 = "org.bluez.Device1",
+			path_keyword = "path")
 
 	bus.add_signal_receiver(property_changed,
 					dbus_interface = "org.bluez.Adapter1",
 					signal_name = "PropertyChanged")
 
+	om = dbus.Interface(bus.get_object("org.bluez", "/"),
+				"org.freedesktop.DBus.ObjectManager")
+	objects = om.GetManagedObjects()
+	for path, interfaces in objects.iteritems():
+		if "org.bluez.Device1" in interfaces:
+			devices[path] = interfaces["org.bluez.Device1"]
+
 	adapter.StartDiscovery()
 
 	mainloop = GObject.MainLoop()