From 561dcbfa661202d151a5d126ba87d17c46793dd0 Mon Sep 17 00:00:00 2001 From: inso <insomniak.fr@gmaiL.com> Date: Wed, 10 May 2017 22:22:43 +0200 Subject: [PATCH] Fix crash with certifications expiring --- src/sakia/data/repositories/certifications.py | 2 +- src/sakia/gui/navigation/identity/controller.py | 1 + src/sakia/gui/navigation/identity/model.py | 2 +- src/sakia/gui/navigation/identity/table_model.py | 10 ++++++++++ src/sakia/gui/sub/user_information/controller.py | 5 +++-- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/sakia/data/repositories/certifications.py b/src/sakia/data/repositories/certifications.py index ad571c4a..2ae93580 100644 --- a/src/sakia/data/repositories/certifications.py +++ b/src/sakia/data/repositories/certifications.py @@ -90,7 +90,7 @@ class CertificationsRepo: """ request = """SELECT * FROM certifications WHERE currency=? AND (certifier=? or certified=?) - AND ((ts + ? < ?) or (written_on == 0 and ts + ? < ?)) + AND ((ts + ? < ?) or (written_on == -1 and ts + ? < ?)) """ c = self._conn.execute(request, (currency, pubkey, pubkey, sig_validity, current_ts, diff --git a/src/sakia/gui/navigation/identity/controller.py b/src/sakia/gui/navigation/identity/controller.py index 7ec8d197..cc796ac0 100644 --- a/src/sakia/gui/navigation/identity/controller.py +++ b/src/sakia/gui/navigation/identity/controller.py @@ -70,6 +70,7 @@ class IdentityController(QObject): if valid: menu = ContextMenu.from_data(self.view, self.model.app, None, (identity,)) menu.view_identity_in_wot.connect(self.view_in_wot) + menu.identity_information_loaded.connect(self.model.table_model.certifier_loaded) # Show the context menu. menu.qmenu.popup(QCursor.pos()) diff --git a/src/sakia/gui/navigation/identity/model.py b/src/sakia/gui/navigation/identity/model.py index bc7c6cfe..589e9576 100644 --- a/src/sakia/gui/navigation/identity/model.py +++ b/src/sakia/gui/navigation/identity/model.py @@ -52,9 +52,9 @@ class IdentityModel(QObject): async def refresh_identity_data(self): identity = self.identities_service.get_identity(self.connection.pubkey, self.connection.uid) - certified = self.identities_service.certifications_sent(self.connection.pubkey) identity = await self.identities_service.load_requirements(identity) certifiers = await self.identities_service.load_certifiers_of(identity) + certified = await self.identities_service.load_certified_by(identity) await self.identities_service.load_certs_in_lookup(identity, certifiers, certified) self.table_model.init_certifiers() diff --git a/src/sakia/gui/navigation/identity/table_model.py b/src/sakia/gui/navigation/identity/table_model.py index 63a8e81c..3297642c 100644 --- a/src/sakia/gui/navigation/identity/table_model.py +++ b/src/sakia/gui/navigation/identity/table_model.py @@ -1,4 +1,5 @@ from sakia.errors import NoPeerAvailable +from sakia.data.entities import Identity from sakia.data.processors import BlockchainProcessor from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \ QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP @@ -119,6 +120,8 @@ class CertifiersTableModel(QAbstractTableModel): parameters = self.blockchain_service.parameters() publication_date = certification.timestamp identity = self.identities_service.get_identity(certification.certifier) + if not identity: + identity = Identity(currency=certification.currency, pubkey=certification.certifier, uid="") written = certification.written_on >= 0 if written: expiration_date = publication_date + parameters.sig_validity @@ -126,6 +129,13 @@ class CertifiersTableModel(QAbstractTableModel): expiration_date = publication_date + parameters.sig_window return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity + def certifier_loaded(self, identity): + for i, idty in enumerate(self.identities_data): + if idty[CertifiersTableModel.columns_ids.index('identity')] == identity: + self._certifiers_data[i] = self._certifiers_data(identity) + self.dataChanged.emit(self.index(i, 0), self.index(i, len(CertifiersTableModel.columns_ids))) + return + def init_certifiers(self): """ Change the identities to display diff --git a/src/sakia/gui/sub/user_information/controller.py b/src/sakia/gui/sub/user_information/controller.py index a54de72e..4207ba73 100644 --- a/src/sakia/gui/sub/user_information/controller.py +++ b/src/sakia/gui/sub/user_information/controller.py @@ -1,6 +1,7 @@ from PyQt5.QtWidgets import QDialog, QTabWidget, QVBoxLayout from PyQt5.QtCore import QObject, pyqtSignal from sakia.decorators import asyncify +from sakia.data.entities import Identity from sakia.gui.widgets.dialogs import dialog_async_exec, QAsyncMessageBox from .model import UserInformationModel from .view import UserInformationView @@ -11,7 +12,7 @@ class UserInformationController(QObject): """ The homescreen view """ - identity_loaded = pyqtSignal() + identity_loaded = pyqtSignal(Identity) def __init__(self, parent, view, model): """ @@ -72,7 +73,7 @@ class UserInformationController(QObject): self.model.identity.membership_timestamp, self.model.mstime_remaining(), await self.model.nb_certs()) self.view.hide_busy() - self.identity_loaded.emit() + self.identity_loaded.emit(self.model.identity) except RuntimeError as e: # object can be deleted by Qt during asynchronous ops # we don't care of this error -- GitLab