From 2d39a1d5feb91ecdd81c5d3b2c6e709e716eab78 Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Mon, 27 Mar 2017 20:25:41 +0200 Subject: [PATCH] Adjusted timestamp display --- src/sakia/data/processors/blockchain.py | 4 ++++ src/sakia/gui/navigation/identities/model.py | 2 +- .../gui/navigation/identities/table_model.py | 12 ++++++++---- .../gui/navigation/informations/model.py | 19 ++++++++++++++++--- .../gui/navigation/txhistory/table_model.py | 7 +++++-- 5 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/sakia/data/processors/blockchain.py b/src/sakia/data/processors/blockchain.py index 2dab8bb0..25b02eff 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 e91df361..8f35b8d8 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 37cbae94..719c305f 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 5f51e051..2ba9cd90 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 dee4afc0..171b9837 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: -- GitLab