#!/usr/bin/python
import dbus
import dbus.glib
import gobject
import time
import os
import sys

def dbg(s):
    print("%s %s" % (time.strftime("%H:%M:%S"), s))

class UI:
    def __init__(self, loop):
        self.loop = loop

        bus = dbus.SystemBus()
        self.gsm_device_obj = bus.get_object("org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Device")
        self.gsm_device_iface = dbus.Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Device')
        self.gsm_sim_iface = dbus.Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.SIM')
        self.gsm_network_iface = dbus.Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Network')
        self.gsm_call_iface = dbus.Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Call')
        self.gsm_test_iface = dbus.Interface(self.gsm_device_obj, 'org.freesmartphone.GSM.Test')

        self.gsm_sim_iface.RetrieveMessagebook("all",
                                               reply_handler = self.cbMessagebookReply,
                                               error_handler = lambda e: (dbg("cbMessagebookError %s" % e), self.loop.quit()))

    def cbMessagebookReply(self, result):
        for (n, state, sender, msg, meta) in result:
            n = int(n)
            state = str(state)
            sender = str(sender)
            msg = str(msg.encode("ISO-8859-1"))
            meta["n"] = n
            meta["state"] = state
            meta["from"] = sender
            meta2 = " ".join(["(%s %s)" % (i, meta[i]) for i in meta.keys()])
            meta2 = meta2.encode("ISO-8859-1")
            print(meta2)
            print(msg)
            if "alphabet" in meta.keys() and meta["alphabet"] == "binary":
                msg = ""
                for i in meta["data"]:
                    msg += chr(i)
                print(repr(msg))
            # 'BEGIN:VCARD\r\nVERSION:2.1\r\nN:Lastname;Firstname ;;;\r\nTEL;CELL:+35846XXXXXX\r\nEND:VCARD\r\n'
        self.loop.quit()

if __name__ == "__main__":
    loop = gobject.MainLoop()
    UI(loop)
    loop.run()

