#!/usr/bin/python

import sys
import dbus


def list_folder(folder):
	bus = dbus.SessionBus()
	client = dbus.Interface(bus.get_object("org.bluez.obex",
						"/org/bluez/obex"),
						"org.bluez.obex.Client")

	path = client.CreateSession(sys.argv[1], { "Target": "ftp" })

	ftp = dbus.Interface(bus.get_object("org.bluez.obex", path),
				"org.bluez.obex.FileTransfer")

	if folder:
		for node in folder.split("/"):
			ftp.ChangeFolder(node)

	for i in ftp.ListFolder():
		if i["Type"] == "folder":
			print "%s/" % (i["Name"])
		else:
			print "%s" % (i["Name"])


if __name__ == '__main__':

	if len(sys.argv) < 2:
		print "Usage: %s <device> [folder]" % (sys.argv[0])
		sys.exit(1)

	folder = None
	if len(sys.argv) == 3:
		folder = sys.argv[2]

	list_folder(folder)
