[omemo] Refactor get_affiliation_list()
- Dont depend on Gajim method, as it triggers Events that will be shown in the chat window
This commit is contained in:
@@ -59,8 +59,6 @@ class OMEMOConnection:
|
|||||||
self.gc_presence_received)
|
self.gc_presence_received)
|
||||||
app.ged.register_event_handler('gc-config-changed-received', ged.PRECORE,
|
app.ged.register_event_handler('gc-config-changed-received', ged.PRECORE,
|
||||||
self.gc_config_changed_received)
|
self.gc_config_changed_received)
|
||||||
app.ged.register_event_handler('muc-admin-received', ged.PRECORE,
|
|
||||||
self.room_memberlist_received)
|
|
||||||
|
|
||||||
def get_con(self):
|
def get_con(self):
|
||||||
return app.connections[self.account]
|
return app.connections[self.account]
|
||||||
@@ -273,27 +271,40 @@ class OMEMOConnection:
|
|||||||
msg.stanza.setBody(plaintext)
|
msg.stanza.setBody(plaintext)
|
||||||
msg.encrypted = self.plugin.encryption_name
|
msg.encrypted = self.plugin.encryption_name
|
||||||
|
|
||||||
def room_memberlist_received(self, event):
|
def room_memberlist_received(self, stanza):
|
||||||
if event.conn.name != self.account:
|
if not nbxmpp.isResultNode(stanza):
|
||||||
|
log.error('Room %s Memberlist received: %s',
|
||||||
|
stanza.getFrom(), stanza.getError())
|
||||||
return
|
return
|
||||||
log.debug('Room %s Memberlist received: %s',
|
|
||||||
event.fjid, event.users_dict)
|
|
||||||
room = event.fjid
|
|
||||||
|
|
||||||
if room not in self.groupchat:
|
room_jid = stanza.getFrom().getStripped()
|
||||||
self.groupchat[room] = {}
|
log.info('Room %s Memberlist received', room_jid)
|
||||||
|
if room_jid not in self.groupchat:
|
||||||
|
self.groupchat[room_jid] = {}
|
||||||
|
|
||||||
def jid_known(jid):
|
def jid_known(jid):
|
||||||
for nick in self.groupchat[room]:
|
for nick in self.groupchat[room_jid]:
|
||||||
if self.groupchat[room][nick] == jid:
|
if self.groupchat[room_jid][nick] == jid:
|
||||||
return True
|
return True
|
||||||
return False
|
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):
|
if not jid_known(jid):
|
||||||
# Add JID with JID because we have no Nick yet
|
# Add JID with JID because we have no Nick yet
|
||||||
self.groupchat[room][jid] = jid
|
self.groupchat[room_jid][jid] = jid
|
||||||
log.debug('JID Added: %s', jid)
|
log.info('JID Added: %s', jid)
|
||||||
|
|
||||||
def gc_presence_received(self, event):
|
def gc_presence_received(self, event):
|
||||||
if event.conn.name != self.account:
|
if event.conn.name != self.account:
|
||||||
@@ -345,9 +356,16 @@ class OMEMOConnection:
|
|||||||
|
|
||||||
log.info('OMEMO capable Room found: %s', room)
|
log.info('OMEMO capable Room found: %s', room)
|
||||||
|
|
||||||
self.get_con().get_affiliation_list(room, 'owner')
|
self.get_affiliation_list(room, 'owner')
|
||||||
self.get_con().get_affiliation_list(room, 'admin')
|
self.get_affiliation_list(room, 'admin')
|
||||||
self.get_con().get_affiliation_list(room, 'member')
|
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):
|
def gc_config_changed_received(self, event):
|
||||||
if event.conn.name != self.account:
|
if event.conn.name != self.account:
|
||||||
|
|||||||
Reference in New Issue
Block a user