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