diff --git a/src/cutecoin/core/net/network.py b/src/cutecoin/core/net/network.py index 44fc92ce42da0e3d05959a994b76aa87c5b5322b..c4df2f9acc9a13380463e0cbcd5213163388ca8c 100644 --- a/src/cutecoin/core/net/network.py +++ b/src/cutecoin/core/net/network.py @@ -82,14 +82,24 @@ class Network(QObject): def start_perpetual_crawling(self): self.must_crawl = True while self.must_crawl: - self.nodes = self.crawling(interval=10) - for n in self._nodes: - n.changed.connect(self.nodes_changed) + nodes = self.crawling(interval=10) + + new_inlines = [n.endpoint.inline() for n in nodes] + last_inlines = [n.endpoint.inline() for n in self._nodes] + + hash_new_nodes = hash(tuple(frozenset(sorted(new_inlines)))) + hash_last_nodes= hash(tuple(frozenset(sorted(last_inlines)))) + + if hash_new_nodes != hash_last_nodes: + self._nodes = nodes + self.nodes_changed.emit() + for n in self._nodes: + n.changed.connect(self.nodes_changed) def crawling(self, interval=0): nodes = [] traversed_pubkeys = [] - for n in self.nodes: + for n in self._nodes.copy(): logging.debug(traversed_pubkeys) logging.debug("Peering : next to read : {0} : {1}".format(n.pubkey, (n.pubkey not in traversed_pubkeys))) diff --git a/src/cutecoin/core/net/node.py b/src/cutecoin/core/net/node.py index e484e97a61403630d605b61aa328c62fb9fdf006..3223fe03794fa9b63ee3bd53f49bca16b235cfd2 100644 --- a/src/cutecoin/core/net/node.py +++ b/src/cutecoin/core/net/node.py @@ -112,8 +112,9 @@ class Node(QObject): self._pubkey = node_pubkey emit_change = True - new_inlines = [e.inline() for e in [n for n in self._neighbours]] - last_inlines = [e.inline() for e in [n for n in self._neighbours]] + logging.debug(neighbours) + new_inlines = [e.inline() for n in neighbours for e in n] + last_inlines = [e.inline() for n in self._neighbours for e in n] hash_new_neighbours = hash(tuple(frozenset(sorted(new_inlines)))) hash_last_neighbours = hash(tuple(frozenset(sorted(last_inlines)))) @@ -138,7 +139,7 @@ class Node(QObject): peering = bma.network.Peering(self.endpoint.conn_handler()).get() peer = Peer.from_signed_raw("{0}{1}\n".format(peering['raw'], peering['signature'])) - node = Node.from_peer(peer) + node = Node.from_peer(currency, peer) logging.debug(traversed_pubkeys) logging.debug("Traversing : next to read : {0} : {1}".format(node.pubkey, (node.pubkey not in traversed_pubkeys))) diff --git a/src/cutecoin/gui/network_tab.py b/src/cutecoin/gui/network_tab.py index aa46dbe1a623c7bd0398b540c6186b257c4464dd..4d13273c04e04a27c76321dba86098decb7d945a 100644 --- a/src/cutecoin/gui/network_tab.py +++ b/src/cutecoin/gui/network_tab.py @@ -36,6 +36,6 @@ class NetworkTabWidget(QWidget, Ui_NetworkTabWidget): community.network.nodes_changed.connect(self.refresh_nodes) def refresh_nodes(self): - self.table_network.sourceModel.dataChanged.emit(QModelIndex(), QModelIndex()) + self.table_network.model().sourceModel().modelReset.emit() diff --git a/src/cutecoin/models/network.py b/src/cutecoin/models/network.py index d74a21992cf129677afaa17103fce3a021e0dbb5..946d1302e3f58d789a446f23f3ff117d11164f33 100644 --- a/src/cutecoin/models/network.py +++ b/src/cutecoin/models/network.py @@ -47,6 +47,8 @@ class NetworkFilterProxyModel(QSortFilterProxyModel): def data(self, index, role): source_index = self.mapToSource(index) + if not source_index.isValid(): + return QVariant() source_data = self.sourceModel().data(source_index, role) if index.column() == self.sourceModel().column_types.index('is_member') \ and role == Qt.DisplayRole: