tkivy: set_paid for paid invoices - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 41f6fec2acb19435eb8f87af96c391d2489b6c66 DIR parent cdbc564fb3da70207256604999365a10415ebb04 HTML Author: ThomasV <thomasv@electrum.org> Date: Fri, 19 Feb 2016 13:53:01 +0100 kivy: set_paid for paid invoices Diffstat: M gui/kivy/main.kv | 10 ++++------ M gui/kivy/main_window.py | 20 +++++++++++++++----- M gui/kivy/uix/screens.py | 8 +++++++- M gui/kivy/uix/ui_screens/send.kv | 6 +++--- M gui/qt/main_window.py | 4 ++-- M lib/paymentrequest.py | 9 ++++----- 6 files changed, 35 insertions(+), 22 deletions(-) --- DIR diff --git a/gui/kivy/main.kv b/gui/kivy/main.kv t@@ -177,20 +177,18 @@ <SendReceiveBlueBottom@GridLayout> + item_height: dp(42) + foreground_color: .843, .914, .972, 1 + cols: 1 + padding: '12dp', 0 canvas.before: Color: - #rgba: .238, .585, .878, 1 rgba: 0.192, .498, 0.745, 1 BorderImage: source: 'atlas://gui/kivy/theming/light/card_bottom' size: self.size pos: self.pos - item_height: dp(42) - foreground_color: .843, .914, .972, 1 - cols: 1 - padding: '12dp', 0 - <CardSeparator@Widget> DIR diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py t@@ -4,6 +4,7 @@ import time import datetime import traceback from decimal import Decimal +import threading import electrum from electrum import WalletStorage, Wallet t@@ -682,7 +683,6 @@ class ElectrumWindow(App): d.open() def sign_tx(self, *args): - import threading threading.Thread(target=self._sign_tx, args=args).start() def _sign_tx(self, tx, password, on_success, on_failure): t@@ -693,13 +693,23 @@ class ElectrumWindow(App): return Clock.schedule_once(lambda dt: on_success(tx)) - def broadcast(self, tx): + def _broadcast_thread(self, tx, on_complete): + ok, txid = self.wallet.sendtx(tx) + Clock.schedule_once(lambda dt: on_complete(ok, txid)) + + def broadcast(self, tx, pr=None): + def on_complete(ok, txid): + self.show_info(txid) + if ok and pr: + pr.set_paid(tx.hash()) + self.invoices.save() + self.update_tab('invoices') + if self.network and self.network.is_connected(): self.show_info(_('Sending')) - ok, txid = self.wallet.sendtx(tx) - self.show_info(txid) + threading.Thread(target=self._broadcast_thread, args=(tx, on_complete)).start() else: - self.show_info(_('Cannot broadcast transaction') + '\n' + _('Not connected')) + self.show_info(_('Cannot broadcast transaction') + ':\n' + _('Not connected')) def description_dialog(self, screen): from uix.dialogs.label_dialog import LabelDialog DIR diff --git a/gui/kivy/uix/screens.py b/gui/kivy/uix/screens.py t@@ -235,6 +235,12 @@ class SendScreen(CScreen): self.app.invoices.add(pr) self.app.update_tab('invoices') self.app.show_info(_("Invoice saved")) + if pr.is_pr(): + self.screen.is_pr = True + self.payment_request = pr + else: + self.screen.is_pr = False + self.payment_request = None def do_paste(self): contents = unicode(self.app._clipboard.paste()) t@@ -287,7 +293,7 @@ class SendScreen(CScreen): def send_tx(self, tx, password): def on_success(tx): if tx.is_complete(): - self.app.broadcast(tx) + self.app.broadcast(tx, self.payment_request) else: self.app.tx_dialog(tx) def on_failure(error): DIR diff --git a/gui/kivy/uix/ui_screens/send.kv b/gui/kivy/uix/ui_screens/send.kv t@@ -35,7 +35,7 @@ SendScreen: disabled: True shorten: True CardSeparator: - opacity: message_selection.opacity + opacity: int(not root.is_pr) color: blue_bottom.foreground_color BoxLayout: size_hint: 1, None t@@ -53,7 +53,7 @@ SendScreen: disabled: root.is_pr on_release: Clock.schedule_once(lambda dt: app.amount_dialog(s, True)) CardSeparator: - opacity: message_selection.opacity + opacity: int(not root.is_pr) color: blue_bottom.foreground_color BoxLayout: id: message_selection t@@ -67,7 +67,7 @@ SendScreen: pos_hint: {'center_y': .5} BlueButton: id: description - text: s.message if s.message else _('Description') + text: s.message if s.message else (_('No Description') if root.is_pr else _('Description')) disabled: root.is_pr on_release: Clock.schedule_once(lambda dt: app.description_dialog(s)) BoxLayout: DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py t@@ -1322,8 +1322,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError): status, msg = self.wallet.sendtx(tx) if not status: return False, msg - key = pr.get_id() - self.invoices.set_paid(key, tx.hash()) + pr.set_paid(tx.hash()) + self.invoices.save() self.payment_request = None refund_address = self.wallet.addresses()[0] ack_status, ack_msg = pr.send_ack(str(tx), refund_address) DIR diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py t@@ -102,7 +102,8 @@ class PaymentRequest: self.payment_url = self.details.payment_url def is_pr(self): - return self.get_outputs() != [(TYPE_ADDRESS, self.get_requestor(), self.get_amount())] + return self.get_amount() != 0 + #return self.get_outputs() != [(TYPE_ADDRESS, self.get_requestor(), self.get_amount())] def verify(self, contacts): if not self.raw: t@@ -258,6 +259,8 @@ class PaymentRequest: print "PaymentACK message received: %s" % paymntack.memo return True, paymntack.memo + def set_paid(self, tx_hash): + self.tx = tx_hash def make_unsigned_request(req): t@@ -469,10 +472,6 @@ class InvoiceStore(object): def get(self, k): return self.invoices.get(k) - def set_paid(self, key, tx_hash): - self.invoices[key].tx = tx_hash - self.save() - def sorted_list(self): # sort return self.invoices.values()