From d364502281843cbc512d9054ec493b17223ac1e8 Mon Sep 17 00:00:00 2001
From: Inso <insomniak.fr@gmail.com>
Date: Thu, 27 Feb 2014 19:27:03 +0100
Subject: [PATCH] Transfer is now available through cutecoin

---
 res/ui/transferDialog.ui                      |  4 +-
 src/cutecoin/gui/transferMoneyDialog.py       | 31 +++++++++++-----
 src/cutecoin/models/account/__init__.py       |  4 ++
 src/cutecoin/models/coin/listModel.py         | 37 +++++++++++++++++++
 .../models/community/membersListModel.py      |  2 +-
 src/cutecoin/models/transaction/__init__.py   |  4 +-
 src/cutecoin/models/transaction/factory.py    |  4 +-
 .../models/transaction/receivedListModel.py   |  2 +-
 .../models/transaction/sentListModel.py       |  2 +-
 9 files changed, 70 insertions(+), 20 deletions(-)
 create mode 100644 src/cutecoin/models/coin/listModel.py

diff --git a/res/ui/transferDialog.ui b/res/ui/transferDialog.ui
index 76f411f5..480d297f 100644
--- a/res/ui/transferDialog.ui
+++ b/res/ui/transferDialog.ui
@@ -32,7 +32,7 @@
         <item>
          <widget class="QLineEdit" name="edit_keyFingerprint">
           <property name="inputMask">
-           <string>&gt;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN</string>
+           <string/>
           </property>
           <property name="text">
            <string/>
@@ -186,7 +186,7 @@
            <number>0</number>
           </property>
           <item>
-           <widget class="QLineEdit" name="lineEdit">
+           <widget class="QLineEdit" name="edit_message">
             <property name="placeholderText">
              <string>A message</string>
             </property>
diff --git a/src/cutecoin/gui/transferMoneyDialog.py b/src/cutecoin/gui/transferMoneyDialog.py
index 7af976b2..442941e1 100644
--- a/src/cutecoin/gui/transferMoneyDialog.py
+++ b/src/cutecoin/gui/transferMoneyDialog.py
@@ -62,24 +62,24 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
         pass
 
     def accept(self):
-        sentCoins = self.listView_coinsSent.model().coins
-        receiver = None
+        sentCoins = self.listView_coinsSent.model().toString()
+        recipient = None
 
-        if self.radio_keyFingerprint.toggled():
-            receiver = Person(self.edit_keyFingerprint.text(), "", "")
+        if self.radio_keyFingerprint.isChecked():
+            recipient = Person("", self.edit_keyFingerprint.text(), "")
         else:
             #TODO: Manage contacts
-            receiver = Person(self.edit_keyFingerprint.text(), "", "")
+            recipient = Person("", self.edit_keyFingerprint.text(), "")
 
-        if self.radio_nodeAddress.toggled():
-            node = Node(self.edit_nodeAddress, self.edit_port)
+        if self.radio_nodeAddress.isChecked():
+            node = Node(self.edit_nodeAddress.text(), int(self.edit_port.text()))
         else:
             #TODO: Manage trusted nodes
-            node = Node(self.edit_nodeAddress, self.edit_port)
+            node = Node(self.edit_nodeAddress.text(), int(self.edit_port.text()))
 
+        message = self.edit_message.text()
         #TODO: Transfer money, and validate the window if no error happened
-
-        self.sender.transferCoins(sentCoins)
+        print(self.sender.transferCoins(node, recipient, sentCoins, message))
 
     def changeDisplayedWallet(self, index):
         wallet = self.sender.wallets.walletsList[index]
@@ -91,5 +91,16 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog):
         walletCoinsModel = CoinsListModel(list(wallet.coins))
         self.listView_wallet.setModel(walletCoinsModel)
 
+    def recipientModeChanged(self, fingerprintToggled):
+        self.edit_keyFingerprint.setEnabled(fingerprintToggled)
+        self.comboBox_contact.setEnabled(not fingerprintToggled)
+
+    def transferModeChanged(self, nodeAddressToggled):
+        self.edit_nodeAddress.setEnabled(nodeAddressToggled)
+        self.comboBox_trustedNode.setEnabled(not nodeAddressToggled)
+
+
+
+
 
 
diff --git a/src/cutecoin/models/account/__init__.py b/src/cutecoin/models/account/__init__.py
index 0141967e..e01f9bb8 100644
--- a/src/cutecoin/models/account/__init__.py
+++ b/src/cutecoin/models/account/__init__.py
@@ -111,6 +111,10 @@ class Account(object):
             issuance = ucoin.wrappers.transactions.Issue(self.keyFingerprint(), community.amendmentNumber(), coins, keyId=self.pgpKeyId)
             return issuance()
 
