#!/usr/bin/python

import os
import sys
import gobject

import dbus
import dbus.mainloop.glib

import neardutils

from dbus.lowlevel import MethodCallMessage, HANDLER_RESULT_NOT_YET_HANDLED

mainloop = gobject.MainLoop()

def device_added(path, interfaces):
	for iface, props in interfaces.iteritems():
		if "org.neard.Device" in interfaces:
			print("Pairing with %s" % (path))
			device = dbus.Interface(bus.get_object("org.neard", path),
							"org.neard.Device")
			device.Push(({ "Type" : "MIME", "MIME" : "x/nfctl"}))
			break

def device_removed(path, interfaces):
	for iface in interfaces:
		if "org.neard.Device" in interfaces:
			print("Lost device %s" % (path))
			mainloop.quit()
			break

if __name__ == '__main__':
	dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

	bus = dbus.SystemBus()

	adapter_path = neardutils.find_adapter().object_path
	print("Adapter path %s" % (adapter_path))
	adapter = dbus.Interface(bus.get_object("org.neard", adapter_path),
						"org.neard.Adapter")

	adapter_props = dbus.Interface(bus.get_object("org.neard", adapter_path),
						"org.freedesktop.DBus.Properties")
	powered = adapter_props.Get("org.neard.Adapter", "Powered")
	if (powered == dbus.Boolean(0)):
		adapter_props.Set("org.neard.Adapter", "Powered", dbus.Boolean(1))

	polling = adapter_props.Get("org.neard.Adapter", "Polling")
	if (polling == dbus.Boolean(0)):
		adapter.StopPollLoop()

        print "Starting poll on %s" % (adapter_path)
	adapter.StartPollLoop("Initiator")

	bus.add_signal_receiver(device_added, bus_name="org.neard",
			dbus_interface="org.freedesktop.DBus.ObjectManager",
			signal_name="InterfacesAdded")

	bus.add_signal_receiver(device_removed, bus_name="org.neard",
			dbus_interface="org.freedesktop.DBus.ObjectManager",
			signal_name="InterfacesRemoved")

	mainloop.run()
