diff --git a/src/cutecoin/gui/addCommunityDialog.py b/src/cutecoin/gui/addCommunityDialog.py index a58976f377509e91a34d9550ed3179ea7a3947a3..ad77ba7115001e87d58fbe2b8a4a8b9421bf8243 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 0000000000000000000000000000000000000000..ffd81cd374fe31f443f883943f7370cb72503327 --- /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 ec6c296fecf87498617ed64b129f8e0e1c1ab480..9c32dabb46edba9c2b40b2452520dadf74c69349 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 1a79025d9da18549f4e9d769f40f0a23b879b7d2..cee00161ae4a42d7407473d7ca3b21b28faa3307 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 458185fff076c0dbd6c6759c40ce05ac1e85b14d..b632aa4f1c65bd59e6f486c38cf93ebb2fe16296 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 a176eb30e03f25841f03ed424ae6c50ae1a90a6a..8bd7bea8a18e40ba76f8998ab15cc488ec4251ae 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 7ed1547943872879fca0e670a24253acdfd2d1a2..cdfcd33187cc79bdbd3a98a18c02bac25543c990 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 60c05d7443d7c69dd5267450868585a568b025d2..5777ed463f9cc4114c84c62a3b5d2efd631ad9c5 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 eb8440203125d0cf2d72da4423a33d990db43547..14221ddb4809aab7b33d9668075bc93b55a9e0db 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 b781a505a8b6a5e2af22d5116e7e6787a40753fc..8f2eb592685821f5a738e0f286086c138687ba14 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']: