From dc64ac80005788768fbd5296fdb2dfff4f4f7f81 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Sat, 27 Apr 2013 14:37:41 +0200 Subject: [PATCH] remember with which nickname we entered rooms. Fixes #7334 --- src/dialogs.py | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/dialogs.py b/src/dialogs.py index c4ec4bae4..b5a02d81c 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -2310,15 +2310,15 @@ class SubscriptionRequestWindow: class JoinGroupchatWindow: def __init__(self, account=None, room_jid='', nick='', password='', - automatic=False): + 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 account: - if room_jid != '' and room_jid in gajim.gc_connected[account] and\ - gajim.gc_connected[account][room_jid]: + if room_jid != '' and room_jid in gajim.gc_connected[account] and \ + gajim.gc_connected[account][room_jid]: ErrorDialog(_('You are already in group chat %s') % room_jid) raise GajimGeneralException, 'You are already in this group chat' if nick == '': @@ -2382,15 +2382,22 @@ class JoinGroupchatWindow: server_list.append(gajim.connections[account].muc_jid['jabber']) self.recently_combobox = self.xml.get_object('recently_combobox') - liststore = gtk.ListStore(str) + liststore = gtk.ListStore(str, str) self.recently_combobox.set_model(liststore) cell = gtk.CellRendererText() self.recently_combobox.pack_start(cell, True) self.recently_combobox.add_attribute(cell, 'text', 0) self.recently_groupchat = gajim.config.get('recently_groupchat').split() for g in self.recently_groupchat: - self.recently_combobox.append_text(g) - server = gajim.get_server_from_jid(g) + r_jid = gajim.get_jid_without_resource(g) + nick = gajim.get_resource_from_jid(g) + if nick: + show = '%(nick)s on %(room_jid)s' % {'nick': nick, + 'room_jid': r_jid} + else: + show = r_jid + liststore.append([show, g]) + server = gajim.get_server_from_jid(r_jid) if server not in server_list and not server.startswith('irc'): server_list.append(server) @@ -2456,16 +2463,19 @@ class JoinGroupchatWindow: self.account = model[iter_][0].decode('utf-8') self.on_required_entry_changed(self._nickname_entry) - def _set_room_jid(self, room_jid): + def _set_room_jid(self, full_jid): + room_jid, nick = gajim.get_room_and_nick_from_fjid(full_jid) room, server = gajim.get_name_and_server_from_jid(room_jid) self._room_jid_entry.set_text(room) self.server_comboboxentry.child.set_text(server) + if nick: + self._nickname_entry.set_text(nick) def on_recently_combobox_changed(self, widget): model = widget.get_model() iter_ = widget.get_active_iter() - room_jid = model[iter_][0].decode('utf-8') - self._set_room_jid(room_jid) + full_jid = model[iter_][1].decode('utf-8') + self._set_room_jid(full_jid) def on_browse_rooms_button_clicked(self, widget): server = self.server_comboboxentry.child.get_text().decode('utf-8') @@ -2533,13 +2543,15 @@ class JoinGroupchatWindow: ErrorDialog(_('This is not a group chat'), _('%s is not the name of a group chat.') % room_jid) return - if room_jid in self.recently_groupchat: - self.recently_groupchat.remove(room_jid) - self.recently_groupchat.insert(0, room_jid) + + full_jid = room_jid + '/' + nickname + if full_jid in self.recently_groupchat: + self.recently_groupchat.remove(full_jid) + self.recently_groupchat.insert(0, full_jid) if len(self.recently_groupchat) > 10: self.recently_groupchat = self.recently_groupchat[0:10] gajim.config.set('recently_groupchat', - ' '.join(self.recently_groupchat)) + ' '.join(self.recently_groupchat)) if self.xml.get_object('bookmark_checkbutton').get_active(): if self.xml.get_object('auto_join_checkbutton').get_active(): @@ -2548,13 +2560,13 @@ class JoinGroupchatWindow: autojoin = '0' # Add as bookmark, with autojoin and not minimized name = gajim.get_nick_from_jid(room_jid) - gajim.interface.add_gc_bookmark(self.account, name, room_jid, autojoin, - '0', password, nickname) + gajim.interface.add_gc_bookmark(self.account, name, room_jid, + autojoin, '0', password, nickname) if self.automatic: gajim.automatic_rooms[self.account][room_jid] = self.automatic - gajim.interface.join_gc_room(self.account, room_jid, nickname, password) + gajim.interface.join_gc_room(self.account, room_jid, nickname, password) self.window.destroy()