From e552333b851258e73c5d7bc89e056298b14e8bb7 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Sun, 21 Feb 2010 23:35:29 +0100 Subject: [PATCH] Split room jid field in join groupchat dialog. Fixes #5528 Add browse rooms button in join groupchat dialog. Fixes #3546 --- data/gui/join_groupchat_window.ui | 80 ++++++++++++++++++++++++---- data/gui/service_discovery_window.ui | 3 +- src/dialogs.py | 54 +++++++++++++++++-- src/disco.py | 7 ++- 4 files changed, 126 insertions(+), 18 deletions(-) diff --git a/data/gui/join_groupchat_window.ui b/data/gui/join_groupchat_window.ui index 4f41dd1b4..384b1ed9e 100644 --- a/data/gui/join_groupchat_window.ui +++ b/data/gui/join_groupchat_window.ui @@ -15,7 +15,7 @@ True - 7 + 8 2 12 6 @@ -110,8 +110,8 @@ Password: - 4 - 5 + 5 + 6 GTK_FILL @@ -126,14 +126,14 @@ 1 2 - 4 - 5 + 5 + 6 - Join this room automatically when I connect + Join this room _automatically when I connect True False True @@ -143,8 +143,8 @@ 2 - 6 - 7 + 7 + 8 GTK_FILL @@ -174,21 +174,69 @@ - Bookmark this room + _Bookmark this room True True False + True True 2 - 5 - 6 + 6 + 7 GTK_FILL + + + True + 0 + Server: + + + 4 + 5 + + + + + True + 6 + + + True + liststore1 + 0 + + + 0 + + + + + Bro_wse Rooms + True + True + True + image1 + True + + + + 1 + + + + + 1 + 2 + 4 + 5 + + 0 @@ -275,4 +323,14 @@ + + + + + + + + True + gtk-find + diff --git a/data/gui/service_discovery_window.ui b/data/gui/service_discovery_window.ui index 6424b65e5..b969befc6 100644 --- a/data/gui/service_discovery_window.ui +++ b/data/gui/service_discovery_window.ui @@ -4,7 +4,7 @@ - + @@ -71,7 +71,6 @@ Agent JID - node True liststore1 - diff --git a/src/dialogs.py b/src/dialogs.py index 552c2bdf4..c4f2ca821 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -38,6 +38,7 @@ import vcard import conversation_textview import message_control import dataforms_widget +import disco from random import randrange from common import pep @@ -2156,7 +2157,6 @@ class JoinGroupchatWindow: self._nickname_entry = self.xml.get_object('nickname_entry') self._password_entry = self.xml.get_object('password_entry') - self._room_jid_entry.set_text(room_jid) self._nickname_entry.set_text(nick) if password: self._password_entry.set_text(password) @@ -2171,6 +2171,13 @@ class JoinGroupchatWindow: title = _('Join Group Chat') self.window.set_title(title) + self.server_comboboxentry = self.xml.get_object('server_comboboxentry') + self.server_model = self.server_comboboxentry.get_model() + server_list = [] + # get the muc server of our server + if 'jabber' in gajim.connections[account].muc_jid: + server_list.append(gajim.connections[account].muc_jid['jabber']) + self.recently_combobox = self.xml.get_object('recently_combobox') liststore = gtk.ListStore(str) self.recently_combobox.set_model(liststore) @@ -2180,6 +2187,16 @@ class JoinGroupchatWindow: 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) + if server not in server_list and not server.startswith('irc'): + server_list.append(server) + + for s in server_list: + self.server_model.append([s]) + self.server_comboboxentry.set_active(0) + + self._set_room_jid(room_jid) + if len(self.recently_groupchat) == 0: self.recently_combobox.set_sensitive(False) elif room_jid == '': @@ -2229,11 +2246,39 @@ class JoinGroupchatWindow: self.account = model[iter_][0].decode('utf-8') self.on_required_entry_changed(self._nickname_entry) + def _select_server(self, server): + i = 0 + for s in self.server_model: + if s[0] == server: + self.server_comboboxentry.set_active(i) + break + i += 1 + + def _set_room_jid(self, room_jid): + room, server = gajim.get_name_and_server_from_jid(room_jid) + self._select_server(server) + self._room_jid_entry.set_text(room) + 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._room_jid_entry.set_text(room_jid) + self._set_room_jid(room_jid) + + def on_browse_rooms_button_clicked(self, widget): + server = self.server_model[self.server_comboboxentry.get_active()][0].\ + decode('utf-8') + if server in gajim.interface.instances[self.account]['disco']: + gajim.interface.instances[self.account]['disco'][server].window.\ + present() + else: + try: + # Object will add itself to the window dict + disco.ServiceDiscoveryWindow(self.account, server, + initial_identities=[{'category': 'conference', + 'type': 'text'}]) + except GajimGeneralException: + pass def on_cancel_button_clicked(self, widget): """ @@ -2258,7 +2303,10 @@ class JoinGroupchatWindow: 'groupchat.')) return nickname = self._nickname_entry.get_text().decode('utf-8') - room_jid = self._room_jid_entry.get_text().decode('utf-8') + server = self.server_model[self.server_comboboxentry.get_active()][0].\ + decode('utf-8') + room = self._room_jid_entry.get_text().decode('utf-8') + room_jid = room + '@' + server password = self._password_entry.get_text().decode('utf-8') try: nickname = helpers.parse_resource(nickname) diff --git a/src/disco.py b/src/disco.py index 46f0e82ac..9fcb47407 100644 --- a/src/disco.py +++ b/src/disco.py @@ -492,8 +492,8 @@ class ServiceDiscoveryWindow(object): Class that represents the Services Discovery window """ - def __init__(self, account, jid = '', node = '', - address_entry = False, parent = None): + def __init__(self, account, jid='', node='', address_entry=False, + parent=None, initial_identities=None): self.account = account self.parent = parent if not jid: @@ -519,6 +519,9 @@ _('Without a connection, you can not browse available services')) self.cache = ServicesCache(account) gajim.connections[account].services_cache = self.cache + if initial_identities: + self.cache.agent_info(account, (jid, node, initial_identities, [], + None)) self.xml = gtkgui_helpers.get_gtk_builder('service_discovery_window.ui') self.window = self.xml.get_object('service_discovery_window') self.services_treeview = self.xml.get_object('services_treeview')