diff --git a/src/cutecoin/core/app.py b/src/cutecoin/core/app.py index f081ebce08c04df507951c7d0f3fdda0d54bf3ff..8ff973b70f8014c27b1f301e6417d53b34f9fb93 100644 --- a/src/cutecoin/core/app.py +++ b/src/cutecoin/core/app.py @@ -57,7 +57,10 @@ class Application(object): self.accounts.remove(account) def change_current_account(self, account): + if self.current_account is not None: + self.save_cache(self.current_account) self.current_account = account + self.load_cache(account) def load(self): if not os.path.exists(config.parameters['home']): @@ -76,7 +79,17 @@ class Application(object): account_name, 'properties') json_data = open(account_path, 'r') data = json.load(json_data) - self.accounts.append(Account.load(data)) + account = Account.load(data) + self.accounts.append(account) + + def load_cache(self, account): + for wallet in account.wallets: + wallet_path = os.path.join(config.parameters['home'], + account.name, wallet.pubkey) + if os.path.exists(wallet_path): + json_data = open(wallet_path, 'r') + data = json.load(json_data) + wallet.cache.load_from_json(data) def save(self, account): with open(config.parameters['data'], 'w') as outfile: @@ -87,6 +100,13 @@ class Application(object): with open(account_path, 'w') as outfile: json.dump(account.jsonify(), outfile, indent=4, sort_keys=True) + def save_cache(self, account): + for wallet in account.wallets: + wallet_path = os.path.join(config.parameters['home'], + account.name, wallet.pubkey) + with open(wallet_path, 'w') as outfile: + json.dump(wallet.cache.jsonify(), outfile, indent=4, sort_keys=True) + def import_account(self, file, name): with tarfile.open(file, "r") as tar: path = os.path.join(config.parameters['home'], diff --git a/src/cutecoin/core/wallet.py b/src/cutecoin/core/wallet.py index 92f41a39907fb4df9c83fe468604a726497940f1..4aebe4998b39bc2dd8d839d2100c6495f44c8a11 100644 --- a/src/cutecoin/core/wallet.py +++ b/src/cutecoin/core/wallet.py @@ -20,15 +20,27 @@ class Cache(): self.tx_sent = [] self.tx_received = [] - def from_json(self, data): - pass + def load_from_json(self, data): + self.tx_received = [] + self.tx_sent = [] + data_received = data['received'] + for r in data_received: + self.tx_received.append(Transaction.from_signed_raw(r['raw'])) + data_sent = data['sent'] + for s in data_sent: + self.tx_sent.append(Transaction.from_signed_raw(s['raw'])) + self.latest_block = data['latest_block'] - def to_json(self): + def jsonify(self): data_received = [] for r in self.tx_received: - data_received.append({'amount': r.amount, - 'pubkey': r.pubkey}) - return {'received': data_received} + data_received.append({'raw': r.signed_raw()}) + data_sent = [] + for s in self.tx_sent: + data_sent.append({'raw': s.signed_raw()}) + return {'latest_block': self.latest_block, + 'received': data_received, + 'sent': data_sent} def latest_sent(self, community): self._refresh(community) diff --git a/src/cutecoin/gui/mainwindow.py b/src/cutecoin/gui/mainwindow.py index d41a105579fe7d5b7b29305a06b5d5f4cf577921..2ca1c3a13b50155e0401a0835a9836746e0baecf 100644 --- a/src/cutecoin/gui/mainwindow.py +++ b/src/cutecoin/gui/mainwindow.py @@ -38,8 +38,7 @@ class MainWindow(QMainWindow, Ui_MainWindow): dialog.exec_() def action_change_account(self, account_name): - self.app.current_account = self.app.get_account(account_name) - logging.info('Changing account to ' + self.app.current_account.name) + self.app.change_current_account(self.app.get_account(account_name)) self.refresh() def open_transfer_money_dialog(self): @@ -116,3 +115,8 @@ class MainWindow(QMainWindow, Ui_MainWindow): else: path = selected_file[0] + ".acc" self.app.export_account(path, self.app.current_account) + + def closeEvent(self, event): + self.app.save_cache(self.app.current_account) + super().closeEvent(event) +