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