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 00:22:17 +0300
committerPhilipp Hörist <forenjunkie@chello.at>2017-11-19 17:53:23 +0300
commitf2098e287b4133d7eb71aca968b9bc06e229bb18 (patch)
tree330f2d044f4e2f311dbea1b08c40f92c3ac2c646
parentac00cf8163f6615f94651e06c566884e06e07f5e (diff)
[omemo] Refactor get_affiliation_list()
- Dont depend on Gajim method, as it triggers Events that will be shown in the chat window
-rw-r--r--omemo/omemo_connection.py52
1 files changed, 35 insertions, 17 deletions
diff --git a/omemo/omemo_connection.py b/omemo/omemo_connection.py
index 4d8818f..f729c31 100644
--- a/omemo/omemo_connection.py
+++ b/omemo/omemo_connection.py
@@ -59,8 +59,6 @@ class OMEMOConnection:
self.gc_presence_received)
app.ged.register_event_handler('gc-config-changed-received', ged.PRECORE,
self.gc_config_changed_received)
- app.ged.register_event_handler('muc-admin-received', ged.PRECORE,
- self.room_memberlist_received)
def get_con(self):
return app.connections[self.account]
@@ -273,27 +271,40 @@ class OMEMOConnection:
msg.stanza.setBody(plaintext)
msg.encrypted = self.plugin.encryption_name
- def room_memberlist_received(self, event):
- if event.conn.name != self.account:
+ def room_memberlist_received(self, stanza):
+ if not nbxmpp.isResultNode(stanza):
+ log.error('Room %s Memberlist received: %s',
+ stanza.getFrom(), stanza.getError())
return
- log.debug('Room %s Memberlist received: %s',
- event.fjid, event.users_dict)
- room = event.fjid
- if room not in self.groupchat:
- self.groupchat[room] = {}
+ room_jid = stanza.getFrom().getStripped()
+ log.info('Room %s Memberlist received', room_jid)
+ if room_jid not in self.groupchat:
+ self.groupchat[room_jid] = {}
def jid_known(jid):
- for nick in self.groupchat[room]:
- if self.groupchat[room][nick] == jid:
+ for nick in self.groupchat[room_jid]:
+ if self.groupchat[room_jid][nick] == jid:
return True
return False
- for jid in event.users_dict:
+ items = stanza.getTag(
+ 'query', namespace=nbxmpp.NS_MUC_ADMIN).getTags('item')
+
+ for item in items:
+ if not item.has_attr('jid'):
+ continue
+ try:
+ jid = helpers.parse_jid(item.getAttr('jid'))
+ except helpers.InvalidFormat:
+ log.warning(
+ 'Invalid JID: %s, ignoring it', item.getAttr('jid'))
+ continue
+
if not jid_known(jid):
# Add JID with JID because we have no Nick yet
- self.groupchat[room][jid] = jid
- log.debug('JID Added: %s', jid)
+ self.groupchat[room_jid][jid] = jid
+ log.info('JID Added: %s', jid)
def gc_presence_received(self, event):
if event.conn.name != self.account:
@@ -345,9 +356,16 @@ class OMEMOConnection:
log.info('OMEMO capable Room found: %s', room)
- self.get_con().get_affiliation_list(room, 'owner')
- self.get_con().get_affiliation_list(room, 'admin')
- self.get_con().get_affiliation_list(room, 'member')
+ self.get_affiliation_list(room, 'owner')
+ self.get_affiliation_list(room, 'admin')
+ self.get_affiliation_list(room, 'member')
+
+ def get_affiliation_list(self, room_jid, affiliation):
+ iq = nbxmpp.Iq(typ='get', to=room_jid, queryNS=nbxmpp.NS_MUC_ADMIN)
+ item = iq.setQuery().setTag('item')
+ item.setAttr('affiliation', affiliation)
+ self.get_con().connection.SendAndCallForResponse(
+ iq, self.room_memberlist_received)
def gc_config_changed_received(self, event):
if event.conn.name != self.account: