Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Hörist <forenjunkie@chello.at>2017-11-19 19:45:30 +0300
committerPhilipp Hörist <forenjunkie@chello.at>2017-11-20 01:16:33 +0300
commitd42fbc7dcf2264933239dd8f829cfd6a715a39d6 (patch)
tree44b2d9cf4267b0b55775614a407c253ec91eab63
parent0a4769a2f0849dbb2bb9e46d24b2e17d9cf949be (diff)
[omemo] Get devicelist from unknown contacts
As in contacts not in our roster and contacts we are not fully subscribed to.
-rw-r--r--omemo/omemo_connection.py22
1 files changed, 22 insertions, 0 deletions
diff --git a/omemo/omemo_connection.py b/omemo/omemo_connection.py
index 517e690..60d8603 100644
--- a/omemo/omemo_connection.py
+++ b/omemo/omemo_connection.py
@@ -51,6 +51,7 @@ class OMEMOConnection:
self.temp_groupchat = {}
self.gc_message = {}
self.query_for_bundles = []
+ self.query_for_devicelists = []
app.ged.register_event_handler('pep-received', ged.PRECORE,
self.handle_device_list_update)
@@ -350,6 +351,19 @@ class OMEMOConnection:
self.groupchat[room_jid][jid] = jid
log.info('JID Added: %s', jid)
+ if not self.is_contact_in_roster(jid):
+ # Query Devicelists from JIDs not in our Roster
+ log.info('%s not in Roster, query devicelist...', jid)
+ self.query_devicelist(jid)
+
+ def is_contact_in_roster(self, jid):
+ if jid == self.own_jid:
+ return True
+ contact = app.contacts.get_first_contact_from_jid(self.account, jid)
+ if contact is None:
+ return False
+ return contact.sub == 'both'
+
def gc_presence_received(self, event):
if event.conn.name != self.account:
return
@@ -393,6 +407,11 @@ class OMEMOConnection:
self.groupchat[room][nick] = jid
log.debug('JID Added: %s', jid)
+ if not self.is_contact_in_roster(jid):
+ # Query Devicelists from JIDs not in our Roster
+ log.info('%s not in Roster, query devicelist...', jid)
+ self.query_devicelist(jid)
+
if '100' in event.status_code: # non-anonymous Room (Full JID)
if room not in self.groupchat:
@@ -761,6 +780,8 @@ class OMEMOConnection:
def query_devicelist(self, jid=None, fetch_bundle=False):
""" Query own devicelist from the server """
+ if jid in self.query_for_devicelists:
+ return
if jid is None:
device_query = DevicelistQuery(self.own_jid)
log.info('%s => Querry own devicelist ...', self.account)
@@ -772,6 +793,7 @@ class OMEMOConnection:
self.send_with_callback(device_query,
self._handle_device_list_update,
data={'fetch_bundle': fetch_bundle})
+ self.query_for_devicelists.append(jid)
def publish_bundle(self):
""" Publish our bundle information to the PEP node """