completion of the jid's node when doing /join ro@some.server.fr/[TAB](it completes the 'ro' part \o/. Also a begining of /list command, but that does nothing

This commit is contained in:
louiz@4325f9fc-e183-4c21-96ce-0ab188b42d13 2010-11-29 18:36:54 +00:00
parent 69e335c0ad
commit cbcec6a798
2 changed files with 51 additions and 11 deletions

View file

@ -18,6 +18,9 @@
Defines the Connection class
"""
import logging
log = logging.getLogger(__name__)
from gettext import (bindtextdomain, textdomain, bind_textdomain_codeset,
gettext as _)
@ -45,10 +48,12 @@ class Connection(sleekxmpp.ClientXMPP):
jid = '%s/%s' % (config.get('server', 'anon.louiz.org'), resource)
password = None
sleekxmpp.ClientXMPP.__init__(self, jid, password, ssl=True)
self.registerPlugin('xep_0030')
self.registerPlugin('xep_0045')
def start(self):
# TODO, try multiple servers
# With anon auth.
# (domain, config.get('port', 5222))
custom_host = config.get('custom_host', '')
custom_port = config.get('custom_port', -1)

View file

@ -122,6 +122,7 @@ class Core(object):
'link': (self.command_link, _("Usage: /link [option] [number]\nLink: Interact with a link in the conversation. Available options are 'open', 'copy'. Open just opens the link in the browser if it's http://, Copy just copy the link in the clipboard. An optional number can be provided, it indicates which link to interact with."), None),
'whois': (self.command_whois, _('Usage: /whois <nickname>\nWhois: Request many informations about the user.'), None),
'theme': (self.command_theme, _('Usage: /theme\nTheme: Reload the theme defined in the config file.'), None),
'list': (self.command_list, _('Usage: /list\n/List: get the list of public chatrooms on the specified server'), self.completion_list),
}
self.key_func = {
@ -925,17 +926,51 @@ class Core(object):
# we are not on the 1st argument of the command line
return False
jid = JID(txt.split()[1])
if not jid.user or not jid.server or jid.resource != '':
# we are not writing the server part of the jid
return True
serv = jid.server
serv_list = []
for tab in self.tabs:
if isinstance(tab, MucTab):
serv_list.append('%s@%s'% (jid.user, JID(tab.get_name()).host))
the_input.auto_completion(serv_list, '')
if jid.server:
if jid.resource or jid.full.endswith('/'):
# we are writing the resource: complete the node
if not the_input.last_completion:
items = self.xmpp.plugin['xep_0030'].getItems(jid.server)['disco_items'].getItems()
items = ['%s/%s' % (tup[0], jid.resource) for tup in items]
for i in range(len(jid.server) + 2 + len(jid.resource)):
log.debug('allo')
the_input.key_backspace()
else:
items = []
the_input.auto_completion(items, '')
else:
# we are writing the server: complete the server
serv = jid.server
serv_list = []
for tab in self.tabs:
if isinstance(tab, MucTab):
serv_list.append('%s@%s'% (jid.user, JID(tab.get_name()).host))
the_input.auto_completion(serv_list, '')
return True
def command_list(self, arg):
"""
Opens a MucListTab for the specified server
"""
args = arg.split()
if len(args) != 1:
self.command_win('list')
return
server = args[1]
# TODO
def completion_list(self, the_input):
"""
"""
txt = the_input.get_text()
muc_serv_list = []
for tab in self.tabs: # TODO, also from an history
if isinstance(tab, MucTab) and\
tab.get_name() not in muc_serv_list:
muc_serv_list.append(tab.get_name())
if muc_serv_list:
the_input.auto_completion(muc_serv_list, ' ')
def command_join(self, arg):
"""
/join [room][/nick] [password]
@ -950,7 +985,7 @@ class Core(object):
nick = t.get_room().own_nick
else:
info = args[0].split('/')
if len(info) == 1:
if len(info) == 1 or info[1] == '':
default = os.environ.get('USER') if os.environ.get('USER') else 'poezio'
nick = config.get('default_nick', '')
if nick == '':