commit 06bfb603089198d4ac65c32aba6a48153de9d67c
parent b6ced19c1e2c134a6b5f52a7755f441b1ef762ed
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:
3 files changed, 29 insertions(+), 11 deletions(-)
diff --git a/gui/gui_classic.py b/gui/gui_classic.py
@@ -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')
@@ -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)
diff --git a/lib/interface.py b/lib/interface.py
@@ -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):
diff --git a/lib/wallet.py b/lib/wallet.py
@@ -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:
@@ -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