From f18dd36065cead823d0ec22c68c42c340eeddda8 Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Fri, 8 May 2015 20:41:22 +0200 Subject: [PATCH] Handle unpublished uid --- res/ui/community_tab.ui | 7 +++++++ src/cutecoin/core/account.py | 11 +++++++++++ src/cutecoin/core/person.py | 24 +++++++++++++++++++++++ src/cutecoin/core/watching/persons.py | 6 ++++-- src/cutecoin/gui/community_tab.py | 21 ++++++++++++++++---- src/cutecoin/gui/process_cfg_community.py | 3 --- 6 files changed, 63 insertions(+), 9 deletions(-) diff --git a/res/ui/community_tab.ui b/res/ui/community_tab.ui index 9b000559..c7fa18c7 100644 --- a/res/ui/community_tab.ui +++ b/res/ui/community_tab.ui @@ -119,6 +119,13 @@ </property> </widget> </item> + <item> + <widget class="QPushButton" name="button_publish_uid"> + <property name="text"> + <string>Publish UID</string> + </property> + </widget> + </item> <item> <widget class="QPushButton" name="button_membership"> <property name="text"> diff --git a/src/cutecoin/core/account.py b/src/cutecoin/core/account.py index c0cf310b..c102d759 100644 --- a/src/cutecoin/core/account.py +++ b/src/cutecoin/core/account.py @@ -275,6 +275,16 @@ class Account(QObject): value += w.value(community) return value + def published_uid(self, community): + ''' + Check if this account identity is a member of a community + + :param community: The target community of this request + :return: True if the account is a member of the target community + ''' + self_person = Person.lookup(self.pubkey, community) + return self_person.published_uid(community) + def member_of(self, community): ''' Check if this account identity is a member of a community @@ -283,6 +293,7 @@ class Account(QObject): :return: True if the account is a member of the target community ''' self_person = Person.lookup(self.pubkey, community) + logging.debug("Self person : {0}".format(self_person.uid)) return self_person.is_member(community) def send_selfcert(self, password, community): diff --git a/src/cutecoin/core/person.py b/src/cutecoin/core/person.py index 4e66d309..4a45013f 100644 --- a/src/cutecoin/core/person.py +++ b/src/cutecoin/core/person.py @@ -259,6 +259,30 @@ class Person(object): return membership_data + @cached + def published_uid(self, community): + try: + data = community.request(bma.wot.Lookup, + req_args={'search': self.pubkey}, + cached=cached) + except ValueError as e: + if '404' in str(e): + return False + + timestamp = 0 + + for result in data['results']: + if result["pubkey"] == self.pubkey: + uids = result['uids'] + person_uid = "" + for uid_data in uids: + if uid_data["meta"]["timestamp"] > timestamp: + timestamp = uid_data["meta"]["timestamp"] + person_uid = uid_data["uid"] + if person_uid == self.uid: + return True + return False + @cached def is_member(self, community): ''' diff --git a/src/cutecoin/core/watching/persons.py b/src/cutecoin/core/watching/persons.py index 5d8214cf..6311acd5 100644 --- a/src/cutecoin/core/watching/persons.py +++ b/src/cutecoin/core/watching/persons.py @@ -24,12 +24,14 @@ class PersonsWatcher(Watcher): def watch(self): logging.debug("Watching persons") - for p in Person._instances.values(): + instances = Person._instances.copy() + for p in instances.values(): if not self.exiting: for func in [Person.membership, Person.is_member, Person.certifiers_of, - Person.certified_by]: + Person.certified_by, + Person.published_uid]: if not self.exiting: if p.reload(func, self.community): logging.debug("Change detected on {0} about {1}".format(p.pubkey, diff --git a/src/cutecoin/gui/community_tab.py b/src/cutecoin/gui/community_tab.py index ea57c499..2def3e5d 100644 --- a/src/cutecoin/gui/community_tab.py +++ b/src/cutecoin/gui/community_tab.py @@ -52,11 +52,24 @@ class CommunityTabWidget(QWidget, Ui_CommunityTabWidget): self.table_identities.customContextMenuRequested.connect(self.identity_context_menu) self.table_identities.sortByColumn(0, Qt.AscendingOrder) - if self.account.member_of(self.community): - self.button_membership.setText("Renew membership") - else: - self.button_membership.setText("Send membership demand") + try: + if self.account.published_uid(self.community): + if self.account.member_of(self.community): + self.button_membership.setText("Renew membership") + self.button_publish_uid.hide() + self.button_leaving.show() + else: + self.button_membership.setText("Send membership demand") + self.button_leaving.hide() + self.button_publish_uid.hide() + else: + self.button_membership.hide() + self.button_leaving.hide() + self.button_publish_uid.show() + except PersonNotFoundError: + self.button_membership.hide() self.button_leaving.hide() + self.button_publish_uid.show() self.wot_tab = WotTabWidget(app, account, community, password_asker, self) self.tabs_information.addTab(self.wot_tab, QIcon(':/icons/wot_icon'), "WoT") diff --git a/src/cutecoin/gui/process_cfg_community.py b/src/cutecoin/gui/process_cfg_community.py index 4b9c6707..037334f8 100644 --- a/src/cutecoin/gui/process_cfg_community.py +++ b/src/cutecoin/gui/process_cfg_community.py @@ -217,9 +217,6 @@ Would you like to publish the key ?""").format(self.account.pubkey)) "{0}".format(e), QMessageBox.Ok) - else: - return - if self.community not in self.account.communities: self.account.add_community(self.community) super().accept() -- GitLab