1
0

move openalias from plugins to core

This commit is contained in:
ThomasV
2015-07-02 12:44:53 +02:00
parent 90d32038fa
commit 616becd9a8
7 changed files with 238 additions and 339 deletions

View File

@@ -19,6 +19,10 @@
import sys, time, threading
import os.path, json, traceback
import shutil
import socket
import webbrowser
import csv
from decimal import Decimal
import PyQt4
@@ -26,11 +30,10 @@ from PyQt4.QtGui import *
from PyQt4.QtCore import *
import PyQt4.QtCore as QtCore
from electrum.bitcoin import MIN_RELAY_TX_FEE, COIN, is_valid
from electrum.plugins import run_hook
import icons_rc
from electrum.bitcoin import MIN_RELAY_TX_FEE, COIN, is_valid
from electrum.plugins import run_hook
from electrum.i18n import _
from electrum.util import block_explorer, block_explorer_info, block_explorer_URL
from electrum.util import print_error, print_msg
@@ -41,6 +44,7 @@ from electrum import util, bitcoin, commands, Wallet
from electrum import SimpleConfig, Wallet, WalletStorage
from electrum import Imported_Wallet
from electrum import paymentrequest
from electrum.contacts import Contacts
from amountedit import AmountEdit, BTCAmountEdit, MyLineEdit
from network_dialog import NetworkDialog
@@ -48,12 +52,6 @@ from qrcodewidget import QRCodeWidget, QRDialog
from qrtextedit import ScanQRTextEdit, ShowQRTextEdit
from transaction_dialog import show_transaction
from decimal import Decimal
import socket
import webbrowser
import csv
@@ -120,7 +118,7 @@ class ElectrumWindow(QMainWindow):
self.app = gui_object.app
self.invoices = InvoiceStore(self.config)
self.contacts = util.Contacts(self.config)
self.contacts = Contacts(self.config)
self.create_status_bar()
self.need_update = threading.Event()
@@ -482,17 +480,16 @@ class ElectrumWindow(QMainWindow):
if self.need_update.is_set():
self.update_wallet()
self.need_update.clear()
# resolve aliases
self.payto_e.resolve()
run_hook('timer_actions')
def format_amount(self, x, is_diff=False, whitespaces=False):
return format_satoshis(x, is_diff, self.num_zeros, self.decimal_point, whitespaces)
def get_decimal_point(self):
return self.decimal_point
def base_unit(self):
assert self.decimal_point in [2, 5, 8]
if self.decimal_point == 2:
@@ -1051,6 +1048,13 @@ class ElectrumWindow(QMainWindow):
return
outputs = self.payto_e.get_outputs()
if self.payto_e.is_alias and self.payto_e.validated is False:
alias = self.payto_e.toPlainText()
msg = _('WARNING: the alias "%s" could not be validated via an additional security check, DNSSEC, and thus may not be correct.'%alias) + '\n'
msg += _('Do you wish to continue?')
if not self.question(msg):
return
if not outputs:
QMessageBox.warning(self, _('Error'), _('No outputs'), _('OK'))
return
@@ -1208,6 +1212,7 @@ class ElectrumWindow(QMainWindow):
self.payment_request = None
return
self.payto_e.is_pr = True
if not pr.has_expired():
self.payto_e.setGreen()
else:

View File

@@ -34,6 +34,7 @@ class PayToEdit(ScanQRTextEdit):
def __init__(self, win):
ScanQRTextEdit.__init__(self)
self.win = win
self.amount_edit = win.amount_e
self.document().contentsChanged.connect(self.update_size)
self.heightMin = 0
@@ -43,10 +44,13 @@ class PayToEdit(ScanQRTextEdit):
self.outputs = []
self.errors = []
self.is_pr = False
self.is_alias = False
self.scan_f = win.pay_from_URI
self.update_size()
self.payto_address = None
self.previous_payto = ''
def lock_amount(self):
self.amount_edit.setFrozen(True)
@@ -60,11 +64,9 @@ class PayToEdit(ScanQRTextEdit):
button.setHidden(b)
def setGreen(self):
self.is_pr = True
self.setStyleSheet("QWidget { background-color:#80ff80;}")
def setExpired(self):
self.is_pr = True
self.setStyleSheet("QWidget { background-color:#ffcccc;}")
def parse_address_and_amount(self, line):
@@ -252,3 +254,45 @@ class PayToEdit(ScanQRTextEdit):
if data.startswith("bitcoin:"):
self.scan_f(data)
# TODO: update fee
def resolve(self):
self.is_alias = False
if self.hasFocus():
return
if self.is_multiline(): # only supports single line entries atm
return
if self.is_pr:
return
key = str(self.toPlainText())
if key == self.previous_payto:
return
self.previous_payto = key
if not (('.' in key) and (not '<' in key) and (not ' ' in key)):
return
try:
data = self.win.contacts.resolve(key)
except:
return
if not data:
return
self.is_alias = True
address = data.get('address')
name = data.get('name')
new_url = key + ' <' + address + '>'
self.setText(new_url)
self.previous_payto = new_url
#if self.win.config.get('openalias_autoadd') == 'checked':
self.win.contacts[key] = ('openalias', name)
self.win.update_contacts_tab()
self.setFrozen(True)
if data.get('type') == 'openalias':
self.validated = data.get('validated')
if self.validated:
self.setGreen()
else:
self.setExpired()
else:
self.validated = None