Remove all self.window references from plugins

This commit is contained in:
Neil Booth 2015-09-04 18:23:18 +09:00
parent 0792792513
commit bbd50ba83c
5 changed files with 52 additions and 69 deletions

View File

@ -1172,7 +1172,7 @@ class ElectrumWindow(QMainWindow):
def do_send(self): def do_send(self):
if run_hook('before_send'): if run_hook('before_send', window):
return return
r = self.read_send_tab() r = self.read_send_tab()
if not r: if not r:
@ -1228,7 +1228,7 @@ class ElectrumWindow(QMainWindow):
self.send_button.setDisabled(True) self.send_button.setDisabled(True)
# call hook to see if plugin needs gui interaction # call hook to see if plugin needs gui interaction
run_hook('sign_tx', tx) run_hook('sign_tx', parent, tx)
# sign the tx # sign the tx
success = [False] # Array to work around python scoping success = [False] # Array to work around python scoping

View File

@ -83,15 +83,14 @@ class Plugin(BasePlugin):
def load_wallet(self, wallet, window): def load_wallet(self, wallet, window):
self.wallet = wallet self.wallet = wallet
self.wallet.plugin = self self.wallet.plugin = self
self.window = window
if self.handler is None: if self.handler is None:
self.handler = BTChipQTHandler(self.window.app) self.handler = BTChipQTHandler(window.app)
if self.btchip_is_connected(): if self.btchip_is_connected():
if not self.wallet.check_proper_device(): if not self.wallet.check_proper_device():
QMessageBox.information(self.window, _('Error'), _("This wallet does not match your Ledger device"), _('OK')) QMessageBox.information(window, _('Error'), _("This wallet does not match your Ledger device"), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
else: else:
QMessageBox.information(self.window, _('Error'), _("Ledger device not detected.\nContinuing in watching-only mode."), _('OK')) QMessageBox.information(window, _('Error'), _("Ledger device not detected.\nContinuing in watching-only mode."), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
@hook @hook
@ -111,7 +110,7 @@ class Plugin(BasePlugin):
return wallet return wallet
@hook @hook
def sign_tx(self, tx): def sign_tx(self, window, tx):
tx.error = None tx.error = None
try: try:
self.wallet.sign_transaction(tx, None) self.wallet.sign_transaction(tx, None)

View File

@ -5,6 +5,7 @@ from time import sleep
import unicodedata import unicodedata
import threading import threading
import re import re
from functools import partial
from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton
import PyQt4.QtCore as QtCore import PyQt4.QtCore as QtCore
@ -128,28 +129,22 @@ class Plugin(BasePlugin):
def load_wallet(self, wallet, window): def load_wallet(self, wallet, window):
self.print_error("load_wallet") self.print_error("load_wallet")
self.wallet = wallet self.wallet = wallet
self.window = window
self.wallet.plugin = self self.wallet.plugin = self
self.keepkey_button = StatusBarButton(QIcon(":icons/keepkey.png"), _("KeepKey"), self.settings_dialog) self.keepkey_button = StatusBarButton(QIcon(":icons/keepkey.png"), _("KeepKey"), partial(self.settings_dialog, window))
if type(window) is ElectrumWindow: if type(window) is ElectrumWindow:
self.window.statusBar().addPermanentWidget(self.keepkey_button) window.statusBar().addPermanentWidget(self.keepkey_button)
if self.handler is None: if self.handler is None:
self.handler = KeepKeyQtHandler(self.window) self.handler = KeepKeyQtHandler(window)
try: try:
self.get_client().ping('t') self.get_client().ping('t')
except BaseException as e: except BaseException as e:
QMessageBox.information(self.window, _('Error'), _("KeepKey device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK')) QMessageBox.information(window, _('Error'), _("KeepKey device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
return return
if self.wallet.addresses() and not self.wallet.check_proper_device(): if self.wallet.addresses() and not self.wallet.check_proper_device():
QMessageBox.information(self.window, _('Error'), _("This wallet does not match your KeepKey device"), _('OK')) QMessageBox.information(window, _('Error'), _("This wallet does not match your KeepKey device"), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
@hook
def close_wallet(self):
if type(self.window) is ElectrumWindow:
self.window.statusBar().removeWidget(self.keepkey_button)
@hook @hook
def installwizard_load_wallet(self, wallet, window): def installwizard_load_wallet(self, wallet, window):
self.load_wallet(wallet, window) self.load_wallet(wallet, window)
@ -196,11 +191,11 @@ class Plugin(BasePlugin):
self.handler.stop() self.handler.stop()
def settings_dialog(self): def settings_dialog(self, window):
try: try:
device_id = self.get_client().get_device_id() device_id = self.get_client().get_device_id()
except BaseException as e: except BaseException as e:
self.window.show_message(str(e)) window.show_message(str(e))
return return
get_label = lambda: self.get_client().features.label get_label = lambda: self.get_client().features.label
update_label = lambda: current_label_label.setText("Label: %s" % get_label()) update_label = lambda: current_label_label.setText("Label: %s" % get_label())

View File

@ -5,6 +5,7 @@ from time import sleep
import unicodedata import unicodedata
import threading import threading
import re import re
from functools import partial
from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton from PyQt4.Qt import QMessageBox, QDialog, QVBoxLayout, QLabel, QThread, SIGNAL, QGridLayout, QInputDialog, QPushButton
import PyQt4.QtCore as QtCore import PyQt4.QtCore as QtCore
@ -128,28 +129,22 @@ class Plugin(BasePlugin):
def load_wallet(self, wallet, window): def load_wallet(self, wallet, window):
self.print_error("load_wallet") self.print_error("load_wallet")
self.wallet = wallet self.wallet = wallet
self.window = window
self.wallet.plugin = self self.wallet.plugin = self
self.trezor_button = StatusBarButton(QIcon(":icons/trezor.png"), _("Trezor"), self.settings_dialog) self.trezor_button = StatusBarButton(QIcon(":icons/trezor.png"), _("Trezor"), partial(self.settings_dialog, window))
if type(window) is ElectrumWindow: if type(window) is ElectrumWindow:
self.window.statusBar().addPermanentWidget(self.trezor_button) window.statusBar().addPermanentWidget(self.trezor_button)
if self.handler is None: if self.handler is None:
self.handler = TrezorQtHandler(self.window) self.handler = TrezorQtHandler(window)
try: try:
self.get_client().ping('t') self.get_client().ping('t')
except BaseException as e: except BaseException as e:
QMessageBox.information(self.window, _('Error'), _("Trezor device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK')) QMessageBox.information(window, _('Error'), _("Trezor device not detected.\nContinuing in watching-only mode." + '\n\nReason:\n' + str(e)), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
return return
if self.wallet.addresses() and not self.wallet.check_proper_device(): if self.wallet.addresses() and not self.wallet.check_proper_device():
QMessageBox.information(self.window, _('Error'), _("This wallet does not match your Trezor device"), _('OK')) QMessageBox.information(window, _('Error'), _("This wallet does not match your Trezor device"), _('OK'))
self.wallet.force_watching_only = True self.wallet.force_watching_only = True
@hook
def close_wallet(self):
if type(self.window) is ElectrumWindow:
self.window.statusBar().removeWidget(self.trezor_button)
@hook @hook
def installwizard_load_wallet(self, wallet, window): def installwizard_load_wallet(self, wallet, window):
self.load_wallet(wallet, window) self.load_wallet(wallet, window)
@ -196,11 +191,11 @@ class Plugin(BasePlugin):
self.handler.stop() self.handler.stop()
def settings_dialog(self): def settings_dialog(self, window):
try: try:
device_id = self.get_client().get_device_id() device_id = self.get_client().get_device_id()
except BaseException as e: except BaseException as e:
self.window.show_message(str(e)) window.show_message(str(e))
return return
get_label = lambda: self.get_client().features.label get_label = lambda: self.get_client().features.label
update_label = lambda: current_label_label.setText("Label: %s" % get_label()) update_label = lambda: current_label_label.setText("Label: %s" % get_label())

View File

@ -25,6 +25,7 @@ import json
from hashlib import sha256 from hashlib import sha256
from urlparse import urljoin from urlparse import urljoin
from urllib import quote from urllib import quote
from functools import partial
from PyQt4.QtGui import * from PyQt4.QtGui import *
from PyQt4.QtCore import * from PyQt4.QtCore import *
@ -325,9 +326,8 @@ class Plugin(BasePlugin):
@hook @hook
def load_wallet(self, wallet, window): def load_wallet(self, wallet, window):
self.wallet = wallet self.wallet = wallet
self.window = window self.trustedcoin_button = StatusBarButton(QIcon(":icons/trustedcoin.png"), _("TrustedCoin"), partial(self.settings_dialog, window))
self.trustedcoin_button = StatusBarButton(QIcon(":icons/trustedcoin.png"), _("TrustedCoin"), self.settings_dialog) window.statusBar().addPermanentWidget(self.trustedcoin_button)
self.window.statusBar().addPermanentWidget(self.trustedcoin_button)
self.xpub = self.wallet.master_public_keys.get('x1/') self.xpub = self.wallet.master_public_keys.get('x1/')
self.user_id = self.get_user_id()[1] self.user_id = self.get_user_id()[1]
t = threading.Thread(target=self.request_billing_info) t = threading.Thread(target=self.request_billing_info)
@ -337,11 +337,6 @@ class Plugin(BasePlugin):
@hook @hook
def installwizard_load_wallet(self, wallet, window): def installwizard_load_wallet(self, wallet, window):
self.wallet = wallet self.wallet = wallet
self.window = window
@hook
def close_wallet(self):
self.window.statusBar().removeWidget(self.trustedcoin_button)
@hook @hook
def get_wizard_action(self, window, wallet, action): def get_wizard_action(self, window, wallet, action):
@ -375,7 +370,6 @@ class Plugin(BasePlugin):
def create_remote_key(self, wallet, window): def create_remote_key(self, wallet, window):
self.wallet = wallet self.wallet = wallet
self.window = window
if wallet.storage.get('wallet_type') != '2fa': if wallet.storage.get('wallet_type') != '2fa':
raise raise
@ -396,7 +390,7 @@ class Plugin(BasePlugin):
try: try:
r = server.create(xpub_hot, xpub_cold, email) r = server.create(xpub_hot, xpub_cold, email)
except socket.error: except socket.error:
self.window.show_message('Server not reachable, aborting') window.show_message('Server not reachable, aborting')
return return
except TrustedCoinException as e: except TrustedCoinException as e:
if e.status_code == 409: if e.status_code == 409:
@ -409,7 +403,7 @@ class Plugin(BasePlugin):
else: else:
otp_secret = r.get('otp_secret') otp_secret = r.get('otp_secret')
if not otp_secret: if not otp_secret:
self.window.show_message(_('Error')) window.show_message(_('Error'))
return return
_xpub3 = r['xpubkey_cosigner'] _xpub3 = r['xpubkey_cosigner']
_id = r['id'] _id = r['id']
@ -417,10 +411,10 @@ class Plugin(BasePlugin):
assert _id == self.user_id, ("user id error", _id, self.user_id) assert _id == self.user_id, ("user id error", _id, self.user_id)
assert xpub3 == _xpub3, ("xpub3 error", xpub3, _xpub3) assert xpub3 == _xpub3, ("xpub3 error", xpub3, _xpub3)
except Exception as e: except Exception as e:
self.window.show_message(str(e)) window.show_message(str(e))
return return
if not self.setup_google_auth(self.window, self.user_id, otp_secret): if not self.setup_google_auth(window, self.user_id, otp_secret):
return return
self.wallet.add_master_public_key('x3/', xpub3) self.wallet.add_master_public_key('x3/', xpub3)
@ -441,7 +435,7 @@ class Plugin(BasePlugin):
return False return False
@hook @hook
def sign_tx(self, tx): def sign_tx(self, window, tx):
self.print_error("twofactor:sign_tx") self.print_error("twofactor:sign_tx")
if self.wallet.storage.get('wallet_type') != '2fa': if self.wallet.storage.get('wallet_type') != '2fa':
return return
@ -451,17 +445,17 @@ class Plugin(BasePlugin):
self.auth_code = None self.auth_code = None
return return
self.auth_code = self.auth_dialog() self.auth_code = self.auth_dialog(window)
@hook @hook
def before_send(self): def before_send(self, window):
# request billing info before forming the transaction # request billing info before forming the transaction
self.billing_info = None self.billing_info = None
self.waiting_dialog = WaitingDialog(self.window, 'please wait...', self.request_billing_info) self.waiting_dialog = WaitingDialog(window, 'please wait...', self.request_billing_info)
self.waiting_dialog.start() self.waiting_dialog.start()
self.waiting_dialog.wait() self.waiting_dialog.wait()
if self.billing_info is None: if self.billing_info is None:
self.window.show_message('Could not contact server') window.show_message('Could not contact server')
return True return True
return False return False
@ -518,8 +512,8 @@ class Plugin(BasePlugin):
self.print_error("twofactor: is complete", tx.is_complete()) self.print_error("twofactor: is complete", tx.is_complete())
def auth_dialog(self ): def auth_dialog(self, window):
d = QDialog(self.window) d = QDialog(window)
d.setModal(1) d.setModal(1)
vbox = QVBoxLayout(d) vbox = QVBoxLayout(d)
pw = AmountEdit(None, is_int = True) pw = AmountEdit(None, is_int = True)
@ -535,16 +529,16 @@ class Plugin(BasePlugin):
return return
return pw.get_amount() return pw.get_amount()
def settings_dialog(self): def settings_dialog(self, window):
self.waiting_dialog = WaitingDialog(self.window, 'please wait...', self.request_billing_info, self.show_settings_dialog) self.waiting_dialog = WaitingDialog(window, 'please wait...', self.request_billing_info, partial(self.show_settings_dialog, window))
self.waiting_dialog.start() self.waiting_dialog.start()
def show_settings_dialog(self, success): def show_settings_dialog(self, window, success):
if not success: if not success:
self.window.show_message(_('Server not reachable.')) window.show_message(_('Server not reachable.'))
return return
d = QDialog(self.window) d = QDialog(window)
d.setWindowTitle("TrustedCoin Information") d.setWindowTitle("TrustedCoin Information")
d.setMinimumSize(500, 200) d.setMinimumSize(500, 200)
vbox = QVBoxLayout(d) vbox = QVBoxLayout(d)
@ -577,7 +571,7 @@ class Plugin(BasePlugin):
v = self.price_per_tx.get(1) v = self.price_per_tx.get(1)
grid.addWidget(QLabel(_("Price per transaction (not prepaid):")), 0, 0) grid.addWidget(QLabel(_("Price per transaction (not prepaid):")), 0, 0)
grid.addWidget(QLabel(self.window.format_amount(v) + ' ' + self.window.base_unit()), 0, 1) grid.addWidget(QLabel(window.format_amount(v) + ' ' + window.base_unit()), 0, 1)
i = 1 i = 1
@ -588,9 +582,9 @@ class Plugin(BasePlugin):
if k == 1: if k == 1:
continue continue
grid.addWidget(QLabel("Price for %d prepaid transactions:"%k), i, 0) grid.addWidget(QLabel("Price for %d prepaid transactions:"%k), i, 0)
grid.addWidget(QLabel("%d x "%k + self.window.format_amount(v/k) + ' ' + self.window.base_unit()), i, 1) grid.addWidget(QLabel("%d x "%k + window.format_amount(v/k) + ' ' + window.base_unit()), i, 1)
b = QPushButton(_("Buy")) b = QPushButton(_("Buy"))
b.clicked.connect(lambda b, k=k, v=v: self.on_buy(k, v, d)) b.clicked.connect(lambda b, k=k, v=v: self.on_buy(window, k, v, d))
grid.addWidget(b, i, 2) grid.addWidget(b, i, 2)
i += 1 i += 1
@ -610,16 +604,16 @@ class Plugin(BasePlugin):
vbox.addLayout(Buttons(CloseButton(d))) vbox.addLayout(Buttons(CloseButton(d)))
d.exec_() d.exec_()
def on_buy(self, k, v, d): def on_buy(self, window, k, v, d):
d.close() d.close()
if self.window.pluginsdialog: if window.pluginsdialog:
self.window.pluginsdialog.close() window.pluginsdialog.close()
uri = "bitcoin:" + self.billing_info['billing_address'] + "?message=TrustedCoin %d Prepaid Transactions&amount="%k + str(Decimal(v)/100000000) uri = "bitcoin:" + self.billing_info['billing_address'] + "?message=TrustedCoin %d Prepaid Transactions&amount="%k + str(Decimal(v)/100000000)
self.is_billing = True self.is_billing = True
self.window.pay_to_URI(uri) window.pay_to_URI(uri)
self.window.payto_e.setFrozen(True) window.payto_e.setFrozen(True)
self.window.message_e.setFrozen(True) window.message_e.setFrozen(True)
self.window.amount_e.setFrozen(True) window.amount_e.setFrozen(True)
def request_billing_info(self): def request_billing_info(self):
billing_info = server.get(self.user_id) billing_info = server.get(self.user_id)
@ -706,5 +700,5 @@ class Plugin(BasePlugin):
server.auth(_id, otp) server.auth(_id, otp)
return True return True
except: except:
QMessageBox.information(self.window, _('Message'), _('Incorrect password'), _('OK')) QMessageBox.information(window, _('Message'), _('Incorrect password'), _('OK'))
pw.setText('') pw.setText('')