|
Packit Service |
8264ee |
#!/usr/bin/python
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
from __future__ import absolute_import, print_function, unicode_literals
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
from optparse import OptionParser
|
|
Packit Service |
8264ee |
import os.path
|
|
Packit Service |
8264ee |
import sys
|
|
Packit Service |
8264ee |
import dbus
|
|
Packit Service |
8264ee |
import dbus.mainloop.glib
|
|
Packit Service |
8264ee |
try:
|
|
Packit Service |
8264ee |
from gi.repository import GObject
|
|
Packit Service |
8264ee |
except ImportError:
|
|
Packit Service |
8264ee |
import gobject as GObject
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
BUS_NAME='org.bluez.obex'
|
|
Packit Service |
8264ee |
PATH = '/org/bluez/obex'
|
|
Packit Service |
8264ee |
CLIENT_INTERFACE='org.bluez.obex.Client1'
|
|
Packit Service |
8264ee |
SESSION_INTERFACE='org.bluez.obex.Session1'
|
|
Packit Service |
8264ee |
OBJECT_PUSH_INTERFACE='org.bluez.obex.ObjectPush1'
|
|
Packit Service |
8264ee |
TRANSFER_INTERFACE='org.bluez.obex.Transfer1'
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def parse_options():
|
|
Packit Service |
8264ee |
parser.add_option("-d", "--device", dest="device",
|
|
Packit Service |
8264ee |
help="Device to connect", metavar="DEVICE")
|
|
Packit Service |
8264ee |
parser.add_option("-p", "--pull", dest="pull_to_file",
|
|
Packit Service |
8264ee |
help="Pull vcard and store in FILE", metavar="FILE")
|
|
Packit Service |
8264ee |
parser.add_option("-s", "--send", dest="send_file",
|
|
Packit Service |
8264ee |
help="Send FILE", metavar="FILE")
|
|
Packit Service |
8264ee |
parser.add_option("-v", "--verbose", action="store_true",
|
|
Packit Service |
8264ee |
dest="verbose")
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
return parser.parse_args()
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
class OppClient:
|
|
Packit Service |
8264ee |
def __init__(self, session_path, verbose=False):
|
|
Packit Service |
8264ee |
self.transferred = 0
|
|
Packit Service |
8264ee |
self.transfer_path = None
|
|
Packit Service |
8264ee |
self.verbose = verbose
|
|
Packit Service |
8264ee |
bus = dbus.SessionBus()
|
|
Packit Service |
8264ee |
obj = bus.get_object(BUS_NAME, session_path)
|
|
Packit Service |
8264ee |
self.session = dbus.Interface(obj, SESSION_INTERFACE)
|
|
Packit Service |
8264ee |
self.opp = dbus.Interface(obj, OBJECT_PUSH_INTERFACE)
|
|
Packit Service |
8264ee |
bus.add_signal_receiver(self.properties_changed,
|
|
Packit Service |
8264ee |
dbus_interface="org.freedesktop.DBus.Properties",
|
|
Packit Service |
8264ee |
signal_name="PropertiesChanged",
|
|
Packit Service |
8264ee |
path_keyword="path")
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def create_transfer_reply(self, path, properties):
|
|
Packit Service |
8264ee |
self.transfer_path = path
|
|
Packit Service |
8264ee |
self.transfer_size = properties["Size"]
|
|
Packit Service |
8264ee |
if self.verbose:
|
|
Packit Service |
8264ee |
print("Transfer created: %s" % path)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def error(self, err):
|
|
Packit Service |
8264ee |
print(err)
|
|
Packit Service |
8264ee |
mainloop.quit()
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def properties_changed(self, interface, properties, invalidated, path):
|
|
Packit Service |
8264ee |
if path != self.transfer_path:
|
|
Packit Service |
8264ee |
return
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if "Status" in properties and \
|
|
Packit Service |
8264ee |
(properties["Status"] == "complete" or \
|
|
Packit Service |
8264ee |
properties["Status"] == "error"):
|
|
Packit Service |
8264ee |
if self.verbose:
|
|
Packit Service |
8264ee |
print("Transfer %s" % properties["Status"])
|
|
Packit Service |
8264ee |
mainloop.quit()
|
|
Packit Service |
8264ee |
return
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if "Transferred" not in properties:
|
|
Packit Service |
8264ee |
return
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
value = properties["Transferred"]
|
|
Packit Service |
8264ee |
speed = (value - self.transferred) / 1000
|
|
Packit Service |
8264ee |
print("Transfer progress %d/%d at %d kBps" % (value,
|
|
Packit Service |
8264ee |
self.transfer_size,
|
|
Packit Service |
8264ee |
speed))
|
|
Packit Service |
8264ee |
self.transferred = value
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def pull_business_card(self, filename):
|
|
Packit Service |
8264ee |
self.opp.PullBusinessCard(os.path.abspath(filename),
|
|
Packit Service |
8264ee |
reply_handler=self.create_transfer_reply,
|
|
Packit Service |
8264ee |
error_handler=self.error)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
def send_file(self, filename):
|
|
Packit Service |
8264ee |
self.opp.SendFile(os.path.abspath(filename),
|
|
Packit Service |
8264ee |
reply_handler=self.create_transfer_reply,
|
|
Packit Service |
8264ee |
error_handler=self.error)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if __name__ == '__main__':
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
parser = OptionParser()
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
(options, args) = parse_options()
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if not options.device:
|
|
Packit Service |
8264ee |
parser.print_help()
|
|
Packit Service |
8264ee |
sys.exit(0)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
bus = dbus.SessionBus()
|
|
Packit Service |
8264ee |
mainloop = GObject.MainLoop()
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
client = dbus.Interface(bus.get_object(BUS_NAME, PATH),
|
|
Packit Service |
8264ee |
CLIENT_INTERFACE)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
print("Creating Session")
|
|
Packit Service |
8264ee |
path = client.CreateSession(options.device, { "Target": "OPP" })
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
opp_client = OppClient(path, options.verbose)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if options.pull_to_file:
|
|
Packit Service |
8264ee |
opp_client.pull_business_card(options.pull_to_file)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
if options.send_file:
|
|
Packit Service |
8264ee |
opp_client.send_file(options.send_file)
|
|
Packit Service |
8264ee |
|
|
Packit Service |
8264ee |
mainloop.run()
|