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