From eeb0f8a3f44a0f70d8261871734b29123316f0e6 Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Sat, 17 Oct 2015 15:49:10 +0200
Subject: [PATCH] Fix wrong network behaviour when root nodes change identity

---
 src/cutecoin/core/app.py         |  8 ++++----
 src/cutecoin/core/net/network.py |  9 ++++++++-
 src/cutecoin/core/net/node.py    | 12 +++++-------
 3 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py
index 0ffcd2ec..f1ccc3de 100644
--- a/src/cutecoin/core/app.py
+++ b/src/cutecoin/core/app.py
@@ -72,15 +72,15 @@ class Application(QObject):
                             }
 
         self.notifications = {'membership_expire_soon':
-                                  (
+                                  [
                                       self.tr("Warning : Your membership is expiring soon."),
                                       0
-                                   ),
+                                   ],
                             'warning_certifications':
-                                    (
+                                    [
                                         self.tr("Warning : Your could miss certifications soon."),
                                         0
-                                    )
+                                    ]
                             }
 
     @classmethod
diff --git a/src/cutecoin/core/net/network.py b/src/cutecoin/core/net/network.py
index 4d49b68e..b418c422 100644
--- a/src/cutecoin/core/net/network.py
+++ b/src/cutecoin/core/net/network.py
@@ -98,7 +98,6 @@ class Network(QObject):
             node = Node.from_json(currency, data)
             nodes.append(node)
         network = cls(currency, nodes)
-        # We block the signals until loading the nodes cache
         return network
 
     def jsonify(self):
@@ -269,6 +268,7 @@ class Network(QObject):
         """
         self._nodes.append(node)
         node.changed.connect(self.handle_change)
+        node.identity_changed.connect(self.handle_identity_change)
         node.neighbour_found.connect(self.handle_new_node)
         logging.debug("{:} connected".format(node.pubkey[:5]))
 
@@ -330,6 +330,13 @@ class Network(QObject):
             except InvalidNodeCurrency as e:
                 logging.debug(str(e))
 
+    @pyqtSlot()
+    def handle_identity_change(self):
+        node = self.sender()
+        if node in self._root_nodes:
+            self.root_nodes_changed.emit()
+        self.nodes_changed.emit()
+
     @pyqtSlot()
     def handle_change(self):
         node = self.sender()
diff --git a/src/cutecoin/core/net/node.py b/src/cutecoin/core/net/node.py
index c8b7da4c..ad9eab52 100644
--- a/src/cutecoin/core/net/node.py
+++ b/src/cutecoin/core/net/node.py
@@ -36,6 +36,7 @@ class Node(QObject):
     CORRUPTED = 4
 
     changed = pyqtSignal()
+    identity_changed = pyqtSignal()
     neighbour_found = pyqtSignal(Peer, str)
 
     def __init__(self, currency, endpoints, uid, pubkey, block,
@@ -345,18 +346,15 @@ class Node(QObject):
             node_currency = peering_data["currency"]
             self.state = Node.ONLINE
 
-            change = False
             if node_pubkey != self.pubkey:
                 self._pubkey = node_pubkey
-                change = True
+                self.identity_changed.emit()
 
             if node_currency != self.currency:
                 self.state = Node.CORRUPTED
                 logging.debug("Change : new state corrupted")
-                change = True
-
-            if change:
                 self.changed.emit()
+
         except ValueError as e:
             logging.debug("Error in peering reply : {0}".format(str(e)))
             self.changed.emit()
@@ -415,13 +413,13 @@ class Node(QObject):
                             uid = uid["uid"]
             if self._uid != uid:
                 self._uid = uid
-                self.changed.emit()
+                self.identity_changed.emit()
         except ValueError as e:
             if '404' in str(e):
                 logging.debug("UID not found")
             else:
                 logging.debug("error in uid reply")
-                self.changed.emit()
+                self.identity_changed.emit()
         except ClientError:
             logging.debug("Client error : {0}".format(self.pubkey))
             self.state = Node.OFFLINE
-- 
GitLab