From 1d4e670d0d916d4d35b9645b623df5b17387c99b Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Fri, 2 Jan 2015 15:36:22 +0100 Subject: [PATCH] Fixing caching bug Fixing caching bug with blocks being refreshed only every 5 minutes, even if the blocks changed. --- src/cutecoin/core/community.py | 7 ++++--- src/cutecoin/core/wallet.py | 7 +++---- src/cutecoin/gui/certification.py | 2 ++ src/cutecoin/gui/currency_tab.py | 26 +++++++++++++++++++------- src/cutecoin/gui/mainwindow.py | 3 ++- src/cutecoin/gui/transfer.py | 2 ++ 6 files changed, 32 insertions(+), 15 deletions(-) diff --git a/src/cutecoin/core/community.py b/src/cutecoin/core/community.py index 1f83bb47..ed478ee6 100644 --- a/src/cutecoin/core/community.py +++ b/src/cutecoin/core/community.py @@ -112,11 +112,12 @@ class Community(object): block = bma.blockchain.Current(e.conn_handler()).get() self.last_block = {"request_ts": time.time(), "number": block['number']} - elif self.last_block["request_ts"] < time.time() - 300: + elif self.last_block["request_ts"] + 60 < time.time(): + logging.debug("{0} > {1}".format(self.last_block["request_ts"] + 60, time.time())) + self.last_block["request_ts"] = time.time() block = bma.blockchain.Current(e.conn_handler()).get() if block['number'] > self.last_block['number']: - self.last_block = {"request_ts": time.time(), - "number": block['number']} + self.last_block["number"] = block['number'] self.requests_cache = {} cache_key = (hash(request), diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py index 21d10fb9..888f0e42 100644 --- a/src/cutecoin/core/wallet.py +++ b/src/cutecoin/core/wallet.py @@ -59,23 +59,22 @@ class Cache(): 'awaiting': data_awaiting} def latest_sent(self, community): - self._refresh(community) return self.tx_sent def awaiting(self, community): - self._refresh(community) return self.awaiting_tx def latest_received(self, community): - self._refresh(community) return self.tx_received - def _refresh(self, community): + def refresh(self, community): current_block = community.request(bma.blockchain.Current) with_tx = community.request(bma.blockchain.TX) # We parse only blocks with transactions parsed_blocks = reversed(range(self.latest_block + 1, current_block['number'] + 1)) + logging.debug("Refresh from {0} to {1}".format(self.latest_block + 1, + current_block['number'] + 1)) parsed_blocks = [n for n in parsed_blocks if n in with_tx['result']['blocks']] diff --git a/src/cutecoin/gui/certification.py b/src/cutecoin/gui/certification.py index 4a3f4c3c..6d87765d 100644 --- a/src/cutecoin/gui/certification.py +++ b/src/cutecoin/gui/certification.py @@ -40,6 +40,8 @@ class CertificationDialog(QDialog, Ui_CertificationDialog): pubkey = self.edit_pubkey.text() password = self.password_asker.ask() + if password == "": + return try: self.certifier.certify(password, self.community, pubkey) diff --git a/src/cutecoin/gui/currency_tab.py b/src/cutecoin/gui/currency_tab.py index 26533ba8..23c904fe 100644 --- a/src/cutecoin/gui/currency_tab.py +++ b/src/cutecoin/gui/currency_tab.py @@ -20,8 +20,9 @@ from ..models.wallet import WalletListModel class BlockchainInspector(QThread): - def __init__(self, community): + def __init__(self, account, community): QThread.__init__(self) + self.account = account self.community = community self.exiting = False self.last_block = self.community.request(bma.blockchain.Current)['number'] @@ -31,10 +32,16 @@ class BlockchainInspector(QThread): self.wait() def run(self): + logging.debug("Runs.") while not self.exiting: + logging.debug("Sleep.") time.sleep(10) current_block = self.community.request(bma.blockchain.Current) + logging.debug("Current block... {0}".format(current_block['number'])) if self.last_block != current_block['number']: + for w in self.account.wallets: + w.cache.refresh(self.community) + logging.debug("New block, {0} mined in {1}".format(self.last_block, self.community.currency)) self.new_block_mined.emit(current_block['number']) @@ -61,9 +68,10 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): self.tab_community = CommunityTabWidget(self.app.current_account, self.community, self.password_asker) - bc_inspector = BlockchainInspector(community) - bc_inspector.new_block_mined.connect(self.refresh_block) - bc_inspector.start() + self.bc_inspector = BlockchainInspector(self.app.current_account, + community) + self.bc_inspector.new_block_mined.connect(self.refresh_block) + self.bc_inspector.start() def refresh(self): if self.app.current_account is None: @@ -77,12 +85,14 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): self.list_transactions_received.setModel( ReceivedListModel(self.app.current_account, self.community)) self.tab_community = CommunityTabWidget(self.app.current_account, - self.community, self.password_asker) + self.community, + self.password_asker) self.tabs_account.addTab(self.tab_community, QIcon(':/icons/community_icon'), "Community") block_number = self.community.request(bma.blockchain.Current)['number'] - self.label_current_block.setText("Current Block : {0}".format(block_number)) + self.label_current_block.setText("Current Block : {0}" + .format(block_number)) @pyqtSlot(int) def refresh_block(self, block_number): @@ -108,7 +118,9 @@ class CurrencyTabWidget(QWidget, Ui_CurrencyTabWidget): QModelIndex(), QModelIndex(), []) - self.label_current_block.setText("Current Block : {0}".format(block_number)) + + self.label_current_block.setText("Current Block : {0}" + .format(block_number)) def refresh_wallets(self): wallets_list_model = WalletsListModel(self.app.current_account, diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py index f1f97a25..7f0673d9 100644 --- a/src/cutecoin/gui/mainwindow.py +++ b/src/cutecoin/gui/mainwindow.py @@ -100,7 +100,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): self.action_configure_parameters.setEnabled(False) self.action_set_as_default.setEnabled(False) else: - self.action_set_as_default.setEnabled(self.app.current_account.name != self.app.default_account) + self.action_set_as_default.setEnabled(self.app.current_account.name + != self.app.default_account) self.password_asker = PasswordAskerDialog(self.app.current_account) self.menu_contacts.setEnabled(True) self.action_configure_parameters.setEnabled(True) diff --git a/src/cutecoin/gui/transfer.py b/src/cutecoin/gui/transfer.py index 1c952f94..146aa472 100644 --- a/src/cutecoin/gui/transfer.py +++ b/src/cutecoin/gui/transfer.py @@ -51,6 +51,8 @@ class TransferMoneyDialog(QDialog, Ui_TransferMoneyDialog): amount = self.spinbox_amount.value() password = self.password_asker.ask() + if password == "": + return try: self.wallet.send_money(self.sender.salt, password, self.community, -- GitLab