Blame test/opp-client

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()