6 import dbus.mainloop.glib
8 from optparse import OptionParser
11 parser.add_option("-d", "--device", dest="device",
12 help="Device to connect", metavar="DEVICE")
13 parser.add_option("-p", "--pull", dest="pull_to_file",
14 help="Pull vcard and store in FILE", metavar="FILE")
15 parser.add_option("-s", "--send", dest="send_file",
16 help="Send FILE", metavar="FILE")
17 parser.add_option("-v", "--verbose", action="store_true",
20 return parser.parse_args()
23 def __init__(self, session_path, verbose=False):
25 self.transfer_path = None
26 self.verbose = verbose
27 bus = dbus.SessionBus()
28 obj = bus.get_object("org.bluez.obex.client", session_path)
29 self.session = dbus.Interface(obj, "org.bluez.obex.Session")
30 self.opp = dbus.Interface(obj, "org.bluez.obex.ObjectPush")
31 bus.add_signal_receiver(self.transfer_complete,
32 dbus_interface="org.bluez.obex.Transfer",
33 signal_name="Complete",
35 bus.add_signal_receiver(self.transfer_error,
36 dbus_interface="org.bluez.obex.Transfer",
40 bus.add_signal_receiver(self.transfer_progress,
41 dbus_interface="org.bluez.obex.Transfer",
42 signal_name="PropertyChanged",
45 def create_transfer_reply(self, reply):
46 (path, properties) = reply
47 self.transfer_path = path
48 self.transfer_size = properties["Size"]
50 print "Transfer created: %s" % path
56 def transfer_complete(self, path):
57 if path != self.transfer_path:
60 print "Transfer finished"
63 def transfer_error(self, code, message, path):
64 if path != self.transfer_path:
66 print "Transfer finished with error %s: %s" % (code, message)
69 def transfer_progress(self, prop, value, path):
70 if path != self.transfer_path:
73 if prop != "Progress":
76 speed = (value - self.progress) / 1000
77 print "Transfer progress %d/%d at %d kBps" % (value,
82 def pull_business_card(self, filename):
83 self.opp.PullBusinessCard(os.path.abspath(filename),
84 reply_handler=self.create_transfer_reply,
85 error_handler=self.error)
87 def send_file(self, filename):
88 self.opp.SendFile(os.path.abspath(filename),
89 reply_handler=self.create_transfer_reply,
90 error_handler=self.error)
92 if __name__ == '__main__':
94 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
96 parser = OptionParser()
98 (options, args) = parse_options()
100 if not options.device:
104 bus = dbus.SessionBus()
105 mainloop = gobject.MainLoop()
107 client = dbus.Interface(bus.get_object("org.bluez.obex.client", "/"),
108 "org.bluez.obex.Client")
110 print "Creating Session"
111 path = client.CreateSession(options.device, { "Target": "OPP" })
113 opp_client = OppClient(path, options.verbose)
115 if options.pull_to_file:
116 opp_client.pull_business_card(options.pull_to_file)
118 if options.send_file:
119 opp_client.send_file(options.send_file)