From 2367dda7c37dda4d1cceeba263c8d5fc47b2136e Mon Sep 17 00:00:00 2001
From: red-agent <hell.director@gmail.com>
Date: Tue, 13 Oct 2009 00:46:06 +0300
Subject: [PATCH] Fix for the autorejoin, to handle absent conferences

---
 src/common/connection_handlers.py | 22 +++++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)

diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index e6bb1deb77..0378c3ae49 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -2273,6 +2273,21 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
 				errmsg = prs.getErrorMsg()
 				errcode = prs.getErrorCode()
 				room_jid, nick = gajim.get_room_and_nick_from_fjid(who)
+
+				gc_control = gajim.interface.msg_win_mgr.get_gc_control(room_jid,
+						self.name)
+				
+				# gc_control might be in the other place if it's minimized. Note:
+				# this solution might have an impact on the performance.
+				if gc_control is None:
+					for control in gajim.interface.minimized_controls[self.name]:
+						# Using here this hack instead of isinstance() to avoid risk
+						# of cycle import when trying to import GroupchatControl from
+						# groupchat_control.py
+						if control.__class__.__name__ == 'GroupchatControl' and \
+								control.room_jid == room_jid:
+							gc_control = control
+
 				if errcode == '502':
 					# Internal Timeout:
 					self.dispatch('NOTIFY', (jid_stripped, 'error', errmsg, resource,
@@ -2290,9 +2305,10 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
 					self.dispatch('ERROR', (_('Unable to join group chat'),
 						_('You are banned from group chat %s.') % room_jid))
 				elif (errcode == '404') or (errcon == 'item-not-found'):
-					# group chat does not exist
-					self.dispatch('ERROR', (_('Unable to join group chat'),
-						_('Group chat %s does not exist.') % room_jid))
+					if gc_control is None or gc_control.autorejoin is None:
+						# group chat does not exist
+						self.dispatch('ERROR', (_('Unable to join group chat'),
+							_('Group chat %s does not exist.') % room_jid))
 				elif (errcode == '405') or (errcon == 'not-allowed'):
 					self.dispatch('ERROR', (_('Unable to join group chat'),
 						_('Group chat creation is restricted.')))
-- 
GitLab