diff --git a/src/sakia/gui/navigation/identity/table_model.py b/src/sakia/gui/navigation/identity/table_model.py index 3297642c8ee55e259341569461f61c72071ec559..b8a499b08834d9d808583ae725adf30f615524cf 100644 --- a/src/sakia/gui/navigation/identity/table_model.py +++ b/src/sakia/gui/navigation/identity/table_model.py @@ -1,5 +1,5 @@ from sakia.errors import NoPeerAvailable -from sakia.data.entities import Identity +from sakia.data.entities import Identity, Certification from sakia.data.processors import BlockchainProcessor from PyQt5.QtCore import QAbstractTableModel, QSortFilterProxyModel, Qt, \ QDateTime, QModelIndex, QLocale, QT_TRANSLATE_NOOP @@ -16,7 +16,7 @@ class CertifiersFilterProxyModel(QSortFilterProxyModel): def columnCount(self, parent): return len(CertifiersTableModel.columns_ids) - 2 - + def lessThan(self, left, right): """ Sort table by given column number. @@ -108,47 +108,56 @@ class CertifiersTableModel(QAbstractTableModel): self.connection = connection self.blockchain_service = blockchain_service self.identities_service = identities_service - self._certifiers_data = [] + self._certifiers_data = list() - def certifier_data(self, certification): + def init_certifiers(self): + """ + Init table with data to display + """ + self.beginResetModel() + certifications = self.identities_service.certifications_received(self.connection.pubkey) + logging.debug("Refresh {0} certifiers".format(len(certifications))) + certifiers_data = [] + for certifier in certifications: + certifiers_data.append(self.certifier_data(certifier)) + + self._certifiers_data = certifiers_data + self.endResetModel() + + def certifier_data(self, certification: Certification) -> tuple: """ Return the identity in the form a tuple to display - :param sakia.data.entities.Certification certification: The certification to get data from + :param Certification certification: The certification to get data from :return: The certification data in the form of a tuple :rtype: tuple """ 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 else: 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 + identity = self.identities_service.get_identity(certification.certifier) + if not identity: + identity = Identity(currency=certification.currency, pubkey=certification.certifier, uid="") - def init_certifiers(self): - """ - Change the identities to display + return identity.uid, identity.pubkey, publication_date, expiration_date, written, identity + + def certifier_loaded(self, identity: Identity): """ - self.beginResetModel() - certifications = self.identities_service.certifications_received(self.connection.pubkey) - logging.debug("Refresh {0} certifiers".format(len(certifications))) - certifiers_data = [] - for certifier in certifications: - certifiers_data.append(self.certifier_data(certifier)) + Update identity of certifier after closing information window - self._certifiers_data = certifiers_data - self.endResetModel() + :param Identity identity: Updated identity of the certifier + :return: + """ + for i, certifier_data in enumerate(self._certifiers_data): + if certifier_data[CertifiersTableModel.columns_ids.index('identity')] == identity: + self._certifiers_data[i] = update_certifier_data_from_identity(certifier_data, identity) + self.dataChanged.emit(self.index(i, 0), self.index(i, len(CertifiersTableModel.columns_ids))) + return def rowCount(self, parent): return len(self._certifiers_data) @@ -170,3 +179,24 @@ class CertifiersTableModel(QAbstractTableModel): def flags(self, index): return Qt.ItemIsSelectable | Qt.ItemIsEnabled + + +####################### +# STATIC FUNCTIONS +####################### + + +def update_certifier_data_from_identity(certifier_data: tuple, identity: Identity) -> tuple: + """ + Return certifier data from updated identity + + :param tuple certifier_data: Certifier data list + :param Identity identity: Identity of the certifier + :return tuple: + """ + return identity.uid, \ + identity.pubkey, \ + certifier_data[CertifiersTableModel.columns_ids.index('publication')], \ + certifier_data[CertifiersTableModel.columns_ids.index('expiration')], \ + certifier_data[CertifiersTableModel.columns_ids.index('written')], \ + identity diff --git a/src/sakia/services/identities.py b/src/sakia/services/identities.py index efa457ff6298d8a53eb08d3c408d84a54eca0838..57903a5a8080490a905cd3b78d7c0e935a6dcce8 100644 --- a/src/sakia/services/identities.py +++ b/src/sakia/services/identities.py @@ -75,7 +75,7 @@ class IdentitiesService(QObject): for c in connections: identities.append(self._identities_processor.get_identity(self.currency, c.pubkey)) return identities - + def is_identity_of_connection(self, identity): return identity.pubkey in self._connections_processor.pubkeys() @@ -485,7 +485,7 @@ class IdentitiesService(QObject): """ Get the list of certifications received by a given identity :param str pubkey: the pubkey - :rtype: List[sakia.data.entities.Certifications] + :rtype: list[Certification] """ return self._certs_processor.certifications_received(self.currency, pubkey) @@ -493,6 +493,6 @@ class IdentitiesService(QObject): """ Get the list of certifications received by a given identity :param str pubkey: the pubkey - :rtype: List[sakia.data.entities.Certifications] + :rtype: list[Certification] """ return self._certs_processor.certifications_sent(self.currency, pubkey)