store invoices as dict. rename domain -> requestor

This commit is contained in:
ThomasV 2015-04-22 13:59:38 +02:00
parent 74b0ed5f48
commit 6cff7a284a
2 changed files with 20 additions and 45 deletions

View File

@ -1203,7 +1203,7 @@ class ElectrumWindow(QMainWindow):
else:
self.payto_e.setExpired()
self.payto_e.setText(pr.domain)
self.payto_e.setText(pr.get_requestor())
self.amount_e.setText(self.format_amount(pr.get_amount()))
self.message_e.setText(pr.get_memo())
# signal to set fee
@ -1307,9 +1307,9 @@ class ElectrumWindow(QMainWindow):
for pr in inv_list:
key = pr.get_id()
status = self.invoices.get_status(key)
domain = pr.get_domain()
requestor = pr.get_requestor()
date_str = format_time(pr.get_expiration_date())
item = QTreeWidgetItem( [ date_str, domain, pr.memo, self.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')] )
item = QTreeWidgetItem( [ date_str, requestor, pr.memo, self.format_amount(pr.get_amount(), whitespaces=True), pr_tooltips.get(status,'')] )
item.setIcon(4, QIcon(pr_icons.get(status)))
item.setData(0, Qt.UserRole, key)
item.setFont(1, QFont(MONOSPACE_FONT))
@ -1471,7 +1471,7 @@ class ElectrumWindow(QMainWindow):
vbox = QVBoxLayout(d)
grid = QGridLayout()
grid.addWidget(QLabel(_("Requestor") + ':'), 0, 0)
grid.addWidget(QLabel(pr.get_domain()), 0, 1)
grid.addWidget(QLabel(pr.get_requestor()), 0, 1)
grid.addWidget(QLabel(_("Expires") + ':'), 1, 0)
grid.addWidget(QLabel(format_time(pr.get_expiration_date())), 1, 1)
grid.addWidget(QLabel(_("Memo") + ':'), 2, 0)

View File

@ -78,7 +78,7 @@ class PaymentRequest:
def __init__(self, data):
self.raw = data
self.parse(data)
self.domain = None # known after verify
self.requestor = None # known after verify
self.tx = None
def __str__(self):
@ -124,9 +124,9 @@ class PaymentRequest:
except Exception as e:
self.error = str(e)
return
self.domain = x.get_common_name()
if self.domain.startswith('*.'):
self.domain = self.domain[2:]
self.requestor = x.get_common_name()
if self.requestor.startswith('*.'):
self.requestor = self.requestor[2:]
else:
if not x.check_ca():
self.error = "ERROR: Supplied CA Certificate Error"
@ -202,8 +202,8 @@ class PaymentRequest:
def get_amount(self):
return sum(map(lambda x:x[2], self.outputs))
def get_domain(self):
return self.domain if self.domain else 'unknown'
def get_requestor(self):
return self.requestor if self.requestor else 'unknown'
def get_verify_status(self):
return self.error
@ -306,11 +306,10 @@ class InvoiceStore(object):
except:
return
for k, v in d.items():
ser, domain, tx = v
try:
pr = PaymentRequest(ser.decode('hex'))
pr.tx = tx
pr.domain = domain
pr = PaymentRequest(v.get('hex').decode('hex'))
pr.tx = v.get('txid')
pr.requestor = v.get('requestor')
self.invoices[k] = pr
except:
continue
@ -318,10 +317,15 @@ class InvoiceStore(object):
def save(self):
l = {}
for k, pr in self.invoices.items():
l[k] = str(pr).encode('hex'), pr.domain, pr.tx
l[k] = {
'hex': str(pr).encode('hex'),
'requestor': pr.get_requestor(),
'txid': pr.tx
}
path = os.path.join(self.config.path, 'invoices')
with open(path, 'w') as f:
r = f.write(json.dumps(l))
s = json.dumps(l, indent=4, sort_keys=True)
r = f.write(s)
def get_status(self, key):
pr = self.get(key)
@ -355,32 +359,3 @@ class InvoiceStore(object):
# sort
return self.invoices.values()
if __name__ == "__main__":
util.set_verbosity(True)
try:
uri = sys.argv[1]
except:
print "usage: %s url"%sys.argv[0]
print "example url: \"bitcoin:17KjQgnXC96jakzJe9yo8zxqerhqNptmhq?amount=0.0018&r=https%3A%2F%2Fbitpay.com%2Fi%2FMXc7qTM5f87EC62SWiS94z\""
sys.exit(1)
address, amount, label, message, request_url = util.parse_URI(uri)
from simple_config import SimpleConfig
config = SimpleConfig()
pr = PaymentRequest(config)
pr.read(request_url)
if not pr.verify():
print 'verify failed'
print pr.error
sys.exit(1)
print 'Payment Request Verified Domain: ', pr.domain
print 'outputs', pr.outputs
print 'Payment Memo: ', pr.details.memo
tx = "blah"
pr.send_ack(tx, refund_addr = "1vXAXUnGitimzinpXrqDWVU4tyAAQ34RA")