tReworked notification flow and combined multiple transactions into one notification - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 06bfb603089198d4ac65c32aba6a48153de9d67c DIR parent b6ced19c1e2c134a6b5f52a7755f441b1ef762ed HTML Author: Maran <maran.hidskes@gmail.com> Date: Mon, 17 Jun 2013 15:12:20 +0200 Reworked notification flow and combined multiple transactions into one notification Diffstat: M gui/gui_classic.py | 30 ++++++++++++++++++++++++------ M lib/interface.py | 2 +- M lib/wallet.py | 8 ++++---- 3 files changed, 29 insertions(+), 11 deletions(-) --- DIR diff --git a/gui/gui_classic.py b/gui/gui_classic.py t@@ -314,6 +314,9 @@ class ElectrumWindow(QMainWindow): # set initial message self.console.showMessage(self.wallet.interface.banner) + # Once GUI has been initialized check if we want to announce something since the callback has been called before the GUI was initialized + self.notify_transactions() + # plugins that need to change the GUI do it here self.run_hook('init_gui') t@@ -421,12 +424,27 @@ class ElectrumWindow(QMainWindow): self.update_wallet() def notify_transactions(self): - for tx in self.wallet.interface.pending_transactions: - if tx: - self.wallet.interface.pending_transactions.remove(tx) - is_relevant, is_mine, v, fee = self.wallet.get_tx_value(tx) - if(v > 0): - self.notify("New transaction received. %s BTC" % (self.format_amount(v))) + print_error("Notifying GUI") + if len(self.wallet.interface.pending_transactions_for_notifications) > 0: + # Combine the transactions if there are more then three + tx_amount = len(self.wallet.interface.pending_transactions_for_notifications) + if(tx_amount >= 3): + total_amount = 0 + for tx in self.wallet.interface.pending_transactions_for_notifications: + is_relevant, is_mine, v, fee = self.wallet.get_tx_value(tx) + if(v > 0): + total_amount += v + + self.notify("%s new transactions received. Total amount received in the new transactions %s BTC" % (tx_amount, self.format_amount(total_amount))) + + self.wallet.interface.pending_transactions_for_notifications = [] + else: + for tx in self.wallet.interface.pending_transactions_for_notifications: + if tx: + self.wallet.interface.pending_transactions_for_notifications.remove(tx) + is_relevant, is_mine, v, fee = self.wallet.get_tx_value(tx) + if(v > 0): + self.notify("New transaction received. %s BTC" % (self.format_amount(v))) def notify(self, message): self.notifier.showMessage("Electrum", message, QSystemTrayIcon.Information, 20000) DIR diff --git a/lib/interface.py b/lib/interface.py t@@ -90,7 +90,7 @@ class Interface(threading.Thread): self.unanswered_requests = {} #banner self.banner = '' - self.pending_transactions = [] + self.pending_transactions_for_notifications= [] def queue_json_response(self, c): DIR diff --git a/lib/wallet.py b/lib/wallet.py t@@ -682,8 +682,7 @@ class Wallet: with self.transaction_lock: self.transactions[tx_hash] = tx - self.interface.pending_transactions.append(tx) - self.interface.trigger_callback("new_transaction") + self.interface.pending_transactions_for_notifications.append(tx) self.save_transactions() if self.verifier and tx_height>0: t@@ -1192,6 +1191,7 @@ class WalletSynchronizer(threading.Thread): if self.was_updated and not requested_tx: self.interface.trigger_callback('updated') - self.was_updated = False - + self.interface.trigger_callback("new_transaction") # Updated gets called too many times from other places as well; if we use that signal we get the notification three times + + self.was_updated = False