URI: 
       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