tMerge pull request #3874 from SomberNight/zbar_windows - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit 1825c92bbc873f23167eb72a4dc29127f346c7a5
 (DIR) parent 5e7c1330d4d3d0bad0745cd897c05f9ffafd70ee
 (HTM) Author: ThomasV <thomasv@electrum.org>
       Date:   Fri, 23 Feb 2018 19:20:18 +0100
       
       Merge pull request #3874 from SomberNight/zbar_windows
       
       zbar for windows
       Diffstat:
         M contrib/build-wine/deterministic.s… |       1 +
         M contrib/build-wine/prepare-wine.sh  |       8 ++++++--
         M lib/qrscanner.py                    |      10 +++++++---
       
       3 files changed, 14 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/contrib/build-wine/deterministic.spec b/contrib/build-wine/deterministic.spec
       t@@ -34,6 +34,7 @@ datas = [
            (home+'lib/wordlist/english.txt', 'electrum/wordlist'),
            (home+'lib/locale', 'electrum/locale'),
            (home+'plugins', 'electrum_plugins'),
       +    ('C:\\Program Files (x86)\\ZBar\\bin\\', '.')
        ]
        datas += collect_data_files('trezorlib')
        datas += collect_data_files('btchip')
 (DIR) diff --git a/contrib/build-wine/prepare-wine.sh b/contrib/build-wine/prepare-wine.sh
       t@@ -4,6 +4,9 @@
        NSIS_URL=https://prdownloads.sourceforge.net/nsis/nsis-3.02.1-setup.exe?download
        NSIS_SHA256=736c9062a02e297e335f82252e648a883171c98e0d5120439f538c81d429552e
        
       +ZBAR_URL=https://sourceforge.net/projects/zbarw/files/zbarw-20121031-setup.exe/download
       +ZBAR_SHA256=177e32b272fa76528a3af486b74e9cb356707be1c5ace4ed3fcee9723e2c2c02
       +
        LIBUSB_URL=https://prdownloads.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.21/libusb-1.0.21.7z?download
        LIBUSB_SHA256=acdde63a40b1477898aee6153f9d91d1a2e8a5d93f832ca8ab876498f3a6d2b8
        
       t@@ -88,8 +91,9 @@ $PYTHON -m pip install -r ../../deterministic-build/requirements-binaries.txt
        $PYTHON -m pip install https://github.com/ecdsa/pyinstaller/archive/fix_2952.zip
        
        # Install ZBar
       -#wget -q -O zbar.exe "https://sourceforge.net/projects/zbar/files/zbar/0.10/zbar-0.10-setup.exe/download"
       -#wine zbar.exe
       +wget -q -O zbar.exe "$ZBAR_URL"
       +verify_hash zbar.exe $ZBAR_SHA256
       +wine zbar.exe /S
        
        
        # Upgrade setuptools (so Electrum can be installed later)
 (DIR) diff --git a/lib/qrscanner.py b/lib/qrscanner.py
       t@@ -29,8 +29,8 @@ import ctypes
        
        if sys.platform == 'darwin':
            name = 'libzbar.dylib'
       -elif sys.platform == 'windows':
       -    name = 'libzbar.dll'
       +elif sys.platform in ('windows', 'win32'):
       +    name = 'libzbar-0.dll'
        else:
            name = 'libzbar.so.0'
        
       t@@ -40,7 +40,7 @@ except OSError:
            libzbar = None
        
        
       -def scan_barcode(device='', timeout=-1, display=True, threaded=False):
       +def scan_barcode(device='', timeout=-1, display=True, threaded=False, try_again=True):
            if libzbar is None:
                raise RuntimeError("Cannot start QR scanner; zbar not available.")
            libzbar.zbar_symbol_get_data.restype = ctypes.c_char_p
       t@@ -50,6 +50,10 @@ def scan_barcode(device='', timeout=-1, display=True, threaded=False):
            proc = libzbar.zbar_processor_create(threaded)
            libzbar.zbar_processor_request_size(proc, 640, 480)
            if libzbar.zbar_processor_init(proc, device.encode('utf-8'), display) != 0:
       +        if try_again:
       +            # workaround for a bug in "ZBar for Windows"
       +            # libzbar.zbar_processor_init always seem to fail the first time around
       +            return scan_barcode(device, timeout, display, threaded, try_again=False)
                raise RuntimeError("Can not start QR scanner; initialization failed.")
            libzbar.zbar_processor_set_visible(proc)
            if libzbar.zbar_process_one(proc, timeout):