diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index 2dab8bb0aba78212fc285547d3e498fa7eb4043e..25b02eff0278de19d28628dd014b562348e3bf22 100644 --- a/src/sakia/data/processors/blockchain.py +++ b/src/sakia/data/processors/blockchain.py @@ -47,6 +47,10 @@ class BlockchainProcessor: raise return 0, 0 + def adjusted_ts(self, currency, timestamp): + parameters = self.parameters(currency) + return timestamp + parameters.median_time_blocks/2 * parameters.avg_gen_time + async def timestamp(self, currency, block_number): try: block = await self._bma_connector.get(currency, bma.blockchain.block, {'number': block_number}) diff --git a/src/sakia/gui/navigation/identities/model.py b/src/sakia/gui/navigation/identities/model.py index e91df361dcbf30100f396403fee2819427ebd3ae..8f35b8d8d2b1b2cf4152297d69bc11c8ec0fc6c9 100644 --- a/src/sakia/gui/navigation/identities/model.py +++ b/src/sakia/gui/navigation/identities/model.py @@ -31,7 +31,7 @@ class IdentitiesModel(QObject): Instanciate the table model of the view """ identities_model = IdentitiesTableModel(self, self.blockchain_service, self.identities_service) - proxy = IdentitiesFilterProxyModel() + proxy = IdentitiesFilterProxyModel(self.app) proxy.setSourceModel(identities_model) self.table_model = proxy return self.table_model diff --git a/src/sakia/gui/navigation/identities/table_model.py b/src/sakia/gui/navigation/identities/table_model.py index 37cbae948976738205de3bc2ee3d534767a86584..719c305fa9d52ab9d655c9a7ebfbc8fa5ac09093 100644 --- a/src/sakia/gui/navigation/identities/table_model.py +++ b/src/sakia/gui/navigation/identities/table_model.py @@ -1,4 +1,5 @@ from sakia.errors import NoPeerAvailable +from sakia.data.processors import BlockchainProcessor from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \ QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP from PyQt5.QtGui import QColor, QIcon, QFont @@ -7,8 +8,9 @@ import asyncio class IdentitiesFilterProxyModel(QSortFilterProxyModel): - def __init__(self, parent=None): + def __init__(self, app, parent=None): super().__init__(parent) + self.blockchain_processor = BlockchainProcessor.instanciate(app) def columnCount(self, parent): return len(IdentitiesTableModel.columns_ids) - 1 @@ -22,7 +24,7 @@ class IdentitiesFilterProxyModel(QSortFilterProxyModel): right_data = source_model.data(right, Qt.DisplayRole) left_data = 0 if left_data is None else left_data right_data = 0 if right_data is None else right_data - return (left_data < right_data) + return left_data < right_data def data(self, index, role): source_index = self.mapToSource(index) @@ -55,18 +57,20 @@ class IdentitiesFilterProxyModel(QSortFilterProxyModel): if source_index.column() in (IdentitiesTableModel.columns_ids.index('renewed'), IdentitiesTableModel.columns_ids.index('expiration')): if source_data: + ts = self.blockchain_processor.adjusted_ts(self.connection.currency, source_data) return QLocale.toString( QLocale(), - QDateTime.fromTime_t(source_data).date(), + QDateTime.fromTime_t(ts).date(), QLocale.dateFormat(QLocale(), QLocale.ShortFormat) ) else: return "" if source_index.column() == IdentitiesTableModel.columns_ids.index('publication'): if source_data: + ts = self.blockchain_processor.adjusted_ts(self.connection.currency, source_data) return QLocale.toString( QLocale(), - QDateTime.fromTime_t(source_data), + QDateTime.fromTime_t(ts), QLocale.dateTimeFormat(QLocale(), QLocale.LongFormat) ) else: diff --git a/src/sakia/gui/navigation/informations/model.py b/src/sakia/gui/navigation/informations/model.py index 5f51e05114af12b187a33502fad55c06bcf63f56..2ba9cd9083be6ae926e11c878b3644fb624016a2 100644 --- a/src/sakia/gui/navigation/informations/model.py +++ b/src/sakia/gui/navigation/informations/model.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import QLocale, QDateTime, pyqtSignal, QObject from sakia.errors import NoPeerAvailable from sakia.constants import ROOT_SERVERS from sakia.money import Referentials +from sakia.data.processors import BlockchainProcessor from duniterpy.api import errors @@ -28,6 +29,7 @@ class InformationsModel(QObject): super().__init__(parent) self.app = app self.connection = connection + self.blockchain_processor = BlockchainProcessor.instanciate(app) self.blockchain_service = blockchain_service self.identities_service = identities_service self.sources_service = sources_service @@ -76,19 +78,29 @@ class InformationsModel(QObject): localized_data['mass'] = self.app.current_ref.instance(self.blockchain_service.current_mass(), self.connection.currency, self.app).localized(False, True) + ud_median_time = self.blockchain_service.last_ud_time() + ud_median_time = self.blockchain_processor.adjusted_ts(self.app.currency, ud_median_time) + localized_data['ud_median_time'] = QLocale.toString( QLocale(), - QDateTime.fromTime_t(self.blockchain_service.last_ud_time()), + QDateTime.fromTime_t(ud_median_time), QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) ) + + next_ud_median_time = self.blockchain_service.last_ud_time() + params.dt + next_ud_median_time = self.blockchain_processor.adjusted_ts(self.app.currency, next_ud_median_time) + localized_data['next_ud_median_time'] = QLocale.toString( QLocale(), - QDateTime.fromTime_t(self.blockchain_service.last_ud_time() + params.dt), + QDateTime.fromTime_t(next_ud_median_time), QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) ) + + next_ud_reeval = self.blockchain_service.next_ud_reeval() + next_ud_reeval = self.blockchain_processor.adjusted_ts(self.app.currency, next_ud_reeval) localized_data['next_ud_reeval'] = QLocale.toString( QLocale(), - QDateTime.fromTime_t(self.blockchain_service.next_ud_reeval()), + QDateTime.fromTime_t(next_ud_reeval), QLocale.dateTimeFormat(QLocale(), QLocale.ShortFormat) ) @@ -108,6 +120,7 @@ class InformationsModel(QObject): localized_data['actual_growth'] = (last_ud * math.pow(10, last_ud_base)) / ( previous_monetary_mass / members_count) + previous_ud_time = self.blockchain_processor.adjusted_ts(self.app.currency, previous_ud_time) localized_data['ud_median_time_minus_1'] = QLocale.toString( QLocale(), QDateTime.fromTime_t(previous_ud_time), diff --git a/src/sakia/gui/navigation/txhistory/table_model.py b/src/sakia/gui/navigation/txhistory/table_model.py index dee4afc0ced05590a2649d6f713ca48af8775fbd..171b9837fba7b23df00766f2b92507507f1fef9e 100644 --- a/src/sakia/gui/navigation/txhistory/table_model.py +++ b/src/sakia/gui/navigation/txhistory/table_model.py @@ -23,6 +23,7 @@ class TxFilterProxyModel(QSortFilterProxyModel): self.ts_from = ts_from self.ts_to = ts_to self.blockchain_service = blockchain_service + self.blockchain_processor = BlockchainProcessor.instanciate(blockchain_service.app) def set_period(self, ts_from, ts_to): """ @@ -95,9 +96,10 @@ class TxFilterProxyModel(QSortFilterProxyModel): if source_index.column() == model.columns_types.index('uid'): return "<p>" + source_data.replace('\n', "<br>") + "</p>" if source_index.column() == model.columns_types.index('date'): + ts = self.blockchain_processor.adjusted_ts(model.connection.currency, source_data) return QLocale.toString( QLocale(), - QDateTime.fromTime_t(source_data).date(), + QDateTime.fromTime_t(ts).date(), QLocale.dateFormat(QLocale(), QLocale.ShortFormat) ) if source_index.column() == model.columns_types.index('amount'): @@ -141,7 +143,8 @@ class TxFilterProxyModel(QSortFilterProxyModel): if role == Qt.ToolTipRole: if source_index.column() == model.columns_types.index('date'): - return QDateTime.fromTime_t(source_data).toString(Qt.SystemLocaleLongDate) + ts = self.blockchain_processor.adjusted_ts(model.connection.currency, source_data) + return QDateTime.fromTime_t(ts).toString(Qt.SystemLocaleLongDate) if state_data == Transaction.VALIDATED or state_data == Transaction.AWAITING: if current_confirmations >= MAX_CONFIRMATIONS: