#!/usr/bin/python 

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop

import gobject
import os

from blueman.Main.netconf import *

from blueman.Services.autostart import autostart

timeout = 20
time = 0

def timer(*args):
	global time
	time+=1
	if time == timeout:
		loop.quit()
		
	return True

class conf_service(dbus.service.Object):
	def __init__(self):

		self.bus = dbus.SystemBus();
		self.bus.request_name("org.blueman.Mechanism")
		dbus.service.Object.__init__(self, self.bus, "/")
		
		service = self.bus.get_object('org.freedesktop.PolicyKit', '/')
		self.polkit = dbus.Interface(service, 'org.freedesktop.PolicyKit')


		



	def confirm_authorization(self, busname, action_id):
		global time
		time = 0
		res = self.polkit.IsSystemBusNameAuthorized(action_id, busname, False)
		
		if res != "yes":
			raise dbus.DBusException, "Not authorized"
	
	
	
	@dbus.service.method(dbus_interface='org.blueman.Mechanism', in_signature="sb", out_signature="b", sender_keyword="caller")

	def NetworkSetup(self, ip_address, allow_nat, caller):
		self.confirm_authorization(caller, "org.blueman.network.setup")

		if ip_address == "0":
			nc = netconf(0, False)
			nc.unsetup_dhcp()
			nc.unsetup_ifup()
			return True
		else:
			if ip_chk(ip_address):
				nc = netconf(ip_address, allow_nat)
		
				rr = nc.setup_dhcp()
				nc.setup_ifup(rr)
				return True
			else:
				return dbus.DBusException("IP Invalid")
		
		
		

	@dbus.service.method(dbus_interface='org.blueman.Mechanism', in_signature="sb", out_signature="b", sender_keyword="caller")	
	def AutostartManager(self, service, state, caller):
		self.confirm_authorization(caller, "org.blueman.autostart")

		astart = autostart(service)
		if state:
			ret = astart.enable()
			return ret
		else:
			ret = astart.disable()
			return ret
		
	

DBusGMainLoop(set_as_default=True)
loop = gobject.MainLoop()

conf_service()
gobject.timeout_add(1000, timer)


loop.run()

