Commit c04f0e97 authored by mathieui's avatar mathieui

Prevent the rooms from going “offline”

Add a blacklist inside the roster that contains the bare JIDs of all the
rooms ever joined in this session, so that no JID using this server will
ever be shown as getting “offline”.

If there is a cleaner way to do that (discriminating JIDs), I welcome it.
parent 58a41fe0
......@@ -658,12 +658,17 @@ class Core(object):
self.add_tab(form_tab, True)
def on_got_offline(self, presence):
"""
A JID got offline
"""
jid = presence['from']
logger.log_roster_change(jid.bare, 'got offline')
# If a resource got offline, display the message in the conversation with this
# precise resource.
if jid.resource:
self.add_information_message_to_conversation_tab(jid.full, '\x195}%s is \x191}offline' % (jid.full))
if jid.server in roster.blacklist:
return
self.add_information_message_to_conversation_tab(jid.bare, '\x195}%s is \x191}offline' % (jid.bare))
self.information('\x193}%s \x195}is \x191}offline' % (jid.bare), 'Roster')
if isinstance(self.current_tab(), tabs.RosterInfoTab):
......
......@@ -19,6 +19,10 @@ from sleekxmpp.xmlstream.stanzabase import JID
from sleekxmpp.exceptions import IqError
class Roster(object):
# MUC domains to blacklist from the contacts roster
blacklist = set()
def __init__(self):
"""
node: the RosterSingle from SleekXMPP
......@@ -103,7 +107,7 @@ class Roster(object):
def jids(self):
"""List of the contact JIDS"""
return [key for key in self.__node.keys() if key not in self.__mucs and key != self.jid]
return [key for key in self.__node.keys() if JID(key).server not in self.blacklist and key != self.jid]
def get_contacts(self):
"""
......
......@@ -1171,6 +1171,7 @@ class MucTab(ChatTab):
self.core.events.trigger('muc_join', presence, self)
if from_nick == self.own_nick:
self.joined = True
roster.blacklist.add(JID(from_room).server)
if self.get_name() in self.core.initial_joins:
self.core.initial_joins.remove(self.get_name())
self._state = 'normal'
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment