Added notifications when receiving a new transaction
authorMaran <maran.hidskes@gmail.com>
Fri, 31 May 2013 16:23:51 +0000 (18:23 +0200)
committerMaran <maran.hidskes@gmail.com>
Tue, 16 Jul 2013 10:15:23 +0000 (12:15 +0200)
gui/gui_classic.py
lib/interface.py
lib/wallet.py

index e41ee8e..d0e861a 100644 (file)
@@ -244,6 +244,11 @@ class ElectrumWindow(QMainWindow):
         self.config = config
         self.current_account = self.config.get("current_account", None)
 
+        self.icon = QIcon(os.getcwd() + '/icons/electrum.png')
+        self.notifier = QSystemTrayIcon(self.icon, self)
+        self.notifier.setToolTip('Electrum')
+        self.notifier.show()
+
         self.init_plugins()
         self.create_status_bar()
 
@@ -252,6 +257,7 @@ class ElectrumWindow(QMainWindow):
         self.wallet.interface.register_callback('banner', lambda: self.emit(QtCore.SIGNAL('banner_signal')))
         self.wallet.interface.register_callback('disconnected', lambda: self.emit(QtCore.SIGNAL('update_status')))
         self.wallet.interface.register_callback('disconnecting', lambda: self.emit(QtCore.SIGNAL('update_status')))
+        self.wallet.interface.register_callback('new_transaction', self.notify_transactions)
 
         self.expert_mode = config.get('classic_expert_mode', False)
         self.decimal_point = config.get('decimal_point', 8)
@@ -288,6 +294,7 @@ class ElectrumWindow(QMainWindow):
         
         self.connect(self, QtCore.SIGNAL('update_status'), self.update_status)
         self.connect(self, QtCore.SIGNAL('banner_signal'), lambda: self.console.showMessage(self.wallet.interface.banner) )
+
         self.history_list.setFocus(True)
         
         self.exchanger = exchange_rate.Exchanger(self)
@@ -390,8 +397,6 @@ class ElectrumWindow(QMainWindow):
 
         self.setMenuBar(menubar)
 
-
-
     def load_wallet(self, filename):
         import electrum
 
@@ -415,7 +420,15 @@ 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)
+                self.notify("New transaction received. %s BTC" % (self.format_amount(v)))
+
+    def notify(self, message):
+        self.notifier.showMessage("Electrum", message, QSystemTrayIcon.Information, 20000)
 
     # plugins
     def init_plugins(self):
index f69b66c..71f7ec8 100644 (file)
@@ -90,6 +90,7 @@ class Interface(threading.Thread):
         self.unanswered_requests = {}
         #banner
         self.banner = ''
+        self.pending_transactions = []
 
 
     def queue_json_response(self, c):
index 09f301d..1fb496d 100644 (file)
@@ -674,7 +674,6 @@ class Wallet:
 
 
     def receive_tx_callback(self, tx_hash, tx, tx_height):
-
         if not self.check_new_tx(tx_hash, tx):
             # may happen due to pruning
             print_error("received transaction that is no longer referenced in history", tx_hash)
@@ -682,6 +681,10 @@ class Wallet:
 
         with self.transaction_lock:
             self.transactions[tx_hash] = tx
+
+            self.interface.pending_transactions.append(tx)
+            self.interface.trigger_callback("new_transaction")
+
             self.save_transactions()
             if self.verifier and tx_height>0: 
                 self.verifier.add(tx_hash, tx_height)
@@ -694,7 +697,6 @@ class Wallet:
             tx[k] = str(v)
         self.config.set_key('transactions', tx, True)
 
-
     def receive_history_callback(self, addr, hist):
 
         if not self.check_new_history(addr, hist):