Merge branch 'master' of gnunet.org:gnunet
[oweals/gnunet.git] / src / util / gnunet-qr.py
1 from __future__ import print_function
2 from builtins import str
3 import sys
4 import getopt
5 import subprocess
6 from sys import argv
7 try:
8     import zbar
9 except ImportError as e:
10     print('Cannot run gnunet-qr, please install zbar-python')
11     sys.exit(1)
12
13
14 def help():
15     print('gnunet-qr\n\
16 Scan a QR code using a video device and import\n\
17 Arguments mandatory for long options are also mandatory for short options.\n\
18   -c, --config=FILENAME      use configuration file FILENAME\n\
19   -d, --device=DEVICE        use device DEVICE\n\
20   -s, --silent               do not show preview windows\n\
21   -h, --help                 print this help\n\
22   -v, --verbose              be verbose\n\
23 Report bugs to gnunet-developers@gnu.org.\n\
24 GNUnet home page: http://www.gnu.org/software/gnunet/\n\
25 General help using GNU software: http://www.gnu.org/gethelp/')
26
27
28 if __name__ == '__main__':
29         configuration = ''
30         device = '/dev/video0'
31         url = ''
32         verbose = False
33         silent = False
34         # Parse arguments
35         try:
36                 opts, args = getopt.gnu_getopt(sys.argv[1:], "c:hd:sv", ["config", "help", "device", "silent", "verbose"])
37         except getopt.GetoptError as e:
38                 help()
39                 print(str(e))
40                 exit(1)
41         for o, a in opts:
42                 if o in ("-h", "--help"):
43                         help()
44                         sys.exit(0)
45                 elif o in ("-c", "--config"):
46                         configuration = a
47                 elif o in ("-d", "--device"):
48                         device = a
49                 elif o in ("-s", "--silent"):
50                         silent = True
51                 elif o in ("-v", "--verbose"):
52                         verbose = True
53         if (True == verbose):
54                 print('Initializing')
55         # create a Processor
56         proc = zbar.Processor()
57
58         # configure the Processor
59         proc.parse_config('enable')
60
61         # initialize the Processor
62         try:
63                 if (True == verbose):
64                         print('Opening video device ' + device)
65                 proc.init(device)
66         except Exception as e:
67                 print('Failed to open device ' + device)
68                 exit(1)
69
70         # enable the preview window
71         # if (True == silent):
72         #       proc.visible = True
73         # else:
74         #               proc.visible = False
75
76         proc.visible = True
77         # read at least one barcode (or until window closed)
78         try:
79                 if (True == verbose):
80                         print('Capturing')
81                 proc.process_one()
82         except Exception as e:
83                 # Window was closed without finding code
84                 exit(1)
85
86         # hide the preview window
87         proc.visible = False
88
89         # extract results
90         for symbol in proc.results:
91                 # do something useful with results
92                 if (True == verbose):
93                         print('Found ', symbol.type, ' symbol ', '"%s"' % symbol.data)
94                 args = list()
95                 args.append("gnunet-uri")
96                 if (configuration != ''):
97                         args.append(str("-c " + str(configuration)))
98                 args.append(str(symbol.data))
99                 cmd = ''
100                 for a in args:
101                         cmd += " " + str(a)
102                 if (verbose):
103                         print('Running `' + cmd +'`')
104                 res = subprocess.call(args)
105                 if (0 != res):
106                         print('Failed to add URI ' + str(symbol.data))
107                 else:
108                         print('Added URI ' + str(symbol.data))
109                 exit(res)
110         exit(1)