diff --git a/src/sakia/data/repositories/certifications.py b/src/sakia/data/repositories/certifications.py index ad571c4acc88bc35ef521b2eb2752299f5185fa4..2ae935801a543d7cc325b35b087d1ca255608c59 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 7ec8d197076265c627751ad0b6fe692ab38e90cb..cc796ac000486a033fb5f4ff7e467083dca304fa 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 bc7c6cfeb6ca51a8ffd58dda278877b246fd28d1..589e957673ab5456fbddb6e3fe30f1e7fa177b8e 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 63a8e81cf04cefcaaedc29c90896147752e86c4e..3297642c8ee55e259341569461f61c72071ec559 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 a54de72ea9752d862a1eb3a47640f67484bd02a9..4207ba7361517224563eb1405650bf70943ad5d3 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