+    def transferCoins(self, node, recipient, coins, message):
+        transfer = ucoin.wrappers.transactions.Transfer(self.keyFingerprint(), recipient.fingerprint, coins, message, keyid=self.pgpKeyId, server=node.server, port=node.port)
+        return transfer()
+
     def jsonify(self):
         data = {'name' : self.name,
                 'pgpKeyId' : self.pgpKeyId,
diff --git a/src/cutecoin/models/coin/listModel.py b/src/cutecoin/models/coin/listModel.py
new file mode 100644
index 00000000..3b7d9735
--- /dev/null
+++ b/src/cutecoin/models/coin/listModel.py
@@ -0,0 +1,37 @@
+'''
+Created on 8 févr. 2014
+
+@author: inso
+'''
+
+from PyQt5.QtCore import QAbstractListModel, Qt
+
+class CoinsListModel(QAbstractListModel):
+    '''
+    A Qt abstract item model to display communities in a tree
+    '''
+    def __init__(self, coins, parent=None):
+        '''
+        Constructor
+        '''
+        super(CoinsListModel, self).__init__(parent)
+        self.coins = coins
+
+    def rowCount(self ,parent):
+        return len(self.coins)
+
+    def data(self,index,role):
+        if role == Qt.DisplayRole:
+            row=index.row()
+            value = str(self.coins[row].value())
+            return value
+
+    def flags(self,index):
+        return Qt.ItemIsSelectable | Qt.ItemIsEnabled
+
+    def toString(self):
+        coinsList = []
+        for c in self.coins:
+            coinsList.append(c.getId())
+        coinsStr = ",".join(coinsList)
+        return coinsStr
\ No newline at end of file
diff --git a/src/cutecoin/models/community/membersListModel.py b/src/cutecoin/models/community/membersListModel.py
index 70fdc0f4..b017ba32 100644
--- a/src/cutecoin/models/community/membersListModel.py
+++ b/src/cutecoin/models/community/membersListModel.py
@@ -19,7 +19,7 @@ class MembersListModel(QAbstractListModel):
         fingerprints = community.membersFingerprints()
         self.members = []
         for f in fingerprints:
-            self.members.append(Person.create(f, community))
+            self.members.append(Person.lookup(f, community))
 
     def rowCount(self ,parent):
         return len(self.members)
diff --git a/src/cutecoin/models/transaction/__init__.py b/src/cutecoin/models/transaction/__init__.py
index 6f5908b9..9f773c9a 100644
--- a/src/cutecoin/models/transaction/__init__.py
+++ b/src/cutecoin/models/transaction/__init__.py
@@ -42,11 +42,9 @@ class Transfer(Transaction):
     def __init__(self):
         super(Transfer).__init__()
 
-    def getReceivedText(self):
+    def getText(self):
         return str(self.value()) + " " + self.currency() + " from " + self.sender.name
 
-    def getSentText(self):
-        return str(self.value()) + " " + self.currency() + " from " + self.recipient.name
 
 
 class Issuance(Transaction):
diff --git a/src/cutecoin/models/transaction/factory.py b/src/cutecoin/models/transaction/factory.py
index e0f335fe..dbf6c527 100644
--- a/src/cutecoin/models/transaction/factory.py
+++ b/src/cutecoin/models/transaction/factory.py
@@ -22,7 +22,7 @@ def createTransaction(senderFingerprint, increment, community):
     if transaction != None:
         transaction.increment = increment
         transaction.community = community
-        transaction.sender = Person.create(senderFingerprint, community)
-        transaction.recipient = Person.create(ucoinTransaction['recipient'], community)
+        transaction.sender = Person.lookup(senderFingerprint, community)
+        transaction.recipient = Person.lookup(ucoinTransaction['recipient'], community)
 
     return transaction
diff --git a/src/cutecoin/models/transaction/receivedListModel.py b/src/cutecoin/models/transaction/receivedListModel.py
index dcfd8fcb..96628d00 100644
--- a/src/cutecoin/models/transaction/receivedListModel.py
+++ b/src/cutecoin/models/transaction/receivedListModel.py
@@ -26,7 +26,7 @@ class ReceivedListModel(QAbstractListModel):
 
         if role == Qt.DisplayRole:
             row=index.row()
-            value = self.transactions[row].getReceivedText()
+            value = self.transactions[row].getText()
             return value
 
     def flags(self,index):
diff --git a/src/cutecoin/models/transaction/sentListModel.py b/src/cutecoin/models/transaction/sentListModel.py
index 10cedd1e..52218ee1 100644
--- a/src/cutecoin/models/transaction/sentListModel.py
+++ b/src/cutecoin/models/transaction/sentListModel.py
@@ -26,7 +26,7 @@ class SentListModel(QAbstractListModel):
 
         if role == Qt.DisplayRole:
             row=index.row()
-            value = self.transactions[row].getSendText()
+            value = self.transactions[row].getText()
             return value
 
     def flags(self,index):
-- 
GitLab