1 from electrum.util import print_error
6 print_error("Install zbar package to enable QR scans")
9 from urlparse import urlparse, parse_qs
16 proc = zbar.Processor()
18 except zbar.SystemError:
19 # Cannot open video device
25 proc = zbar.Processor()
33 # User closed the preview window
36 for r in proc.results:
37 if str(r.type) != 'QRCODE':
40 return parse_uri(r.data)
44 # It's just an address (not BIP21)
45 return {'address': uri}
48 # Workaround for urlparse, it don't handle bitcoin: URI properly
49 uri = uri.replace(':', '://')
52 result = {'address': uri.netloc}
54 if uri.path.startswith('?'):
55 params = parse_qs(uri.path[1:])
57 params = parse_qs(uri.path)
59 for k,v in params.items():
60 if k in ('amount', 'label', 'message'):
65 if __name__ == '__main__':
68 assert(parse_uri('1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
69 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
71 assert(parse_uri('bitcoin://1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
72 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
74 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN') ==
75 {'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
77 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN?amount=10') ==
78 {'amount': '10', 'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})
80 assert(parse_uri('bitcoin:1Marek48fwU7mugmSe186do2QpUkBnpzSN?amount=10&label=slush&message=Small%20tip%20to%20slush') ==
81 {'amount': '10', 'label': 'slush', 'message': 'Small tip to slush', 'address': '1Marek48fwU7mugmSe186do2QpUkBnpzSN'})