#!/usr/bin/python

import gobject

import dbus
import dbus.mainloop.glib
from optparse import OptionParser

def parse_options():
    parser.add_option("-d", "--device", dest="device",
                      help="Device to connect", metavar="DEVICE")
    parser.add_option("-c", "--chdir", dest="new_dir",
                      help="Change current directory to DIR", metavar="DIR")
    parser.add_option("-l", "--lsdir", action="store_true", dest="ls_dir",
                      help="List folders in current directory")
    parser.add_option("-v", "--verbose", action="store_true", dest="verbose")
    parser.add_option("-L", "--lsmsg", action="store", dest="ls_msg",
                      help="List messages in supplied CWD subdir")

    return parser.parse_args()

def set_folder(session, new_dir):
    for node in new_dir.split("/"):
        session.SetFolder(node)

if  __name__ == '__main__':

    dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)

    parser = OptionParser()

    (options, args) = parse_options()

    if not options.device:
        parser.print_help()
        exit(0)

    bus = dbus.SessionBus()
    mainloop = gobject.MainLoop()

    client = dbus.Interface(bus.get_object("org.openobex.client", "/"),
                            "org.openobex.Client")

    session_path = client.CreateSession({ "Destination": options.device,
                                          "Target": "map"})

    session = dbus.Interface(bus.get_object("org.openobex.client", session_path),
                 "org.openobex.Session")

    map = dbus.Interface(bus.get_object("org.openobex.client", session_path),
                 "org.openobex.MessageAccess")

    if options.new_dir:
        set_folder(map, options.new_dir)

    if options.ls_dir:
        print map.GetFolderListing(dict())

    if options.ls_msg is not None:
	print map.GetMessageListing(options.ls_msg, dict())

    mainloop.run()
