Skip to content
Snippets Groups Projects
Commit edcee327 authored by inso's avatar inso
Browse files

Cancel transactions

parent 9840b66d
No related branches found
No related tags found
No related merge requests found
...@@ -142,7 +142,7 @@ class BmaConnector: ...@@ -142,7 +142,7 @@ class BmaConnector:
responses = await asyncio.gather(*futures, return_exceptions=True) responses = await asyncio.gather(*futures, return_exceptions=True)
for r in responses: for r in responses:
if isinstance(r, errors.DuniterError): if isinstance(r, errors.DuniterError):
data_hash = hash(r) data_hash = hash(r.ucode)
elif isinstance(r, BaseException): elif isinstance(r, BaseException):
self._logger.debug("Exception in responses : " + str(r)) self._logger.debug("Exception in responses : " + str(r))
continue continue
......
...@@ -98,7 +98,7 @@ class TransactionsProcessor: ...@@ -98,7 +98,7 @@ class TransactionsProcessor:
""" """
transition_keys = [k for k in tx_lifecycle.states.keys() if k[0] == tx.state] transition_keys = [k for k in tx_lifecycle.states.keys() if k[0] == tx.state]
for key in transition_keys: for key in transition_keys:
if self._try_transition(tx, key, inputs): if self._try_transition(tx, key, *inputs):
self._repo.update(tx) self._repo.update(tx)
return True return True
return False return False
...@@ -120,6 +120,7 @@ class TransactionsProcessor: ...@@ -120,6 +120,7 @@ class TransactionsProcessor:
:param txdoc: A transaction duniterpy object :param txdoc: A transaction duniterpy object
:param currency: The community target of the transaction :param currency: The community target of the transaction
""" """
self._logger.debug(txdoc.signed_raw())
self._repo.insert(tx) self._repo.insert(tx)
responses = await self._bma_connector.broadcast(currency, bma.tx.process, req_args={'transaction': txdoc.signed_raw()}) responses = await self._bma_connector.broadcast(currency, bma.tx.process, req_args={'transaction': txdoc.signed_raw()})
result = (False, "") result = (False, "")
...@@ -132,7 +133,7 @@ class TransactionsProcessor: ...@@ -132,7 +133,7 @@ class TransactionsProcessor:
result = (False, (await r.text())) result = (False, (await r.text()))
else: else:
await r.text() await r.text()
self.run_state_transitions(tx, [r.status for r in responses]) self.run_state_transitions(tx, [r.status for r in responses if not isinstance(r, BaseException)])
return result, tx return result, tx
async def initialize_transactions(self, connection, log_stream): async def initialize_transactions(self, connection, log_stream):
......
...@@ -4,6 +4,7 @@ import logging ...@@ -4,6 +4,7 @@ import logging
from PyQt5.QtCore import Qt, QObject from PyQt5.QtCore import Qt, QObject
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
from sakia.data.processors import ConnectionsProcessor
from sakia.decorators import asyncify from sakia.decorators import asyncify
from sakia.gui.password_asker import PasswordAskerDialog from sakia.gui.password_asker import PasswordAskerDialog
from sakia.gui.sub.search_user.controller import SearchUserController from sakia.gui.sub.search_user.controller import SearchUserController
...@@ -79,26 +80,26 @@ class TransferController(QObject): ...@@ -79,26 +80,26 @@ class TransferController(QObject):
return await dialog.async_exec() return await dialog.async_exec()
@classmethod @classmethod
async def send_transfer_again(cls, parent, app, connection, resent_transfer): def send_transfer_again(cls, parent, app, connection, resent_transfer):
dialog = cls.create(parent, app) dialog = cls.create(parent, app)
dialog.view.combo_connections.setCurrentText(connection.title()) dialog.view.combo_connections.setCurrentText(connection.title())
dialog.view.edit_pubkey.setText(resent_transfer.receiver) dialog.view.edit_pubkey.setText(resent_transfer.receiver)
dialog.view.radio_pubkey.setChecked(True) dialog.view.radio_pubkey.setChecked(True)
dialog.refresh() dialog.refresh()
relative = await dialog.model.quant_to_rel(resent_transfer.metadata['amount']) relative = dialog.model.quant_to_rel(resent_transfer.amount)
dialog.view.set_spinboxes_parameters(1, resent_transfer.metadata['amount'], relative) dialog.view.set_spinboxes_parameters(1, resent_transfer.amount, relative)
dialog.view.change_relative_amount(relative) dialog.view.change_relative_amount(relative)
dialog.view.change_quantitative_amount(resent_transfer.metadata['amount']) dialog.view.change_quantitative_amount(resent_transfer.amount)
account = resent_transfer.metadata['issuer'] connections_processor = ConnectionsProcessor.instanciate(app)
wallet_index = [w.pubkey for w in app.current_account.wallets].index(account) wallet_index = connections_processor.connections().index(connection)
dialog.view.combo_connections.setCurrentIndex(wallet_index) dialog.view.combo_connections.setCurrentIndex(wallet_index)
dialog.view.edit_pubkey.setText(resent_transfer.metadata['receiver']) dialog.view.edit_pubkey.setText(resent_transfer.receiver)
dialog.view.radio_pubkey.setChecked(True) dialog.view.radio_pubkey.setChecked(True)
dialog.view.edit_message.setText(resent_transfer.metadata['comment']) dialog.view.edit_message.setText(resent_transfer.comment)
return await dialog.async_exec() return dialog.exec()
def set_search_user(self, search_user): def set_search_user(self, search_user):
""" """
......
...@@ -226,8 +226,13 @@ class HistoryTableModel(QAbstractTableModel): ...@@ -226,8 +226,13 @@ class HistoryTableModel(QAbstractTableModel):
def change_transfer(self, transfer): def change_transfer(self, transfer):
for i, data in enumerate(self.transfers_data): for i, data in enumerate(self.transfers_data):
if data[self.columns_types.index('txhash')] == transfer.sha_hash: if data[self.columns_types.index('txhash')] == transfer.sha_hash:
if transfer.issuer == self.connection.pubkey: if transfer.state == Transaction.DROPPED:
self.beginRemoveRows(QModelIndex(), i, i)
self.transfers_data.pop(i)
self.endRemoveRows()
elif transfer.issuer == self.connection.pubkey:
self.transfers_data[i] = self.data_sent(transfer) self.transfers_data[i] = self.data_sent(transfer)
self.dataChanged.emit(self.index(i, 0), self.index(i, len(self.columns_types)))
else: else:
self.transfers_data[i] = self.data_received(transfer) self.transfers_data[i] = self.data_received(transfer)
self.dataChanged.emit(self.index(i, 0), self.index(i, len(self.columns_types))) self.dataChanged.emit(self.index(i, 0), self.index(i, len(self.columns_types)))
...@@ -300,6 +305,7 @@ class HistoryTableModel(QAbstractTableModel): ...@@ -300,6 +305,7 @@ class HistoryTableModel(QAbstractTableModel):
self.transfers_data = [] self.transfers_data = []
transfers = self.transfers() transfers = self.transfers()
for transfer in transfers: for transfer in transfers:
if transfer.state != Transaction.DROPPED:
if transfer.issuer == self.connection.pubkey: if transfer.issuer == self.connection.pubkey:
self.transfers_data.append(self.data_sent(transfer)) self.transfers_data.append(self.data_sent(transfer))
else: else:
......
...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QMenu, QAction, QApplication, QMessageBox ...@@ -5,7 +5,7 @@ from PyQt5.QtWidgets import QMenu, QAction, QApplication, QMessageBox
from duniterpy.documents import Block from duniterpy.documents import Block
from sakia.data.entities import Identity, Transaction from sakia.data.entities import Identity, Transaction
from sakia.data.processors import BlockchainProcessor from sakia.data.processors import BlockchainProcessor, TransactionsProcessor
from sakia.decorators import asyncify from sakia.decorators import asyncify
from sakia.gui.dialogs.certification.controller import CertificationController from sakia.gui.dialogs.certification.controller import CertificationController
from sakia.gui.dialogs.transfer.controller import TransferController from sakia.gui.dialogs.transfer.controller import TransferController
...@@ -142,10 +142,8 @@ class ContextMenu(QObject): ...@@ -142,10 +142,8 @@ class ContextMenu(QObject):
async def certify_identity(self, identity): async def certify_identity(self, identity):
await CertificationController.certify_identity(None, self._app, self._connection, identity) await CertificationController.certify_identity(None, self._app, self._connection, identity)
@asyncify def send_again(self, transfer):
async def send_again(self, transfer): TransferController.send_transfer_again(None, self._app, self._connection, transfer)
await TransferController.send_transfer_again(None, self._app, self._connection, transfer)
self._app.refresh_transfers.emit()
def cancel_transfer(self, transfer): def cancel_transfer(self, transfer):
reply = QMessageBox.warning(self.qmenu, self.tr("Warning"), reply = QMessageBox.warning(self.qmenu, self.tr("Warning"),
...@@ -153,8 +151,10 @@ class ContextMenu(QObject): ...@@ -153,8 +151,10 @@ class ContextMenu(QObject):
This money transfer will be removed and not sent."""), This money transfer will be removed and not sent."""),
QMessageBox.Ok | QMessageBox.Cancel) QMessageBox.Ok | QMessageBox.Cancel)
if reply == QMessageBox.Ok: if reply == QMessageBox.Ok:
transfer.cancel() transactions_processor = TransactionsProcessor.instanciate(self._app)
self._app.refresh_transfers.emit() transactions_processor.cancel(transfer)
self._app.db.commit()
self._app.transaction_state_changed.emit(transfer)
def copy_transaction_to_clipboard(self, tx): def copy_transaction_to_clipboard(self, tx):
clipboard = QApplication.clipboard() clipboard = QApplication.clipboard()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment