From 382b245062db5c25d2f07ed7e19aeddb7420c5dd Mon Sep 17 00:00:00 2001
From: Yann Leboulanger <asterix@lagaule.org>
Date: Tue, 26 Sep 2006 11:54:03 +0000
Subject: [PATCH] don't allow privacy rules window if server doesn't support
 it. Fixes #253

---
 src/common/connection.py          | 9 +++++----
 src/common/connection_handlers.py | 6 ++++++
 src/roster_window.py              | 7 +++++--
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/common/connection.py b/src/common/connection.py
index f270cceef9..f008c289c0 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -404,8 +404,6 @@ class Connection(ConnectionHandlers):
 		con.RegisterDisconnectHandler(self._disconnectedReconnCB)
 		gajim.log.debug(_('Connected to server %s:%s with %s') % (self._current_host['host'],
 			self._current_host['port'], con_type))
-		# Ask metacontacts before roster
-		self.get_metacontacts()
 		self._register_handlers(con, con_type)
 		return True
 
@@ -591,8 +589,11 @@ class Connection(ConnectionHandlers):
 		if self.connection:
 			con.set_send_timeout(self.keepalives, self.send_keepalive)
 			self.connection.onreceive(None)
-			# Ask metacontacts before roster
-			self.get_metacontacts()
+			iq = common.xmpp.Iq('get', common.xmpp.NS_PRIVACY, xmlns = '')
+			id = self.connection.getAnID()
+			iq.setID(id)
+			self.awaiting_answers[id] = (PRIVACY_ARRIVED, )
+			self.connection.send(iq)
 
 	def change_status(self, show, msg, auto = False):
 		if not show in STATUS_LIST:
diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index c29cf539a1..866755533c 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -41,6 +41,7 @@ VCARD_PUBLISHED = 'vcard_published'
 VCARD_ARRIVED = 'vcard_arrived'
 AGENT_REMOVED = 'agent_removed'
 METACONTACTS_ARRIVED = 'metacontacts_arrived'
+PRIVACY_ARRIVED = 'privacy_arrived'
 HAS_IDLE = True
 try:
 	import common.idle as idle # when we launch gajim from sources
@@ -1004,6 +1005,11 @@ class ConnectionVcard:
 				self.dispatch('METACONTACTS', meta_list)
 			# We can now continue connection by requesting the roster
 			self.connection.initRoster()
+		elif self.awaiting_answers[id][0] == PRIVACY_ARRIVED:
+			if iq_obj.getType() != 'error':
+				self.privacy_rules_supported = True
+			# Ask metacontacts before roster
+			self.get_metacontacts()
 
 		del self.awaiting_answers[id]
 	
diff --git a/src/roster_window.py b/src/roster_window.py
index d3f28425be..bd9c68212e 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -691,8 +691,11 @@ class RosterWindow:
 		xml_console_menuitem.connect('activate',
 			self.on_xml_console_menuitem_activate, account)
 
-		privacy_lists_menuitem.connect('activate',
-			self.on_privacy_lists_menuitem_activate, account)
+		if gajim.connections[account] and gajim.connections[account].privacy_rules_supported:
+			privacy_lists_menuitem.connect('activate',
+				self.on_privacy_lists_menuitem_activate, account)
+		else:
+			privacy_lists_menuitem.set_sensitive(False)
 
 		send_server_message_menuitem.connect('activate',
 			self.on_send_server_message_menuitem_activate, account)
-- 
GitLab