mirror of
https://github.com/gryf/weechat-xmpp.git
synced 2025-12-19 20:38:07 +01:00
merge with upstream version 1.6
This commit is contained in:
112
jabber.py
112
jabber.py
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user