1
0
mirror of https://github.com/gryf/weechat-xmpp.git synced 2025-12-19 12:28:12 +01:00

merge with upstream version 1.6

This commit is contained in:
Sébastien Leduc
2014-03-29 10:26:10 +01:00
parent 029526b1c5
commit 0b0a6d3bc6

112
jabber.py
View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2009-2012 Sebastien Helleu <flashcode@flashtux.org>
# Copyright (C) 2009-2013 Sebastien Helleu <flashcode@flashtux.org>
# Copyright (C) 2010 xt <xt@bash.no>
# Copyright (C) 2010 Aleksey V. Zapparov <ixti@member.fsf.org>
#
@@ -26,6 +26,14 @@
# Happy chat, enjoy :)
#
# History:
# 2013-09-30, Nils Görs <freenode.nils_2>:
# version 1.6: add support of /secure for passwords and jid
# : fix stdout/stderr when no JID was set
# 2013-05-14, Billiam <billiamthesecond@gmail.com>:
# version 1.5: fix unicode encoding error in /jabber buddies
# 2013-05-03, Sebastien Helleu <flashcode@flashtux.org>:
# version 1.4: add tags in user messages: notify_xxx, no_highlight,
# nick_xxx, prefix_nick_xxx, log1
# 2012-05-12, Sebastian Rydberg <sr@rydbergtech.se>:
# version 1.3: Added support for fetching names from roster
# 2012-04-11, Sebastien Helleu <flashcode@flashtux.org>:
@@ -79,7 +87,7 @@
SCRIPT_NAME = "jabber"
SCRIPT_AUTHOR = "Sebastien Helleu <flashcode@flashtux.org>"
SCRIPT_VERSION = "1.3"
SCRIPT_VERSION = "1.6"
SCRIPT_LICENSE = "GPL3"
SCRIPT_DESC = "Jabber/XMPP protocol for WeeChat"
SCRIPT_COMMAND = SCRIPT_NAME
@@ -458,7 +466,16 @@ class Server:
weechat.buffer_set(self.buffer, "nicklist_display_groups", "1")
weechat.buffer_set(self.buffer, "display", "auto")
self.disconnect()
self.buddy = Buddy(jid=self.option_string("jid"), server=self)
if not eval_expression(self.option_string("jid")):
weechat.prnt(self.buffer, "%sjabber: JID must contain at least domain name"
% weechat.prefix("error"))
self.ping_up = False
self.client = None
return self.is_connected()
self.buddy = Buddy(jid=eval_expression(self.option_string("jid")), server=self)
server = self.option_string("server")
port = self.option_integer("port")
self.client = xmpp.Client(server=self.buddy.domain, debug=[])
@@ -485,9 +502,11 @@ class Server:
res = self.buddy.resource
if not res:
res = "WeeChat"
auth = self.client.auth(self.buddy.username,
self.option_string("password"),
eval_expression(self.option_string("password")),
res)
if auth:
weechat.prnt(self.buffer, "jabber: authentication ok (using %s)" % auth)
@@ -603,7 +622,6 @@ class Server:
if name:
buddy.set_name(name.encode("utf-8"))
buddy.set_status(status=status, away=away)
self.update_nicklist(buddy=buddy, action=action)
return
@@ -668,22 +686,25 @@ class Server:
self.disconnect()
if weechat.config_boolean(self.options['autoreconnect']):
autoreconnect_delay = 30
weechat.command('', '/wait %s /%s connect %s' %(\
autoreconnect_delay, SCRIPT_COMMAND, self.name))
weechat.command('', '/wait %s /%s connect %s' %
(autoreconnect_delay, SCRIPT_COMMAND, self.name))
def recv_message(self, buddy, message):
""" Receive a message from buddy. """
weechat.prnt_date_tags(self.buffer, 0, "notify_private",
weechat.prnt_date_tags(self.buffer, 0,
"notify_private,nick_%s,prefix_nick_%s,log1" %
(buddy.alias,
weechat.config_string(weechat.config_get("weechat.color.chat_nick_other"))),
"%s%s\t%s" % (weechat.color("chat_nick_other"),
buddy.alias,
message))
def print_status(self, nickname, status):
''' Print a status in server window and in chat '''
weechat.prnt_date_tags(self.buffer, 0, 'no_highlight', "%s%s has status %s" % (\
weechat.prefix("action"),
nickname,
status))
""" Print a status in server window and in chat. """
weechat.prnt_date_tags(self.buffer, 0, "no_highlight", "%s%s has status %s" %
(weechat.prefix("action"),
nickname,
status))
for chat in self.chats:
if nickname in chat.buddy.alias:
chat.print_status(status)
@@ -736,9 +757,13 @@ class Server:
sender = self.buddy.alias
except:
sender = self.jid
weechat.prnt(self.buffer, "%s%s\t%s" % (weechat.color("chat_nick_self"),
sender,
message.strip()))
weechat.prnt_date_tags(self.buffer, 0,
"notify_none,no_highlight,nick_%s,prefix_nick_%s,log1" %
(sender,
weechat.config_string(weechat.config_get("weechat.color.chat_nick_self"))),
"%s%s\t%s" % (weechat.color("chat_nick_self"),
sender,
message.strip()))
def set_away(self, message):
""" Set/unset away on server.
@@ -788,19 +813,20 @@ class Server:
len_max = { 'alias': 5, 'jid': 5 }
lines = []
for buddy in sorted(self.buddies, key=lambda x: str(x.jid)):
for buddy in sorted(self.buddies, key=lambda x: x.jid.getStripped().encode('utf-8')):
alias = ''
if buddy.alias != buddy.bare_jid:
alias = buddy.alias
buddy_jid_string = buddy.jid.getStripped().encode('utf-8')
lines.append( {
'jid': str(buddy.jid),
'jid': buddy_jid_string,
'alias': alias,
'status': buddy.away_string(),
})
if len(alias) > len_max['alias']:
len_max['alias'] = len(alias)
if len(str(buddy.jid)) > len_max['jid']:
len_max['jid'] = len(str(buddy.jid))
if len(buddy_jid_string) > len_max['jid']:
len_max['jid'] = len(buddy_jid_string)
prnt_format = " %s%-" + str(len_max['jid']) + "s %-" + str(len_max['alias']) + "s %s"
weechat.prnt(self.buffer, prnt_format % ('', 'JID', 'Alias', 'Status'))
for line in lines:
@@ -992,6 +1018,13 @@ class Server:
for name, option in self.options.items():
weechat.config_option_free(option)
def eval_expression(option_name):
""" Return a evaluated expression """
if int(version) >= 0x00040200:
return weechat.string_eval_expression(option_name,{},{},{})
else:
return option_name
def jabber_search_server_by_name(name):
""" Search a server by name. """
global jabber_servers
@@ -1016,7 +1049,7 @@ def jabber_search_context(buffer):
return context
def jabber_search_context_by_name(server_name):
''' Search for buffer given name of server '''
"""Search for buffer given name of server. """
bufname = "%s.server.%s" % (SCRIPT_NAME, server_name)
return jabber_search_context(weechat.buffer_search("python", bufname))
@@ -1040,9 +1073,6 @@ class Chat:
"jabber_buffer_close_cb", "")
self.buffer_title = self.buddy.alias
if self.buffer:
weechat.buffer_set(self.buffer, "nicklist", "1")
weechat.buffer_set(self.buffer, "nicklist_display_groups", "1")
weechat.buffer_set(self.buffer, "display", "auto")
weechat.buffer_set(self.buffer, "title", self.buffer_title)
weechat.buffer_set(self.buffer, "short_name", self.buddy.alias)
weechat.buffer_set(self.buffer, "localvar_set_type", "private")
@@ -1058,7 +1088,10 @@ class Chat:
if buddy.alias != self.buffer_title:
self.buffer_title = buddy.alias
weechat.buffer_set(self.buffer, "title", "%s" % self.buffer_title)
weechat.prnt_date_tags(self.buffer, 0, "notify_private",
weechat.prnt_date_tags(self.buffer, 0,
"notify_private,nick_%s,prefix_nick_%s,log1" %
(buddy.alias,
weechat.config_string(weechat.config_get("weechat.color.chat_nick_other"))),
"%s%s\t%s" % (weechat.color("chat_nick_other"),
buddy.alias,
message))
@@ -1081,15 +1114,19 @@ class Chat:
self.server.send_message(self.buddy, message)
# On a MUC we will receive our messages
if not isinstance(self.buddy, MUC):
weechat.prnt(self.buffer, "%s%s\t%s" % (weechat.color("chat_nick_self"),
self.server.buddy.alias,
message))
weechat.prnt_date_tags(self.buffer, 0,
"notify_none,no_highlight,nick_%s,prefix_nick_%s,log1" %
(self.server.buddy.alias,
weechat.config_string(weechat.config_get("weechat.color.chat_nick_self"))),
"%s%s\t%s" % (weechat.color("chat_nick_self"),
self.server.buddy.alias,
message))
def print_status(self, status):
''' Print a status message in chat '''
weechat.prnt(self.buffer, "%s%s has status %s" % (\
weechat.prefix("action"),
self.buddy.alias,
status))
""" Print a status message in chat. """
weechat.prnt(self.buffer, "%s%s has status %s" %
(weechat.prefix("action"),
self.buddy.alias,
status))
def close_buffer(self):
""" Close chat buffer. """
@@ -1508,8 +1545,9 @@ def jabber_list_servers_chats(name):
connected = ""
if server.sock >= 0:
connected = "(connected)"
weechat.prnt("", " %s - %s %s %s" % (server.name,
server.option_string("jid"), conn_server, connected))
eval_expression(server.option_string("jid")), conn_server, connected))
for chat in server.chats:
weechat.prnt("", " chat with %s" % (chat.buddy))
else:
@@ -1851,10 +1889,6 @@ class AliasCommand(object):
weechat.prnt("", prnt_format % ('Alias', 'JID'))
for alias, jid in sorted(jabber_jid_aliases.items()):
weechat.prnt("", prnt_format % (alias, jid))
#FIXME \\\
import sys
weechat.prnt('', "jabber: sys.version: %s" % (sys.version)) # FIXME
#FIXME ///
return
def parse(self):
@@ -1950,6 +1984,8 @@ if __name__ == "__main__" and import_ok:
if weechat.register(SCRIPT_NAME, SCRIPT_AUTHOR, SCRIPT_VERSION,
SCRIPT_LICENSE, SCRIPT_DESC,
"jabber_unload_script", ""):
version = weechat.info_get("version_number", "") or 0
jabber_hook_commands_and_completions()
jabber_config_init()
jabber_config_read()