save and display request status

This commit is contained in:
ThomasV 2014-06-12 11:27:18 +02:00
parent 5f802aa69d
commit 68a75af1bd
3 changed files with 38 additions and 18 deletions

View File

@ -41,6 +41,8 @@ from electrum import mnemonic
from electrum import util, bitcoin, commands, Interface, Wallet from electrum import util, bitcoin, commands, Interface, Wallet
from electrum import SimpleConfig, Wallet, WalletStorage from electrum import SimpleConfig, Wallet, WalletStorage
from electrum.paymentrequest import PR_UNPAID, PR_PAID
from electrum import bmp, pyqrnative from electrum import bmp, pyqrnative
@ -69,8 +71,11 @@ import re
from util import * from util import *
def format_status(x):
if x == PR_UNPAID:
return _('Unpaid')
elif x == PR_PAID:
return _('Paid')
class StatusBarButton(QPushButton): class StatusBarButton(QPushButton):
@ -798,7 +803,7 @@ class ElectrumWindow(QMainWindow):
label = unicode( self.message_e.text() ) label = unicode( self.message_e.text() )
if self.gui_object.payment_request: if self.gui_object.payment_request:
outputs = self.gui_object.payment_request.outputs outputs = self.gui_object.payment_request.get_outputs()
else: else:
outputs = self.payto_e.get_outputs() outputs = self.payto_e.get_outputs()
@ -893,6 +898,12 @@ class ElectrumWindow(QMainWindow):
if self.gui_object.payment_request: if self.gui_object.payment_request:
refund_address = self.wallet.addresses()[0] refund_address = self.wallet.addresses()[0]
status, msg = self.gui_object.payment_request.send_ack(str(tx), refund_address) status, msg = self.gui_object.payment_request.send_ack(str(tx), refund_address)
if status:
pr = self.gui_object.payment_request
pr_id = pr.get_id()
self.invoices[pr_id] = (pr.get_domain(), pr.get_memo(), pr.get_amount(), PR_PAID)
self.wallet.storage.put('invoices', self.invoices)
self.update_invoices_tab()
self.gui_object.payment_request = None self.gui_object.payment_request = None
else: else:
status, msg = self.wallet.sendtx(tx) status, msg = self.wallet.sendtx(tx)
@ -924,10 +935,19 @@ class ElectrumWindow(QMainWindow):
def payment_request_ok(self): def payment_request_ok(self):
pr = self.gui_object.payment_request pr = self.gui_object.payment_request
pr_id = pr.get_id() pr_id = pr.get_id()
# save it if pr_id not in self.invoices:
self.invoices[pr_id] = (pr.get_domain(), pr.get_memo(), pr.get_amount()) self.invoices[pr_id] = (pr.get_domain(), pr.get_memo(), pr.get_amount(), PR_UNPAID)
self.wallet.storage.put('invoices', self.invoices) self.wallet.storage.put('invoices', self.invoices)
self.update_invoices_tab() self.update_invoices_tab()
else:
print_error('invoice already in list')
status = self.invoices[pr_id][3]
if status == PR_PAID:
self.do_clear()
self.show_message("invoice already paid")
self.gui_object.payment_request = None
return
self.payto_help.show() self.payto_help.show()
self.payto_help.set_alt(lambda: self.show_pr_details(pr)) self.payto_help.set_alt(lambda: self.show_pr_details(pr))
@ -935,7 +955,7 @@ class ElectrumWindow(QMainWindow):
self.payto_e.setGreen() self.payto_e.setGreen()
self.payto_e.setText(pr.domain) self.payto_e.setText(pr.domain)
self.amount_e.setText(self.format_amount(pr.get_amount())) self.amount_e.setText(self.format_amount(pr.get_amount()))
self.message_e.setText(pr.memo) self.message_e.setText(pr.get_memo())
def payment_request_error(self): def payment_request_error(self):
self.do_clear() self.do_clear()
@ -1065,11 +1085,11 @@ class ElectrumWindow(QMainWindow):
l.clear() l.clear()
for key, value in invoices.items(): for key, value in invoices.items():
try: try:
domain, memo, amount = value domain, memo, amount, status = value
except: except:
invoices.pop(key) invoices.pop(key)
continue continue
item = QTreeWidgetItem( [ domain, memo, self.format_amount(amount), ""] ) item = QTreeWidgetItem( [ domain, memo, self.format_amount(amount), format_status(status)] )
l.addTopLevelItem(item) l.addTopLevelItem(item)
l.setCurrentItem(l.topLevelItem(0)) l.setCurrentItem(l.topLevelItem(0))
@ -1220,7 +1240,7 @@ class ElectrumWindow(QMainWindow):
def show_invoice(self, key): def show_invoice(self, key):
from electrum.paymentrequest import PaymentRequest from electrum.paymentrequest import PaymentRequest
domain, memo, value = self.invoices[key] domain, memo, value, status = self.invoices[key]
pr = PaymentRequest(self.config) pr = PaymentRequest(self.config)
pr.read_file(key) pr.read_file(key)
pr.domain = domain pr.domain = domain
@ -1230,7 +1250,7 @@ class ElectrumWindow(QMainWindow):
def show_pr_details(self, pr): def show_pr_details(self, pr):
msg = 'Domain: ' + pr.domain msg = 'Domain: ' + pr.domain
msg += '\nStatus: ' + pr.get_status() msg += '\nStatus: ' + pr.get_status()
msg += '\nMemo: ' + pr.memo msg += '\nMemo: ' + pr.get_memo()
msg += '\nPayment URL: ' + pr.payment_url msg += '\nPayment URL: ' + pr.payment_url
msg += '\n\nOutputs:\n' + '\n'.join(map(lambda x: x[0] + ' ' + self.format_amount(x[1])+ self.base_unit(), pr.get_outputs())) msg += '\n\nOutputs:\n' + '\n'.join(map(lambda x: x[0] + ' ' + self.format_amount(x[1])+ self.base_unit(), pr.get_outputs()))
QMessageBox.information(self, 'Invoice', msg , 'OK') QMessageBox.information(self, 'Invoice', msg , 'OK')

View File

@ -132,7 +132,7 @@ class PayToEdit(QTextEdit):
self.outputs = [(self.payto_address, amount)] self.outputs = [(self.payto_address, amount)]
return self.outputs return self.outputs[:]
def lines(self): def lines(self):

View File

@ -58,13 +58,13 @@ PR_ERROR = 4 # could not parse
ca_list = {} ca_list = {}
ca_path = os.path.expanduser("~/.electrum/ca/ca-bundle.crt")
def load_certificates(): def load_certificates():
ca_path = os.path.expanduser("~/.electrum/ca/ca-bundle.crt")
try: try:
ca_f = open(ca_path, 'r') ca_f = open(ca_path, 'r')
except Exception: except Exception:
@ -257,9 +257,9 @@ class PaymentRequest:
self.payment_url = self.details.payment_url self.payment_url = self.details.payment_url
if self.has_expired(): #if self.has_expired():
self.error = "ERROR: Payment Request has Expired." # self.error = "ERROR: Payment Request has Expired."
return False # return False
return True return True
@ -279,7 +279,7 @@ class PaymentRequest:
return self.id return self.id
def get_outputs(self): def get_outputs(self):
return self.outputs return self.outputs[:]
def send_ack(self, raw_tx, refund_addr): def send_ack(self, raw_tx, refund_addr):