From 947bbfeca8fe25c0e15a5705932b010e806b45f3 Mon Sep 17 00:00:00 2001 From: Vincent Texier <vit@free.fr> Date: Thu, 1 Jan 2015 21:15:47 +0100 Subject: [PATCH] Display only more recent certification in wot if duplicated --- src/cutecoin/gui/views/wot.py | 4 +-- src/cutecoin/gui/wot_tab.py | 52 ++++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/cutecoin/gui/views/wot.py b/src/cutecoin/gui/views/wot.py index e7efa174..5108c438 100644 --- a/src/cutecoin/gui/views/wot.py +++ b/src/cutecoin/gui/views/wot.py @@ -142,11 +142,11 @@ class Scene(QGraphicsScene): nodes = ((k, v) for (k, v) in sorted(graph.items(), key=lambda kv: kv[1]['text'].lower()) if selected_id in (arc['id'] for arc in v['arcs'])) # add nodes and arcs for _id, certifier_node in nodes: + node = self.add_node(certifier_node, (x, y)) for arc in certifier_node['arcs']: if arc['id'] == selected_id: - node = self.add_node(certifier_node, (x, y)) self.add_arc(node, root_node, arc) - y += 50 + y += 50 self.update() diff --git a/src/cutecoin/gui/wot_tab.py b/src/cutecoin/gui/wot_tab.py index ceb93682..f6e2b6ec 100644 --- a/src/cutecoin/gui/wot_tab.py +++ b/src/cutecoin/gui/wot_tab.py @@ -67,10 +67,11 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): node_status += NODE_STATUS_SELECTED # highlighted node (wallet) - graph[public_key] = {'id': public_key, 'arcs': [], 'text': certifiers['uid'], 'tooltip': public_key, 'status': node_status} + graph[public_key] = {'id': public_key, 'arcs': list(), 'text': certifiers['uid'], 'tooltip': public_key, 'status': node_status} #Â add certifiers of uid for certifier in certifiers['certifications']: + # new node if certifier['pubkey'] not in graph.keys(): node_status = (NODE_STATUS_HIGHLIGHTED and (certifier['pubkey'] == self.account.pubkey)) or 0 graph[certifier['pubkey']] = { @@ -80,6 +81,14 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): 'tooltip': certifier['pubkey'], 'status': node_status } + # add only valid certification... + if (time.time() - certifier['cert_time']['medianTime']) > self.signature_validity: + continue + # keep only the latest certification + if graph[certifier['pubkey']]['arcs']: + if certifier['cert_time']['medianTime'] < graph[certifier['pubkey']]['arcs'][0]['cert_time']: + continue + # display validity status if (time.time() - certifier['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time: arc_status = ARC_STATUS_WEAK else: @@ -89,12 +98,26 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): 'status': arc_status, 'tooltip': datetime.datetime.fromtimestamp( certifier['cert_time']['medianTime'] + self.signature_validity - ).strftime("%Y/%m/%d") + ).strftime("%Y/%m/%d"), + 'cert_time': certifier['cert_time']['medianTime'] } - graph[certifier['pubkey']]['arcs'].append(arc) + graph[certifier['pubkey']]['arcs'] = [arc] # add certified by uid for certified in self.community.request(bma.wot.CertifiedBy, {'search': public_key})['certifications']: + if certified['pubkey'] not in graph.keys(): + node_status = (NODE_STATUS_HIGHLIGHTED and (certified['pubkey'] == self.account.pubkey)) or 0 + graph[certified['pubkey']] = { + 'id': certified['pubkey'], + 'arcs': list(), + 'text': certified['uid'], + 'tooltip': certified['pubkey'], + 'status': node_status + } + # add only valid certification... + if (time.time() - certified['cert_time']['medianTime']) > self.signature_validity: + continue + # display validity status if (time.time() - certified['cert_time']['medianTime']) > self.ARC_STATUS_STRONG_time: arc_status = ARC_STATUS_WEAK else: @@ -104,18 +127,21 @@ class WotTabWidget(QWidget, Ui_WotTabWidget): 'status': arc_status, 'tooltip': datetime.datetime.fromtimestamp( certified['cert_time']['medianTime'] + self.signature_validity - ).strftime("%Y/%m/%d") + ).strftime("%Y/%m/%d"), + 'cert_time': certified['cert_time']['medianTime'] } graph[public_key]['arcs'].append(arc) - if certified['pubkey'] not in graph.keys(): - node_status = (NODE_STATUS_HIGHLIGHTED and (certified['pubkey'] == self.account.pubkey)) or 0 - graph[certified['pubkey']] = { - 'id': certified['pubkey'], - 'arcs': list(), - 'text': certified['uid'], - 'tooltip': certified['pubkey'], - 'status': node_status - } + # removed old duplicated arcs + arcs = list() + for a in graph[public_key]['arcs']: + # if same arc already exists... + if a['id'] == arc['id']: + # if arc more recent, dont keep old one... + if arc['cert_time'] > a['cert_time']: + continue + arcs.append(a) + # replace arcs with updated list + graph[public_key]['arcs'] = arcs # draw graph in qt scene self.graphicsView.scene().update_wot(graph) -- GitLab