Skip to content
Snippets Groups Projects
Commit 8e4b68fd authored by inso's avatar inso
Browse files

Adding and removing root nodes from community

parent d34c6350
Branches
Tags
No related merge requests found
......@@ -261,5 +261,6 @@
<slot>next()</slot>
<slot>previous()</slot>
<slot>current_wallet_changed(int)</slot>
<slot>remove_node()</slot>
</slots>
</ui>
......@@ -308,14 +308,21 @@ class Community(QObject):
'''
return time.time() - certtime > self.parameters['sigValidity']
@property
def add_peer(self, peer):
def add_node(self, node):
'''
Add a peer to the community.
:param peer: The new peer as a ucoinpy Peer object.
'''
self._network.add_node(Node.from_peer(peer))
self._network.add_root_node(node)
def remove_node(self, index):
'''
Remove a node from the community.
:param index: The index of the removed node.
'''
self._network.remove_root_node(index)
def get_block(self, number=None):
'''
......@@ -470,7 +477,7 @@ class Community(QObject):
'''
nodes_data = []
for node in self._network.online_nodes:
for node in self._network.root_nodes:
nodes_data.append(node.jsonify())
data = {'currency': self.currency,
......
......@@ -29,13 +29,14 @@ class Network(Watcher):
:param list nodes: The nodes of the network
'''
super().__init__()
self._root_nodes = nodes
self._nodes = []
self._mutex = QMutex()
self.currency = currency
self.nodes = nodes
self._must_crawl = False
self._is_perpetual = False
self._block_found = 0
self._block_found = self.latest_block
@classmethod
def create(cls, node):
......@@ -48,12 +49,6 @@ class Network(Watcher):
'''
nodes = [node]
network = cls(node.currency, nodes)
nodes = network.crawling()
block_max = max([n.block for n in nodes])
for node in nodes:
node.check_sync(block_max)
network.nodes = nodes
network._block_found = network.latest_block
return network
def merge_with_json(self, json_data):
......@@ -73,7 +68,6 @@ class Network(Watcher):
n.changed.disconnect()
except TypeError:
pass
self.nodes = self.crawling()
@classmethod
def from_json(cls, currency, json_data):
......@@ -87,11 +81,7 @@ class Network(Watcher):
for data in json_data:
node = Node.from_json(currency, data)
nodes.append(node)
block_max = max([n.block for n in nodes])
for node in nodes:
node.check_sync(block_max)
network = cls(currency, nodes)
network._block_found = network.latest_block
return network
def jsonify(self):
......@@ -138,6 +128,13 @@ class Network(Watcher):
'''
return self._nodes
@property
def root_nodes(self):
'''
Get root nodes.
'''
return self._root_nodes
@nodes.setter
def nodes(self, new_nodes):
'''
......@@ -172,6 +169,18 @@ class Network(Watcher):
node.changed.connect(self.handle_change)
logging.debug("{:} connected".format(node.pubkey))
def add_root_node(self, node):
'''
Add a node to the root nodes list
'''
self._root_nodes.append(node)
def remove_root_node(self, index):
'''
Remove a node from the root nodes list
'''
self._root_nodes.pop(index)
def moveToThread(self, thread):
for n in self.nodes:
n.moveToThread(thread)
......
......@@ -239,7 +239,6 @@ class Node(QObject):
node_currency = informations["currency"]
node_uid = self._request_uid()
logging.debug("Continuing...")
#If the nodes goes back online...
if self.state in (Node.OFFLINE, Node.CORRUPTED):
self.state = Node.ONLINE
......
......@@ -12,6 +12,7 @@ from ucoinpy.api.bma import ConnectionHandler
from ucoinpy.documents.peer import Peer
from PyQt5.QtWidgets import QDialog, QMenu, QMessageBox
from PyQt5.QtGui import QCursor
from ..gen_resources.community_cfg_uic import Ui_CommunityConfigurationDialog
from ..models.peering import PeeringTreeModel
......@@ -77,7 +78,7 @@ class StepPageAddpeers(Step):
def display_page(self):
# We add already known peers to the displayed list
self.config_dialog.nodes = self.config_dialog.community.network.nodes
self.config_dialog.nodes = self.config_dialog.community.network.root_nodes
try:
tree_model = PeeringTreeModel(self.config_dialog.community)
except requests.exceptions.RequestException:
......@@ -151,8 +152,8 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
'''
Add node slot
'''
server = self.lineedit_server.text()
port = self.spinbox_port.value()
server = self.lineedit_add_address.text()
port = self.spinbox_add_port.value()
try:
node = Node.from_address(self.community.currency, server, port)
......@@ -162,14 +163,34 @@ class ProcessConfigureCommunity(QDialog, Ui_CommunityConfigurationDialog):
str(e))
self.tree_peers.setModel(PeeringTreeModel(self.community))
def remove_node(self):
'''
Remove node slot
'''
logging.debug("Remove node")
index = self.sender().data()
self.community.remove_node(index)
self.tree_peers.setModel(PeeringTreeModel(self.community))
@property
def nb_steps(self):
s = self.step
nb_steps = 1
while s.next_step != None:
s = s.next_step
nb_steps = nb_steps + 1
return nb_steps
def showContextMenu(self, point):
if self.stacked_pages.currentIndex() == 1:
if self.stacked_pages.currentIndex() == self.nb_steps - 1:
menu = QMenu()
action = menu.addAction("Delete", self.removeNode)
index = self.tree_peers.indexAt(point)
action = menu.addAction("Delete", self.remove_node)
action.setData(index.row())
if self.community is not None:
if len(self.nodes) == 1:
action.setEnabled(False)
menu.exec_(self.mapToGlobal(point))
menu.exec_(QCursor.pos())
def accept(self):
try:
......
......@@ -96,7 +96,7 @@ class PeeringTreeModel(QAbstractItemModel):
Constructor
'''
super().__init__(None)
self.nodes = community._network.online_nodes
self.nodes = community._network.root_nodes
self.root_item = RootItem(community.currency)
self.refresh_tree()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment