diff --git a/src/sakia/app.py b/src/sakia/app.py index 57daa5bc887adb5cc127f2216ecbdd07c00585d8..dd3df9b39a5daada1c6f61b3a36244145ace2768 100644 --- a/src/sakia/app.py +++ b/src/sakia/app.py @@ -4,15 +4,13 @@ import logging import aiohttp from PyQt5.QtCore import QObject, pyqtSignal, QTranslator, QCoreApplication, QLocale -from aiohttp.connector import ProxyConnector - from . import __version__ from .options import SakiaOptions from sakia.data.connectors import BmaConnector from sakia.services import NetworkService, BlockchainService, IdentitiesService, \ SourcesServices, TransactionsService, DocumentsService from sakia.data.repositories import SakiaDatabase -from sakia.data.entities import Transaction, Connection, Identity +from sakia.data.entities import Transaction, Connection, Identity, Dividend from sakia.data.processors import BlockchainProcessor, NodesProcessor, IdentitiesProcessor, \ CertificationsProcessor, SourcesProcessor, TransactionsProcessor, ConnectionsProcessor, DividendsProcessor from sakia.data.files import AppDataFile, UserParametersFile @@ -43,6 +41,7 @@ class Application(QObject): :param sakia.services.DocumentsService documents_service: A service to broadcast documents """ + new_dividend = pyqtSignal(Dividend) new_transfer = pyqtSignal(Transaction) transaction_state_changed = pyqtSignal(Transaction) identity_changed = pyqtSignal(Identity) diff --git a/src/sakia/gui/navigation/txhistory/model.py b/src/sakia/gui/navigation/txhistory/model.py index 9dbf2ebee8108ae46b09c71825f4ec375fbd195a..f94c29cac72f9190c0e830063322feb91daad432 100644 --- a/src/sakia/gui/navigation/txhistory/model.py +++ b/src/sakia/gui/navigation/txhistory/model.py @@ -48,6 +48,7 @@ class TxHistoryModel(QObject): self._proxy.setSortRole(Qt.DisplayRole) self._model.init_transfers() self.app.new_transfer.connect(self._model.add_transfer) + self.app.new_dividend.connect(self._model.add_dividend) self.app.transaction_state_changed.connect(self._model.change_transfer) self.app.referential_changed.connect(self._model.modelReset) diff --git a/src/sakia/gui/navigation/txhistory/table_model.py b/src/sakia/gui/navigation/txhistory/table_model.py index 2ccfeab0e6c9722a60e146f26bf327349b6e9b7a..24a58567f4cf8cd9a967373ca804e68fe77e168b 100644 --- a/src/sakia/gui/navigation/txhistory/table_model.py +++ b/src/sakia/gui/navigation/txhistory/table_model.py @@ -212,23 +212,26 @@ class HistoryTableModel(QAbstractTableModel): def add_transfer(self, transfer): self.beginInsertRows(QModelIndex(), 0, 0) - if isinstance(transfer, Transaction): - if transfer.issuer == self.connection.pubkey: - self.transfers_data.append(self.data_sent(transfer)) - else: - self.transfers_data.append(self.data_received(transfer)) + if transfer.issuer == self.connection.pubkey: + self.transfers_data.append(self.data_sent(transfer)) + else: + self.transfers_data.append(self.data_received(transfer)) + self.endInsertRows() + + def add_dividend(self, dividend): + self.beginInsertRows(QModelIndex(), 0, 0) + self.transfers_data.append(self.data_dividend(dividend)) self.endInsertRows() def change_transfer(self, transfer): - if isinstance(transfer, Transaction): - for i, data in enumerate(self.transfers_data): - if data[self.columns_types.index('txhash')] == transfer.sha_hash: - if transfer.issuer == self.connection.pubkey: - self.transfers_data[self.columns_types.index('txhash')] = self.data_sent(transfer) - else: - self.transfers_data[self.columns_types.index('txhash')] = self.data_received(transfer) - self.dataChanged.emit(self.index(i, 0), self.index(i, len(self.columns_types))) - return + for i, data in enumerate(self.transfers_data): + if data[self.columns_types.index('txhash')] == transfer.sha_hash: + if transfer.issuer == self.connection.pubkey: + self.transfers_data[self.columns_types.index('txhash')] = self.data_sent(transfer) + else: + self.transfers_data[self.columns_types.index('txhash')] = self.data_received(transfer) + self.dataChanged.emit(self.index(i, 0), self.index(i, len(self.columns_types))) + return def data_received(self, transfer): """ diff --git a/src/sakia/gui/widgets/context_menu.py b/src/sakia/gui/widgets/context_menu.py index 3ceacbbb0fc6f98a423660477bc90c224497f640..13072b76350a4850b8d61ef94b097cdad6a3b421 100644 --- a/src/sakia/gui/widgets/context_menu.py +++ b/src/sakia/gui/widgets/context_menu.py @@ -127,7 +127,8 @@ class ContextMenu(QObject): UserInformationController.show_identity(self.parent(), self._app, self._connection.currency, identity) self.identity_information_loaded.emit(identity) else: - UserInformationController.open_dialog(self.parent(), self._app, self._connection.currency, identity) + UserInformationController.search_and_show_pubkey(self.parent(), self._app, self._connection.currency, + identity.pubkey) @asyncify diff --git a/src/sakia/services/blockchain.py b/src/sakia/services/blockchain.py index 222c9ea72b30b8e297f47e5b19bce643ba73aa9c..239b3a1757d9ae259f912b6ed974fd7188b9d7e1 100644 --- a/src/sakia/services/blockchain.py +++ b/src/sakia/services/blockchain.py @@ -42,13 +42,16 @@ class BlockchainService(QObject): blocks = await self._blockchain_processor.blocks(with_identities + with_money + [network_blockstamp.number], self.currency) identities = await self._identities_service.handle_new_blocks(blocks) - transfers_changed, new_transfers = self._transactions_service.handle_new_blocks(blocks) + transfers_changed, new_transfers, new_dividends = self._transactions_service.handle_new_blocks(blocks) self._blockchain_processor.handle_new_blocks(self.currency, blocks) self.app.db.commit() for tx in transfers_changed: self.app.transaction_state_changed.emit(tx) for tx in new_transfers: self.app.new_transfer.emit(tx) + for ud in new_dividends: + self.app.new_dividend.emit(ud) + for idty in identities: self.app.identity_changed.emit(idty) except (NoPeerAvailable, DuniterError) as e: diff --git a/src/sakia/services/transactions.py b/src/sakia/services/transactions.py index 768d10c5bbfad80098760ea15a1fc317498dc511..32f720c2869df2696c0a3daeb95ade91eb61a673 100644 --- a/src/sakia/services/transactions.py +++ b/src/sakia/services/transactions.py @@ -40,6 +40,7 @@ class TransactionsService(QObject): """ transfers_changed = [] new_transfers = [] + new_dividends = [] for tx in [t for t in self._transactions_processor.awaiting(self.currency)]: if self._transactions_processor.run_state_transitions(tx, block_doc): transfers_changed.append(tx) @@ -56,6 +57,7 @@ class TransactionsService(QObject): timestamp=block_doc.mediantime, amount=block_doc.ud, base=block_doc.unit_base) + new_dividends.append(dividend) self._dividends_processor.commit(dividend) for (i, tx_doc) in enumerate(new_transactions): @@ -66,7 +68,7 @@ class TransactionsService(QObject): else: logging.debug("Error during transfer parsing") - return transfers_changed, new_transfers + return transfers_changed, new_transfers, new_dividends def handle_new_blocks(self, blocks): """ @@ -77,13 +79,15 @@ class TransactionsService(QObject): self._logger.debug("Refresh transactions") transfers_changed = [] new_transfers = [] + new_dividends = [] txid = 0 for block in blocks: - changes, news = self._parse_block(block, txid) - txid += len(news) + changes, new_tx, new_ud = self._parse_block(block, txid) + txid += len(new_tx) transfers_changed += changes - new_transfers += news - return transfers_changed, new_transfers + new_transfers += new_tx + new_dividends += new_ud + return transfers_changed, new_transfers, new_dividends def transfers(self, pubkey): """