diff --git a/data/glade/join_groupchat_window.glade b/data/glade/join_groupchat_window.glade
index e6960a86a..618dff121 100644
--- a/data/glade/join_groupchat_window.glade
+++ b/data/glade/join_groupchat_window.glade
@@ -17,6 +17,7 @@
GDK_WINDOW_TYPE_HINT_NORMAL
GDK_GRAVITY_NORTH_WEST
True
+ False
@@ -29,58 +30,14 @@
True
- 5
+ 4
2
False
6
12
-
- True
- True
- True
- False
- 0
-
- True
- *
- True
-
-
- 1
- 2
- 4
- 5
-
-
-
-
-
-
- True
- True
- True
- True
- 0
-
- True
- *
- True
-
-
-
-
- 1
- 2
- 3
- 4
-
-
-
-
-
-
+
True
True
True
@@ -91,7 +48,6 @@
True
*
True
-
@@ -125,62 +81,6 @@
-
-
- True
- Password:
- False
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
-
-
- 0
- 1
- 4
- 5
- fill
-
-
-
-
-
-
- True
- Server:
- False
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
-
-
- 0
- 1
- 3
- 4
- fill
-
-
-
-
True
@@ -281,6 +181,55 @@
fill
+
+
+
+ True
+ Password:
+ False
+ False
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ 0
+ 1
+ 3
+ 4
+ fill
+
+
+
+
+
+
+ True
+ True
+ True
+ False
+ 0
+
+ True
+ *
+ True
+
+
+ 1
+ 2
+ 3
+ 4
+
+
+
0
diff --git a/src/common/connection.py b/src/common/connection.py
index 783fa893d..2d0feea4d 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -969,14 +969,15 @@ class Connection(ConnectionHandlers):
p = self.add_sha(p, ptype != 'unavailable')
self.connection.send(p)
- def join_gc(self, nick, room, server, password):
+ def join_gc(self, nick, room_jid, password):
+ # FIXME: This room JID needs to be normalized; see #1364
if not self.connection:
return
show = helpers.get_xmpp_show(STATUS_LIST[self.connected])
if show == 'invisible':
# Never join a room when invisible
return
- p = common.xmpp.Presence(to = '%s@%s/%s' % (room, server, nick),
+ p = common.xmpp.Presence(to = '%s/%s' % (room_jid, nick),
show = show, status = self.status)
if gajim.config.get('send_sha_in_gc_presence'):
p = self.add_sha(p)
@@ -985,12 +986,11 @@ class Connection(ConnectionHandlers):
t.setTagData('password', password)
self.connection.send(p)
#last date/time in history to avoid duplicate
- # FIXME: This JID needs to be normalized; see #1364
- jid='%s@%s' % (room, server)
- last_log = gajim.logger.get_last_date_that_has_logs(jid, is_room = True)
+ last_log = gajim.logger.get_last_date_that_has_logs(room_jid,
+ is_room = True)
if last_log is None:
last_log = 0
- self.last_history_line[jid]= last_log
+ self.last_history_line[room_jid]= last_log
def send_gc_message(self, jid, msg, xhtml = None):
if not self.connection:
diff --git a/src/common/gajim.py b/src/common/gajim.py
index 35e877dc6..e9ef78225 100644
--- a/src/common/gajim.py
+++ b/src/common/gajim.py
@@ -137,10 +137,10 @@ def get_nick_from_fjid(jid):
# gaim@conference.jabber.no/nick/nick-continued
return jid.split('/', 1)[1]
-def get_room_name_and_server_from_room_jid(jid):
- room_name = get_nick_from_jid(jid)
+def get_name_and_server_from_jid(jid):
+ name = get_nick_from_jid(jid)
server = get_server_from_jid(jid)
- return room_name, server
+ return name, server
def get_room_and_nick_from_fjid(jid):
# fake jid is the jid for a contact in a room
diff --git a/src/config.py b/src/config.py
index 477c54a85..c7cb94554 100644
--- a/src/config.py
+++ b/src/config.py
@@ -2846,7 +2846,7 @@ class AccountCreationWizardWindow:
self.account = server + str(i)
i += 1
- username, server = gajim.get_room_name_and_server_from_room_jid(jid)
+ username, server = gajim.get_name_and_server_from_jid(jid)
self.save_account(username, server, savepass, password)
self.cancel_button.hide()
self.back_button.hide()
diff --git a/src/conversation_textview.py b/src/conversation_textview.py
index 18e907a6f..107605756 100644
--- a/src/conversation_textview.py
+++ b/src/conversation_textview.py
@@ -430,17 +430,15 @@ class ConversationTextview:
def on_start_chat_activate(self, widget, jid):
gajim.interface.roster.new_chat_from_jid(self.account, jid)
- def on_join_group_chat_menuitem_activate(self, widget, jid):
- room, server = jid.split('@')
+ def on_join_group_chat_menuitem_activate(self, widget, room_jid):
if gajim.interface.instances[self.account].has_key('join_gc'):
instance = gajim.interface.instances[self.account]['join_gc']
- instance.xml.get_widget('server_entry').set_text(server)
- instance.xml.get_widget('room_entry').set_text(room)
+ instance.xml.get_widget('room_jid_entry').set_text(room_jid)
gajim.interface.instances[self.account]['join_gc'].window.present()
else:
try:
gajim.interface.instances[self.account]['join_gc'] = \
- dialogs.JoinGroupchatWindow(self.account, server, room)
+ dialogs.JoinGroupchatWindow(self.account, room_jid)
except RuntimeError:
pass
diff --git a/src/dialogs.py b/src/dialogs.py
index 9ed496cd5..00a3b643d 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -511,7 +511,7 @@ _('Please fill in the data of the contact you want to add in account %s') %accou
if type_ == 'jabber':
self.uid_entry.set_text(jid)
else:
- uid, transport = gajim.get_room_name_and_server_from_room_jid(jid)
+ uid, transport = gajim.get_name_and_server_from_jid(jid)
self.uid_entry.set_text(uid.replace('%', '@', 1))
#set protocol_combobox
model = self.protocol_combobox.get_model()
@@ -1081,15 +1081,14 @@ class SubscriptionRequestWindow:
class JoinGroupchatWindow:
- def __init__(self, account, server = '', room = '', nick = '',
- automatic = False):
+ def __init__(self, account, room_jid = '', nick = '', automatic = False):
'''automatic is a dict like {'invities': []}
If automatic is not empty, this means room must be automaticaly configured
and when done, invities must be automatically invited'''
- if server and room:
- jid = room + '@' + server
- if jid in gajim.gc_connected[account] and gajim.gc_connected[account][jid]:
- ErrorDialog(_('You are already in room %s') % jid)
+ if room_jid != '':
+ if room_jid in gajim.gc_connected[account] and\
+ gajim.gc_connected[account][room_jid]:
+ ErrorDialog(_('You are already in room %s') % room_jid)
raise RuntimeError, 'You are already in this room'
self.account = account
self.automatic = automatic
@@ -1097,16 +1096,18 @@ class JoinGroupchatWindow:
nick = gajim.nicks[self.account]
if gajim.connections[account].connected < 2:
ErrorDialog(_('You are not connected to the server'),
-_('You can not join a group chat unless you are connected.'))
+ _('You can not join a group chat unless you are connected.'))
raise RuntimeError, 'You must be connected to join a groupchat'
self._empty_required_widgets = []
self.xml = gtkgui_helpers.get_glade('join_groupchat_window.glade')
self.window = self.xml.get_widget('join_groupchat_window')
- self.xml.get_widget('server_entry').set_text(server)
- self.xml.get_widget('room_entry').set_text(room)
- self.xml.get_widget('nickname_entry').set_text(nick)
+ self._room_jid_entry = self.xml.get_widget('room_jid_entry')
+ self._nickname_entry = self.xml.get_widget('nickname_entry')
+
+ self._room_jid_entry.set_text(room_jid)
+ self._nickname_entry.set_text(nick)
self.xml.signal_autoconnect(self)
gajim.interface.instances[account]['join_gc'] = self #now add us to open windows
if len(gajim.connections) > 1:
@@ -1126,18 +1127,13 @@ _('You can not join a group chat unless you are connected.'))
self.recently_combobox.append_text(g)
if len(self.recently_groupchat) == 0:
self.recently_combobox.set_sensitive(False)
- elif server == '' and room == '':
+ elif room_jid == '':
self.recently_combobox.set_active(0)
- self.xml.get_widget('room_entry').select_region(0, -1)
- elif room and server:
+ self._room_jid_entry.select_region(0, -1)
+ elif room_jid != '':
self.xml.get_widget('join_button').grab_focus()
- self._server_entry = self.xml.get_widget('server_entry')
- self._room_entry = self.xml.get_widget('room_entry')
- self._nickname_entry = self.xml.get_widget('nickname_entry')
- if not self._server_entry.get_text():
- self._empty_required_widgets.append(self._server_entry)
- if not self._room_entry.get_text():
+ if not self._room_jid_entry.get_text():
self._empty_required_widgets.append(self._room_entry)
if not self._nickname_entry.get_text():
self._empty_required_widgets.append(self._nickname_entry)
@@ -1165,27 +1161,11 @@ _('You can not join a group chat unless you are connected.'))
if len(self._empty_required_widgets) == 0:
self.xml.get_widget('join_button').set_sensitive(True)
- def on_room_entry_key_press_event(self, widget, event):
- # Check for pressed @ and jump to server_entry if found
- if event.keyval == gtk.keysyms.at:
- self.xml.get_widget('server_entry').grab_focus()
- return True
-
- def on_server_entry_key_press_event(self, widget, event):
- # If backspace is pressed in empty server_entry, return to the room entry
- backspace = event.keyval == gtk.keysyms.BackSpace
- server_entry = self.xml.get_widget('server_entry')
- empty = len(server_entry.get_text()) == 0
- if backspace and empty:
- self.xml.get_widget('room_entry').grab_focus()
- return True
-
def on_recently_combobox_changed(self, widget):
model = widget.get_model()
- iter = widget.get_active_iter()
- gid = model[iter][0].decode('utf-8')
- self.xml.get_widget('room_entry').set_text(gid.split('@')[0])
- self.xml.get_widget('server_entry').set_text(gid.split('@')[1])
+ iter_ = widget.get_active_iter()
+ room_jid = model[iter_][0].decode('utf-8')
+ self._room_jid_entry.set_text(room_jid)
def on_cancel_button_clicked(self, widget):
'''When Cancel button is clicked'''
@@ -1193,30 +1173,29 @@ _('You can not join a group chat unless you are connected.'))
def on_join_button_clicked(self, widget):
'''When Join button is clicked'''
- nickname = self.xml.get_widget('nickname_entry').get_text().decode(
- 'utf-8')
- room = self.xml.get_widget('room_entry').get_text().decode('utf-8')
- server = self.xml.get_widget('server_entry').get_text().decode('utf-8')
+ nickname = self._nickname_entry.get_text().decode('utf-8')
+ room_jid = self._room_jid_entry.get_text().decode('utf-8')
password = self.xml.get_widget('password_entry').get_text().decode(
'utf-8')
- jid = '%s@%s' % (room, server)
try:
- jid = helpers.parse_jid(jid)
+ room_jid = helpers.parse_jid(room_jid)
except:
- ErrorDialog(_('Invalid room or server name'),
- _('The room name or server name has not allowed characters.'))
+ ErrorDialog(_('Invalid room Jabber ID'),
+ _('The room Jabber ID has not allowed characters.'))
return
- if jid in self.recently_groupchat:
- self.recently_groupchat.remove(jid)
- self.recently_groupchat.insert(0, jid)
+ if room_jid in self.recently_groupchat:
+ self.recently_groupchat.remove(room_jid)
+ self.recently_groupchat.insert(0, room_jid)
if len(self.recently_groupchat) > 10:
self.recently_groupchat = self.recently_groupchat[0:10]
- gajim.config.set('recently_groupchat', ' '.join(self.recently_groupchat))
+ gajim.config.set('recently_groupchat',
+ ' '.join(self.recently_groupchat))
if self.automatic:
- gajim.automatic_rooms[self.account][jid] = self.automatic
- gajim.interface.roster.join_gc_room(self.account, jid, nickname, password)
+ gajim.automatic_rooms[self.account][room_jid] = self.automatic
+ gajim.interface.roster.join_gc_room(self.account, room_jid, nickname,
+ password)
self.window.destroy()
@@ -2194,9 +2173,8 @@ class InvitationReceivedDialog:
def on_accept_button_clicked(self, widget):
self.dialog.destroy()
- room, server = gajim.get_room_name_and_server_from_room_jid(self.room_jid)
try:
- JoinGroupchatWindow(self.account, server = server, room = room)
+ JoinGroupchatWindow(self.account, self.room_jid)
except RuntimeError:
pass
diff --git a/src/disco.py b/src/disco.py
index a1fd8a31a..62728d8ab 100644
--- a/src/disco.py
+++ b/src/disco.py
@@ -1191,15 +1191,9 @@ class ToplevelAgentBrowser(AgentBrowser):
if not iter:
return
service = model[iter][0].decode('utf-8')
- if service.find('@') != -1:
- services = service.split('@', 1)
- room = services[0]
- service = services[1]
- else:
- room = ''
if not gajim.interface.instances[self.account].has_key('join_gc'):
try:
- dialogs.JoinGroupchatWindow(self.account, service, room)
+ dialogs.JoinGroupchatWindow(self.account, service)
except RuntimeError:
pass
else:
@@ -1502,7 +1496,8 @@ class MucBrowser(AgentBrowser):
self.vadj = self.window.services_scrollwin.get_property('vadjustment')
self.vadj_cbid = self.vadj.connect('value-changed', self.on_scroll)
# And to size changes
- self.size_cbid = self.window.services_scrollwin.connect('size-allocate', self.on_scroll)
+ self.size_cbid = self.window.services_scrollwin.connect(
+ 'size-allocate', self.on_scroll)
def _clean_treemodel(self):
if self.size_cbid:
@@ -1531,15 +1526,10 @@ class MucBrowser(AgentBrowser):
if not iter:
return
service = model[iter][0].decode('utf-8')
- if service.find('@') != -1:
- services = service.split('@', 1)
- room = services[0]
- service = services[1]
- else:
- room = model[iter][1].decode('utf-8')
if 'join_gc' not in gajim.interface.instances[self.account]:
try:
- dialogs.JoinGroupchatWindow(self.account, service, room)
+ room_jid = '%s@%s' % (service, room)
+ dialogs.JoinGroupchatWindow(self.account, service)
except RuntimeError:
pass
else:
diff --git a/src/gajim.py b/src/gajim.py
index a3855563f..d24f0cd91 100755
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -1370,12 +1370,11 @@ class Interface:
if gajim.gc_connected[account].has_key(room_jid) and\
gajim.gc_connected[account][room_jid]:
continue
- room, server = gajim.get_room_name_and_server_from_room_jid(room_jid)
nick = gc_control.nick
password = ''
if gajim.gc_passwords.has_key(room_jid):
password = gajim.gc_passwords[room_jid]
- gajim.connections[account].join_gc(nick, room, server, password)
+ gajim.connections[account].join_gc(nick, room_jid, password)
def handle_event_metacontacts(self, account, tags_list):
gajim.contacts.define_metacontacts(account, tags_list)
diff --git a/src/groupchat_control.py b/src/groupchat_control.py
index 146f271f1..50ab0cf04 100644
--- a/src/groupchat_control.py
+++ b/src/groupchat_control.py
@@ -924,7 +924,7 @@ class GroupchatControl(ChatControlBase):
self.draw_contact(nick)
self.draw_avatar(nick)
# Do not ask avatar to irc rooms as irc transports reply with messages
- r, server = gajim.get_room_name_and_server_from_room_jid(self.room_jid)
+ server = gajim.get_server_from_jid(self.room_jid)
if gajim.config.get('ask_avatars_on_startup') and \
not server.startswith('irc'):
fjid = self.room_jid + '/' + nick
diff --git a/src/notify.py b/src/notify.py
index b50aed37c..4bb556ac6 100644
--- a/src/notify.py
+++ b/src/notify.py
@@ -228,7 +228,7 @@ def notify(event, jid, account, parameters, advanced_notif_num = None):
text = message
elif message_type == 'pm': # private message
event_type = _('New Private Message')
- room_name, t = gajim.get_room_name_and_server_from_room_jid(jid)
+ room_name = gajim.get_nick_from_jid(jid)
img = os.path.join(gajim.DATA_DIR, 'pixmaps', 'events',
'priv_msg_recv.png')
title = _('New Private Message from room %s') % room_name
diff --git a/src/roster_window.py b/src/roster_window.py
index 9fdb261c5..8e58234ba 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -1572,7 +1572,7 @@ class RosterWindow:
try:
gajim.interface.instances[account]['join_gc'] = \
dialogs.JoinGroupchatWindow(account,
- server = gajim.connections[account].muc_jid[type_],
+ gajim.connections[account].muc_jid[type_],
automatic = {'invities': jid_list})
except RuntimeError:
continue