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

Fix lifecycle problems

parent 152e77e6
No related branches found
No related tags found
No related merge requests found
...@@ -252,13 +252,8 @@ class Application(QObject): ...@@ -252,13 +252,8 @@ class Application(QObject):
self.accounts[account_name] = account self.accounts[account_name] = account
for community in account.communities: for community in account.communities:
def refresh_tx(blocknumber, co=community): community.network.new_block_mined.connect(lambda b, co=community: account.refresh_transactions(self, co))
account.refresh_transactions(self, co) community.network.blockchain_rollback.connect(lambda b, co=community: account.rollback_transaction(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)
def load_cache(self, account): def load_cache(self, account):
""" """
......
...@@ -72,27 +72,27 @@ class Transfer(QObject): ...@@ -72,27 +72,27 @@ class Transfer(QObject):
self._table_states = { self._table_states = {
(TransferState.TO_SEND, (list, Block)): (TransferState.TO_SEND, (list, Block)):
( (
(self._broadcast_success, self._wait, TransferState.AWAITING), (self._broadcast_success, lambda l, b: self._wait(b), TransferState.AWAITING),
(self._broadcast_failure, None, TransferState.REFUSED), (lambda l,b: self._broadcast_failure(b), None, TransferState.REFUSED),
), ),
(TransferState.TO_SEND, ()): (TransferState.TO_SEND, ()):
((self._is_locally_created, self._drop, TransferState.DROPPED),), ((self._is_locally_created, self._drop, TransferState.DROPPED),),
(TransferState.AWAITING, (bool, Block)): (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)): (TransferState.AWAITING, (bool, Block, int, int)):
((self._not_found_in_blockchain, None, TransferState.REFUSED),), ((self._not_found_in_blockchain, None, TransferState.REFUSED),),
(TransferState.VALIDATING, (bool, Block, int)): (TransferState.VALIDATING, (bool, Block, int)):
((self._reached_enough_validation, None, TransferState.VALIDATED),), ((self._reached_enough_validation, None, TransferState.VALIDATED),),
(TransferState.VALIDATING, (bool, Block)): (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)): (TransferState.VALIDATED, (bool, Block)):
( (
(self._rollback_still_present, self._be_validating, TransferState.VALIDATING), (self._rollback_still_present, lambda r, b: self._be_validating(b), TransferState.VALIDATING),
(self._rollback_and_removed, self._drop, TransferState.DROPPED), (self._rollback_and_removed, lambda r, b: self._drop(), TransferState.DROPPED),
(self._rollback_and_local, self._wait, TransferState.AWAITING), (self._rollback_and_local, lambda r, b: self._wait(b), TransferState.AWAITING),
), ),
(TransferState.REFUSED, ()): (TransferState.REFUSED, ()):
...@@ -256,16 +256,15 @@ class Transfer(QObject): ...@@ -256,16 +256,15 @@ class Transfer(QObject):
""" """
return self._locally_created return self._locally_created
def _wait(self, ret_codes, current_block): def _wait(self, current_block):
""" """
Set the transfer as AWAITING validation. 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 :param ucoinpy.documents.Block current_block: Current block of the main blockchain
""" """
self.blockid = current_block.blockid self.blockid = current_block.blockid
self._metadata['time'] = current_block.mediantime 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 Action when the transfer ins found in a block
......
...@@ -294,11 +294,11 @@ class TxHistory(): ...@@ -294,11 +294,11 @@ class TxHistory():
self.wallet.refresh_finished.emit(received_list) self.wallet.refresh_finished.emit(received_list)
@asyncio.coroutine @asyncio.coroutine
def _check_block(self, block_number, community): def _check_block(self, community, block_number):
""" """
Parse a block Parse a block
:param cutecoin.core.Community community: The community :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 = None
block_doc = None block_doc = None
...@@ -319,7 +319,6 @@ class TxHistory(): ...@@ -319,7 +319,6 @@ class TxHistory():
if '404' in str(e): if '404' in str(e):
block = None block = None
tries += 1 tries += 1
if block_doc:
for transfer in [t for t in self._transfers for transfer in [t for t in self._transfers
if t.state in (TransferState.VALIDATING, TransferState.VALIDATED) and if t.state in (TransferState.VALIDATING, TransferState.VALIDATED) and
t.blockid.number == block_number]: t.blockid.number == block_number]:
...@@ -383,7 +382,7 @@ class TxHistory(): ...@@ -383,7 +382,7 @@ class TxHistory():
def rollback(self, community, received_list): def rollback(self, community, received_list):
yield from self._wait_for_previous_refresh() yield from self._wait_for_previous_refresh()
# Then we start a new one # Then we start a new one
logging.debug("Starts a new refresh") logging.debug("Starts a new rollback")
task = asyncio.async(self._rollback(community)) task = asyncio.async(self._rollback(community))
self._running_refresh.append(task) self._running_refresh.append(task)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment