summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormathieui <mathieui@mathieui.net>2012-05-16 02:01:50 +0200
committermathieui <mathieui@mathieui.net>2012-05-16 02:01:50 +0200
commitc04f0e97837dfc0c73defa3aaeada5c3848e2c59 (patch)
tree3b8cc6e6ef5ea416d71e60f77c2518f849692a09
parent58a41fe0652021481ebfa96fb3d238cddd93ca95 (diff)
downloadpoezio-c04f0e97837dfc0c73defa3aaeada5c3848e2c59.tar.gz
poezio-c04f0e97837dfc0c73defa3aaeada5c3848e2c59.tar.bz2
poezio-c04f0e97837dfc0c73defa3aaeada5c3848e2c59.tar.xz
poezio-c04f0e97837dfc0c73defa3aaeada5c3848e2c59.zip
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.
-rw-r--r--src/core.py5
-rw-r--r--src/roster.py6
-rw-r--r--src/tabs.py1
3 files changed, 11 insertions, 1 deletions
diff --git a/src/core.py b/src/core.py
index c2624584..a89e7b25 100644
--- a/src/core.py
+++ b/src/core.py
@@ -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):
diff --git a/src/roster.py b/src/roster.py
index 7f93c4b2..e1251024 100644
--- a/src/roster.py
+++ b/src/roster.py
@@ -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):
"""
diff --git a/src/tabs.py b/src/tabs.py
index f798df69..be8085e8 100644
--- a/src/tabs.py
+++ b/src/tabs.py
@@ -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'