diff --git a/src/cutecoin/core/transfer.py b/src/cutecoin/core/transfer.py index a8e13467f94c658537fe4a5f5700d8c98d7801ad..23587de0aff0f0bb865b13b4ce959ee42378e05e 100644 --- a/src/cutecoin/core/transfer.py +++ b/src/cutecoin/core/transfer.py @@ -28,14 +28,12 @@ class Transfer(object): self.metadata = metadata @classmethod - def initiate(cls, txdoc, block, time, amount): - receivers = [o.pubkey for o in txdoc.outputs - if o.pubkey != txdoc.issuers[0]] + def initiate(cls, txdoc, block, time, amount, issuer, receiver): return cls(txdoc, Transfer.TO_SEND, {'block': block, 'time': time, 'amount': amount, - 'issuer': txdoc.issuers[0], - 'receiver': receivers[0]}) + 'issuer': issuer, + 'receiver': receiver}) @classmethod def create_validated(cls, txdoc, metadata): @@ -43,11 +41,18 @@ class Transfer(object): @classmethod def load(cls, data): - txdoc = Transaction.from_signed_raw(data['txdoc']) + if data['state'] is Transfer.TO_SEND: + txdoc = None + else: + txdoc = Transaction.from_signed_raw(data['txdoc']) return cls(txdoc, data['state'], data['metadata']) def jsonify(self): - return {'txdoc': self.txdoc.signed_raw(), + if self.txdoc: + txraw = self.txdoc.signed_raw() + else: + txraw = None + return {'txdoc': txraw, 'state': self.state, 'metadata': self.metadata} diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py index e0ad577f161fe34bde0a91d8c32c7c772545756a..4d7b490b81c7ed4c2cee289667c121c7bbd72e4b 100644 --- a/src/cutecoin/core/wallet.py +++ b/src/cutecoin/core/wallet.py @@ -238,18 +238,8 @@ class Wallet(object): def send_money(self, salt, password, community, recipient, amount, message): - - result = self.tx_inputs(int(amount), community) - inputs = result[0] - self.caches[community.currency].available_sources = result[1] - logging.debug("Inputs : {0}".format(inputs)) - - outputs = self.tx_outputs(recipient, amount, inputs) - logging.debug("Outputs : {0}".format(outputs)) - tx = Transaction(PROTOCOL_VERSION, community.currency, - [self.pubkey], inputs, - outputs, message, None) - logging.debug("TX : {0}".format(tx.raw())) + time = community.get_block().time + block_number = community.current_blockid()['number'] key = None logging.debug("Key : {0} : {1}".format(salt, password)) if self.walletid == 0: @@ -258,15 +248,31 @@ class Wallet(object): key = SigningKey("{0}{1}".format(salt, self.walletid), password) logging.debug("Sender pubkey:{0}".format(key.pubkey)) - tx.sign([key]) - logging.debug("Transaction : {0}".format(tx.signed_raw())) - - block_number = community.current_blockid()['number'] - - time = community.get_block().time - transfer = Transfer.initiate(tx, block_number, time, amount) - transfer.send(community) - self.caches[community.currency]._transfers.append(transfer) + try: + result = self.tx_inputs(int(amount), community) + inputs = result[0] + self.caches[community.currency].available_sources = result[1] + logging.debug("Inputs : {0}".format(inputs)) + + outputs = self.tx_outputs(recipient, amount, inputs) + logging.debug("Outputs : {0}".format(outputs)) + tx = Transaction(PROTOCOL_VERSION, community.currency, + [self.pubkey], inputs, + outputs, message, None) + logging.debug("TX : {0}".format(tx.raw())) + + tx.sign([key]) + logging.debug("Transaction : {0}".format(tx.signed_raw())) + + transfer = Transfer.initiate(tx, block_number, time, amount, + key.pubkey, recipient) + transfer.send(community) + self.caches[community.currency]._transfers.append(transfer) + except NotEnoughMoneyError: + transfer = Transfer.initiate(None, block_number, time, amount, + key.pubkey, recipient) + self.caches[community.currency]._transfers.append(transfer) + raise def sources(self, community): data = community.request(bma.tx.Sources, diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py index 909ced559f80562d0e9d84c6372a4ff5e9b87e82..bf916d8d194c36a3000c132bd33b65a5e53de7f7 100644 --- a/src/cutecoin/gui/currency_tab.py +++ b/src/cutecoin/gui/currency_tab.py @@ -213,7 +213,7 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): pubkey_col) person = model.sourceModel().data(person_index, Qt.DisplayRole) transfer = model.sourceModel().transfers[source_index.row()] - if state_data == Transfer.REFUSED: + if state_data == Transfer.REFUSED or state_data == Transfer.TO_SEND: send_back = QAction("Send again", self) send_back.triggered.connect(self.send_again) send_back.setData(transfer) diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py index c0e2333e102e69db75b544149ed8a5e5ea60eaaf..da15100900e9d0dc1449829e1f39f52d59313f1f 100644 --- a/src/cutecoin/gui/transfer.py +++ b/src/cutecoin/gui/transfer.py @@ -72,10 +72,9 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): QMessageBox.Ok) return except NotEnoughMoneyError as e: - QMessageBox.critical(self, "Money transfer", - "You don't have enough money available in this block : \n{0}" - .format(e.message)) - return + QMessageBox.warning(self, "Money transfer", + """This transaction could not be sent on this block +Please try again later""") except NoPeerAvailable as e: QMessageBox.critical(self, "Money transfer", "Couldn't connect to network : {0}".format(e), diff --git a/src/cutecoin/models/txhistory.py b/src/cutecoin/models/txhistory.py index aaea42e836829f1c82cc36f3806a2e4c081a519e..24db0bc31181174bb67d5c31ebf8ed089dc5ef3b 100644 --- a/src/cutecoin/models/txhistory.py +++ b/src/cutecoin/models/txhistory.py @@ -87,6 +87,8 @@ class TxFilterProxyModel(QSortFilterProxyModel): font.setItalic(True) elif state_data == Transfer.REFUSED: font.setItalic(True) + elif state_data == Transfer.TO_SEND: + font.setBold(True) else: font.setItalic(False) return font @@ -94,6 +96,8 @@ class TxFilterProxyModel(QSortFilterProxyModel): if role == Qt.ForegroundRole: if state_data == Transfer.REFUSED: return QColor(Qt.red) + elif state_data == Transfer.TO_SEND: + return QColor(Qt.blue) return source_data @@ -129,7 +133,9 @@ class HistoryTableModel(QAbstractTableModel): def data_received(self, transfer): amount = transfer.metadata['amount'] - comment = transfer.txdoc.comment + comment = "" + if transfer.txdoc: + comment = transfer.txdoc.comment pubkey = transfer.metadata['issuer'] try: #sender = Person.lookup(pubkey, self.community).name @@ -148,8 +154,9 @@ class HistoryTableModel(QAbstractTableModel): def data_sent(self, transfer): amount = transfer.metadata['amount'] - - comment = transfer.txdoc.comment + comment = "" + if transfer.txdoc: + comment = transfer.txdoc.comment pubkey = transfer.metadata['receiver'] try: #receiver = Person.lookup(pubkey, self.community).name