#!/usr/bin/env python
import dbus, gobject
import time
from time import strftime, gmtime
from dbus.mainloop.glib import DBusGMainLoop
from xml.dom.minidom import Document
from xml.dom import minidom

class CATDaemon:
	def __init__(self):
		print "running.."
		DBusGMainLoop(set_as_default=True)
		self.bus = dbus.SystemBus()
		self.call_watch()
		self.sms_watch()
		gobject.MainLoop().run()

	def get_banned(self, number):
		try:
			doc = minidom.parse('/home/user/MyDocs/.callblocklist.xml')
			root = doc.childNodes[0]
			for n in root.getElementsByTagName('number'):
				if n.firstChild.wholeText == number:
					self.logger("blocked:%s:%s\n" % (number, strftime("%d %b %Y %H:%M:%S", gmtime())))
					qt = 1
		except:
			None
		if qt == 1:
			return 1
		else:
			return 0

	def logger(self, txt):
		f = open("/home/user/MyDocs/.callblacklist.log", "a+").write(txt)
		f.close()

	def sms_watch(self):
		self.bus.add_signal_receiver(self.sms_handler, path='/com/nokia/phone/SMS', dbus_interface='Phone.SMS', signal_name='IncomingSegment')

	def sms_handler(self, pdu, msgcenter, somestring, sendernumber):
		print "text from: %s" % sendernumber, pdu, somestring

	def call_watch(self):
		self.bus.add_signal_receiver(self.call_handler, path='/com/nokia/csd/call', dbus_interface='com.nokia.csd.Call', signal_name='Coming')

	def call_handler(self, obj_path, callernumber):
		if self.get_banned(callernumber) > 0:
			self.notifyme("Rejected call from: %s" % callernumber)
			mycall = self.bus.get_object('com.nokia.csd.Call', obj_path)
			cwi = dbus.Interface(mycall, 'com.nokia.csd.Call.Instance')
			cwi.Release()

	def notifyme(self,message):
		iface = dbus.Interface(self.bus.get_object('org.freedesktop.Notifications','/org/freedesktop/Notifications'), 'org.freedesktop.Notifications')
		iface.SystemNoteDialog(str(message), dbus.UInt32(0), 'Ok')

if __name__ == "__main__":
	c = CATDaemon()
