Browse Source

always enable qr scanner plugin

283
ThomasV 11 years ago
parent
commit
81d1e67253
  1. 16
      gui/qt/main_window.py
  2. 7
      gui/qt/qrtextedit.py
  3. 27
      plugins/qrscanner.py

16
gui/qt/main_window.py

@ -360,6 +360,7 @@ class ElectrumWindow(QMainWindow):
raw_transaction_menu.addAction(_("&From file"), self.do_process_from_file) raw_transaction_menu.addAction(_("&From file"), self.do_process_from_file)
raw_transaction_menu.addAction(_("&From text"), self.do_process_from_text) raw_transaction_menu.addAction(_("&From text"), self.do_process_from_text)
raw_transaction_menu.addAction(_("&From the blockchain"), self.do_process_from_txid) raw_transaction_menu.addAction(_("&From the blockchain"), self.do_process_from_txid)
raw_transaction_menu.addAction(_("&From QR code"), self.read_tx_from_qrcode)
self.raw_transaction_menu = raw_transaction_menu self.raw_transaction_menu = raw_transaction_menu
help_menu = menubar.addMenu(_("&Help")) help_menu = menubar.addMenu(_("&Help"))
@ -2091,6 +2092,21 @@ class ElectrumWindow(QMainWindow):
QMessageBox.critical(None, _("Unable to parse transaction"), _("Electrum was unable to parse your transaction")) QMessageBox.critical(None, _("Unable to parse transaction"), _("Electrum was unable to parse your transaction"))
def read_tx_from_qrcode(self):
data = run_hook('scan_qr_hook')
if not data:
return
# transactions are binary, but qrcode seems to return utf8...
z = data.decode('utf8')
s = ''
for b in z:
s += chr(ord(b))
data = s.encode('hex')
tx = self.tx_from_text(data)
if not tx:
return
self.show_transaction(tx)
def read_tx_from_file(self): def read_tx_from_file(self):
fileName = self.getOpenFileName(_("Select your transaction file"), "*.txn") fileName = self.getOpenFileName(_("Select your transaction file"), "*.txn")

7
gui/qt/qrtextedit.py

@ -12,7 +12,6 @@ class QRTextEdit(QPlainTextEdit):
self.button.setVisible(True) self.button.setVisible(True)
self.button.clicked.connect(lambda: self.qr_show() if self.isReadOnly() else self.qr_input()) self.button.clicked.connect(lambda: self.qr_show() if self.isReadOnly() else self.qr_input())
self.setText = self.setPlainText self.setText = self.setPlainText
self.scan_f = self.setText
def resizeEvent(self, e): def resizeEvent(self, e):
o = QPlainTextEdit.resizeEvent(self, e) o = QPlainTextEdit.resizeEvent(self, e)
@ -36,5 +35,7 @@ class QRTextEdit(QPlainTextEdit):
def qr_input(self): def qr_input(self):
from electrum.plugins import run_hook from electrum.plugins import run_hook
if not run_hook('scan_qr_hook', self.scan_f): data = run_hook('scan_qr_hook')
QMessageBox.warning(self, _('Error'), _('QR Scanner not enabled'), _('OK')) if type(data) != str:
return
self.setText(data)

27
plugins/qrscanner.py

@ -46,18 +46,14 @@ class Plugin(BasePlugin):
def init(self): def init(self):
self.win = self.gui.main_window self.win = self.gui.main_window
self.win.raw_transaction_menu.addAction(_("&From QR code"), self.read_raw_qr)
def is_available(self): def is_available(self):
return self._is_available return self._is_available
def scan_qr_hook(self, func): def is_enabled(self):
data = self.scan_qr() return True
if type(data) != str:
return
func(data)
def scan_qr(self): def scan_qr_hook(self):
proc = zbar.Processor() proc = zbar.Processor()
try: try:
proc.init(video_device=self.video_device()) proc.init(video_device=self.video_device())
@ -80,23 +76,6 @@ class Plugin(BasePlugin):
return r.data return r.data
def read_raw_qr(self):
qrcode = self.scan_qr()
if not qrcode:
return
data = qrcode
# transactions are binary, but qrcode seems to return utf8...
z = data.decode('utf8')
s = ''
for b in z:
s += chr(ord(b))
data = s.encode('hex')
tx = self.win.tx_from_text(data)
if not tx:
return
self.win.show_transaction(tx)
def video_device(self): def video_device(self):
device = self.config.get("video_device", "default") device = self.config.get("video_device", "default")
if device == 'default': if device == 'default':

Loading…
Cancel
Save