From 83b5f7ce7a09ec477ec7a91d75a56472322e481b Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Fri, 9 Oct 2015 19:47:30 +0200 Subject: [PATCH] Fix lifecycle problems --- src/cutecoin/core/app.py | 9 ++------- src/cutecoin/core/transfer.py | 19 +++++++++---------- src/cutecoin/core/txhistory.py | 15 +++++++-------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py index 4343d371..3bbc9833 100644 --- a/src/cutecoin/core/app.py +++ b/src/cutecoin/core/app.py @@ -252,13 +252,8 @@ class Application(QObject): self.accounts[account_name] = account for community in account.communities: - def refresh_tx(blocknumber, co=community): - account.refresh_transactions(self, co) - community.network.new_block_mined.connect(refresh_tx) - - def rollback_tx(blocknumber, co=community): - account.rollback_transaction(self, co) - community.network.new_block_mined.connect(rollback_tx) + community.network.new_block_mined.connect(lambda b, co=community: account.refresh_transactions(self, co)) + community.network.blockchain_rollback.connect(lambda b, co=community: account.rollback_transaction(self, co)) def load_cache(self, account): """ diff --git a/src/cutecoin/core/transfer.py b/src/cutecoin/core/transfer.py index 028e3082..a61dd398 100644 --- a/src/cutecoin/core/transfer.py +++ b/src/cutecoin/core/transfer.py @@ -72,27 +72,27 @@ class Transfer(QObject): self._table_states = { (TransferState.TO_SEND, (list, Block)): ( - (self._broadcast_success, self._wait, TransferState.AWAITING), - (self._broadcast_failure, None, TransferState.REFUSED), + (self._broadcast_success, lambda l, b: self._wait(b), TransferState.AWAITING), + (lambda l,b: self._broadcast_failure(b), None, TransferState.REFUSED), ), (TransferState.TO_SEND, ()): ((self._is_locally_created, self._drop, TransferState.DROPPED),), (TransferState.AWAITING, (bool, Block)): - ((self._found_in_block, self._be_validating, TransferState.VALIDATING),), + ((self._found_in_block, lambda r, b: self._be_validating(b), TransferState.VALIDATING),), (TransferState.AWAITING, (bool, Block, int, int)): ((self._not_found_in_blockchain, None, TransferState.REFUSED),), (TransferState.VALIDATING, (bool, Block, int)): ((self._reached_enough_validation, None, TransferState.VALIDATED),), (TransferState.VALIDATING, (bool, Block)): - ((self._rollback_and_removed, self._drop, TransferState.DROPPED),), + ((self._rollback_and_removed, lambda r, b: self._drop(), TransferState.DROPPED),), (TransferState.VALIDATED, (bool, Block)): ( - (self._rollback_still_present, self._be_validating, TransferState.VALIDATING), - (self._rollback_and_removed, self._drop, TransferState.DROPPED), - (self._rollback_and_local, self._wait, TransferState.AWAITING), + (self._rollback_still_present, lambda r, b: self._be_validating(b), TransferState.VALIDATING), + (self._rollback_and_removed, lambda r, b: self._drop(), TransferState.DROPPED), + (self._rollback_and_local, lambda r, b: self._wait(b), TransferState.AWAITING), ), (TransferState.REFUSED, ()): @@ -256,16 +256,15 @@ class Transfer(QObject): """ return self._locally_created - def _wait(self, ret_codes, current_block): + def _wait(self, current_block): """ Set the transfer as AWAITING validation. - :param list ret_codes: The responses return codes :param ucoinpy.documents.Block current_block: Current block of the main blockchain """ self.blockid = current_block.blockid self._metadata['time'] = current_block.mediantime - def _be_validating(self, rollback, block): + def _be_validating(self, block): """ Action when the transfer ins found in a block diff --git a/src/cutecoin/core/txhistory.py b/src/cutecoin/core/txhistory.py index 61bce67a..3caa532d 100644 --- a/src/cutecoin/core/txhistory.py +++ b/src/cutecoin/core/txhistory.py @@ -294,11 +294,11 @@ class TxHistory(): self.wallet.refresh_finished.emit(received_list) @asyncio.coroutine - def _check_block(self, block_number, community): + def _check_block(self, community, block_number): """ Parse a block :param cutecoin.core.Community community: The community - :param cutecoin.core.Transfer transfer: The transfer to check the presence + :param int block_number: The block to check for transfers """ block = None block_doc = None @@ -319,11 +319,10 @@ class TxHistory(): if '404' in str(e): block = None tries += 1 - if block_doc: - for transfer in [t for t in self._transfers - if t.state in (TransferState.VALIDATING, TransferState.VALIDATED) and - t.blockid.number == block_number]: - return not transfer.run_state_transitions((True, block_doc)) + for transfer in [t for t in self._transfers + if t.state in (TransferState.VALIDATING, TransferState.VALIDATED) and + t.blockid.number == block_number]: + return not transfer.run_state_transitions((True, block_doc)) else: return False @@ -383,7 +382,7 @@ class TxHistory(): def rollback(self, community, received_list): yield from self._wait_for_previous_refresh() # Then we start a new one - logging.debug("Starts a new refresh") + logging.debug("Starts a new rollback") task = asyncio.async(self._rollback(community)) self._running_refresh.append(task) -- GitLab