From fac788acd00c9ad911c40fb9ac34121d4a9b8966 Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Sat, 8 Feb 2014 23:20:29 +0100 Subject: [PATCH] Gestion de multiples MainNode et essis de connexion --- src/cutecoin/gui/addCommunityDialog.py | 2 +- src/cutecoin/gui/communityTabWidget.py | 21 +++++++++++ src/cutecoin/gui/mainWindow.py | 4 +++ src/cutecoin/models/account/__init__.py | 15 +++++--- .../models/account/communities/__init__.py | 20 +++++------ .../models/account/communities/listModel.py | 2 +- src/cutecoin/models/community/__init__.py | 36 +++++++++++++------ src/cutecoin/models/community/itemModel.py | 2 +- src/cutecoin/models/node/__init__.py | 1 + src/cutecoin/models/wallet/__init__.py | 6 ++-- 10 files changed, 76 insertions(+), 33 deletions(-) create mode 100644 src/cutecoin/gui/communityTabWidget.py diff --git a/src/cutecoin/gui/addCommunityDialog.py b/src/cutecoin/gui/addCommunityDialog.py index a58976f3..ad77ba71 100644 --- a/src/cutecoin/gui/addCommunityDialog.py +++ b/src/cutecoin/gui/addCommunityDialog.py @@ -32,7 +32,7 @@ class AddCommunityDialog(QDialog, Ui_AddCommunityDialog): ''' server = self.serverEdit.text() port = self.portBox.value() - community = self.account.communities.addCommunity(MainNode(server, port)) + community = self.account.communities.addCommunity(MainNode(server, port), self.account.keyFingerprint()) self.account.wallets.addWallet(community.currency) self.communityView.setModel( CommunityTreeModel(community) ) diff --git a/src/cutecoin/gui/communityTabWidget.py b/src/cutecoin/gui/communityTabWidget.py new file mode 100644 index 00000000..ffd81cd3 --- /dev/null +++ b/src/cutecoin/gui/communityTabWidget.py @@ -0,0 +1,21 @@ +''' +Created on 2 févr. 2014 + +@author: inso +''' +from PyQt5.QtWidgets import QWidget +from cutecoin.gen_resources.communityTabWidget_uic import Ui_CommunityTabWidget + +class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): + ''' + classdocs + ''' + def __init__(self, community): + ''' + Constructor + ''' + super(CommunityTabWidget, self).__init__() + self.setupUi(self) + self.community = community + + diff --git a/src/cutecoin/gui/mainWindow.py b/src/cutecoin/gui/mainWindow.py index ec6c296f..9c32dabb 100644 --- a/src/cutecoin/gui/mainWindow.py +++ b/src/cutecoin/gui/mainWindow.py @@ -6,6 +6,7 @@ Created on 1 févr. 2014 from cutecoin.gen_resources.mainwindow_uic import Ui_MainWindow from PyQt5.QtWidgets import QMainWindow from cutecoin.gui.addAccountDialog import AddAccountDialog +from cutecoin.gui.communityTabWidget import CommunityTabWidget from cutecoin.models.account.wallets.listModel import WalletsListModel from cutecoin.models.wallet.listModel import WalletListModel @@ -47,3 +48,6 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.accountNameLabel = self.core.currentAccount.name self.walletsList.setModel(WalletsListModel(self.core.currentAccount)) self.walletContent.setModel(WalletListModel(self.core.currentAccount.wallets.walletsList[0])) + for community in self.core.currentAccount.communities.communitiesList: + self.communitiesTab.addPage(CommunityTabWidget(community), community.name()) + diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py index 1a79025d..cee00161 100644 --- a/src/cutecoin/models/account/__init__.py +++ b/src/cutecoin/models/account/__init__.py @@ -23,8 +23,7 @@ class Account(object): self.wallets = Wallets() for community in self.communities.communitiesList: wallet = self.wallets.addWallet(community.currency) - #TODO: Gerer le cas ou plusieurs noeuds sont presents dans la liste et le 0 ne repond pas - wallet.refreshCoins(community.knownNodes[0], self.keyFingerprint()) + wallet.refreshCoins(community, self.keyFingerprint()) self.receivedTransactions = [] self.sentTransactions = [] @@ -32,13 +31,19 @@ class Account(object): def addWallet(name, currency): self.wallets.addWallet(name, currency) - def keyFingerprint(): + def keyFingerprint(self): gpg = gnupg.GPG() - availableKeys = gpg.list_keys(True) + availableKeys = gpg.list_keys() for k in availableKeys: - if k['key_id'] == self.pgpKey: + if k['keyid'] == self.pgpKey: return k['fingerprint'] return "" + def transactionsReceived(self): + pass + + def transactionsSent(self): + pass + diff --git a/src/cutecoin/models/account/communities/__init__.py b/src/cutecoin/models/account/communities/__init__.py index 458185ff..b632aa4f 100644 --- a/src/cutecoin/models/account/communities/__init__.py +++ b/src/cutecoin/models/account/communities/__init__.py @@ -22,19 +22,17 @@ class Communities(object): if com.currency == currency: return com - #TODO: Check membership - def addCommunity(self, mainNode): - ucoin.settings['server'] = mainNode.server - ucoin.settings['port'] = mainNode.port - currentAmendment = ucoin.hdc.amendments.Promoted().get() - currency = currentAmendment['currency'] - community = self.getCommunity(currency) - if community == None: - community = Community(mainNode, currency) - self.communitiesList.append(community) + def addCommunity(self, mainNode, accountFingerprint): + community = Community(mainNode) + self.members = community.ucoinRequest(lambda:ucoin.hdc.amendments.view.Members(community.currentAmendmentId()).get) - return community + #TODO: Check membership + for member in self.members: + if member['value'] == accountFingerprint: + self.communitiesList.append(community) + return community + return None #TODO: Jsonify this model def saveJson(self): diff --git a/src/cutecoin/models/account/communities/listModel.py b/src/cutecoin/models/account/communities/listModel.py index a176eb30..8bd7bea8 100644 --- a/src/cutecoin/models/account/communities/listModel.py +++ b/src/cutecoin/models/account/communities/listModel.py @@ -25,7 +25,7 @@ class CommunitiesListModel(QAbstractListModel): if role == Qt.DisplayRole: row=index.row() - value = self.communities.communitiesList[row].currency + value = self.communities.communitiesList[row].name() return value def flags(self,index): diff --git a/src/cutecoin/models/community/__init__.py b/src/cutecoin/models/community/__init__.py index 7ed15479..cdfcd331 100644 --- a/src/cutecoin/models/community/__init__.py +++ b/src/cutecoin/models/community/__init__.py @@ -5,35 +5,51 @@ Created on 1 févr. 2014 ''' import ucoinpy as ucoin +import hashlib +import json class Community(object): ''' classdocs ''' - def __init__(self, mainNode, currency): + def __init__(self, mainNode): ''' Constructor ''' self.knownNodes = [] self.knownNodes.append(mainNode) - self.currency = currency + self.ucoinInstance = ucoin + + currentAmendment = self.ucoinRequest(lambda : self.ucoinInstance.hdc.amendments.Current().get) + self.currency = currentAmendment['currency'] def members(self): ''' Listing members of a community ''' + members = self.ucoinRequest(lambda : self.ucoinInstance.hdc.amendments.view.Members().get) + return members - #TODO: Try connecting with nodes of the list if the first fails - # Maybe create a method - ucoin.settings['server'] = self.knowNodes[0].server - ucoin.settings['port'] = self.knowNodes[0].port + def ucoinRequest(self, request): + for node in self.knownNodes: + if node.available == True: + self.ucoinInstance.settings['server'] = node.server + self.ucoinInstance.settings['port'] = node.port + print("Trying to connect to : " + node.getText()) + return (request())() + + raise RuntimeError("Cannot connect to any node") - members = ucoin.hdc.amendments.view.Members().get() - return members - def nodes(self): - return self.knownNodes + def currentAmendmentId(self): + currentAmendment = self.ucoinRequest(lambda:ucoin.hdc.amendments.Current().get) + currentAmendmentHash = hashlib.sha1(json.dumps(currentAmendment).encode('utf-8')).hexdigest() + amendmentId = str(currentAmendment["number"]) + "-" + currentAmendmentHash + print("Amendment : " + amendmentId) + return amendmentId + def name(self): + return self.currency #TODO: Jsonify this model def saveJson(self): diff --git a/src/cutecoin/models/community/itemModel.py b/src/cutecoin/models/community/itemModel.py index 60c05d74..5777ed46 100644 --- a/src/cutecoin/models/community/itemModel.py +++ b/src/cutecoin/models/community/itemModel.py @@ -7,7 +7,7 @@ Created on 5 févr. 2014 class CommunityItemModel(object): def __init__(self, community, communitiesItem=None): self.communitiesItem = communitiesItem - self.communityText = community.currency + self.communityText = community.name() self.mainNodeItems = [] def appendChild(self, item): diff --git a/src/cutecoin/models/node/__init__.py b/src/cutecoin/models/node/__init__.py index eb844020..14221ddb 100644 --- a/src/cutecoin/models/node/__init__.py +++ b/src/cutecoin/models/node/__init__.py @@ -16,6 +16,7 @@ class Node(object): ''' self.server = server self.port = port + self.available = True def __eq__(self, other): diff --git a/src/cutecoin/models/wallet/__init__.py b/src/cutecoin/models/wallet/__init__.py index b781a505..8f2eb592 100644 --- a/src/cutecoin/models/wallet/__init__.py +++ b/src/cutecoin/models/wallet/__init__.py @@ -31,10 +31,8 @@ class Wallet(object): value += coin.value() return value - def refreshCoins(self, mainNode, pgpFingerprint): - ucoin.settings['server'] = mainNode - ucoin.settings['port'] = mainNode - dataList = ucoin.hdc.coins.List(pgpFingerprint).get() + def refreshCoins(self, community, pgpFingerprint): + dataList = community.ucoinRequest(lambda:ucoin.hdc.coins.List(pgpFingerprint).get) for issaunces in dataList['coins']: issuer = issaunces['issuer'] for coinsIds in issaunces['ids']: -- GitLab