relay: add signals "upgrade" and "upgrade_ended" in WeeChat protocol

This commit is contained in:
Sebastien Helleu 2012-05-17 11:24:59 +02:00
parent 04275a7354
commit a62b243af5
6 changed files with 95 additions and 17 deletions

View File

@ -70,6 +70,7 @@ Version 0.3.8 (under dev!)
logger.color.backlog_line and logger.color.backlog_end (task #11966)
* perl: fix compilation on OS X (bug #30701)
* perl: fix crash on quit on OS X
* relay: add signals "upgrade" and "upgrade_ended" in WeeChat protocol
* relay: fix crash on /upgrade when client is connected using WeeChat protocol
* relay: redirect some irc messages from clients to hide output (messages: mode,
ison, list, names, topic, who, whois, whowas, time, userhost) (bug #33516)

View File

@ -424,58 +424,80 @@ There are two different identifiers ('id'):
WeeChat reserved identifiers:
[width="100%",cols="5m,5,3,15",options="header"]
[width="100%",cols="5m,5,3,10,8",options="header"]
|=====================================================
| Identifier | Description | Hdata type | Hdata content
| Recommended action in client
| _buffer_opened | Buffer opened | buffer |
'number' (integer), 'full_name' (string), 'short_name' (string), +
'nicklist' (integer), 'title' (string), 'local_variables' (hashtable), +
'prev_buffer' (pointer), 'next_buffer' (pointer)
'prev_buffer' (pointer), 'next_buffer' (pointer) |
Open buffer
| _buffer_type_changed | Type of buffer changed | buffer |
'number' (integer), 'full_name' (string), +
'type' (integer)
'type' (integer) |
Change type of buffer
| _buffer_moved | Buffer moved | buffer |
'number' (integer), 'full_name' (string), +
'prev_buffer' (pointer), 'next_buffer' (pointer)
'prev_buffer' (pointer), 'next_buffer' (pointer) |
Move buffer
| _buffer_merged | Buffer merged | buffer |
'number' (integer), 'full_name' (string), +
'prev_buffer' (pointer), 'next_buffer' (pointer)
'prev_buffer' (pointer), 'next_buffer' (pointer) |
Merge buffer
| _buffer_unmerged | Buffer unmerged | buffer |
'number' (integer), 'full_name' (string), +
'prev_buffer' (pointer), 'next_buffer' (pointer)
'prev_buffer' (pointer), 'next_buffer' (pointer) |
Unmerge buffer
| _buffer_renamed | Buffer renamed | buffer |
'number' (integer), 'full_name' (string), 'short_name' (string),
'local_variables' (hashtable)
'local_variables' (hashtable) |
Rename buffer
| _buffer_title_changed | Title of buffer changed | buffer |
'number' (integer), 'full_name' (string), 'title' (string)
'number' (integer), 'full_name' (string), 'title' (string) |
Change title of buffer
| _buffer_localvar_added | Local variable added | buffer |
'number' (integer), 'full_name' (string), 'local_variables' (hashtable)
'number' (integer), 'full_name' (string), 'local_variables' (hashtable) |
Add local variable in buffer
| _buffer_localvar_changed | Local variable changed | buffer |
'number' (integer), 'full_name' (string), 'local_variables' (hashtable)
'number' (integer), 'full_name' (string), 'local_variables' (hashtable) |
Change local variable inbuffer
| _buffer_localvar_removed | Local variable removed | buffer |
'number' (integer), 'full_name' (string), 'local_variables' (hashtable)
'number' (integer), 'full_name' (string), 'local_variables' (hashtable) |
Remove local variable from buffer
| _buffer_line_added | Line added in buffer | line |
'buffer' (pointer), 'date' (time), 'date_printed' (time), 'displayed' (char),
'highlight' (char), 'prefix' (string), 'message' (string)
'highlight' (char), 'prefix' (string), 'message' (string) |
Display line in buffer
| _buffer_closing | Buffer closing | buffer |
'number' (integer), 'full_name' (string)
'number' (integer), 'full_name' (string) |
Close buffer
| _nicklist | Nicklist for a buffer | nicklist_item |
'group' (char), 'visible' (char), 'level' (integer), +
'name' (string), 'color' (string), +
'prefix' (string), 'prefix_color' (string)
'prefix' (string), 'prefix_color' (string) |
Update nicklist
| _upgrade | WeeChat is upgrading | (empty) |
(empty) |
Desync from WeeChat (send command 'desync')
| _upgrade_ended | Upgrade of WeeChat done | (empty) |
(empty) |
Resync with WeeChat (resend all commands sent on startup after the 'init')
|=====================================================
[[message_objects]]

View File

@ -278,7 +278,6 @@ relay_weechat_protocol_signal_buffer_cb (void *data, const char *signal,
char cmd_hdata[64], str_signal[128];
/* make C compiler happy */
(void) signal;
(void) type_data;
ptr_client = (struct t_relay_client *)data;
@ -595,6 +594,43 @@ relay_weechat_protocol_signal_nicklist_cb (void *data, const char *signal,
return WEECHAT_RC_OK;
}
/*
* relay_weechat_protocol_signal_upgrade_cb: callback for "upgrade*" signals
*/
int
relay_weechat_protocol_signal_upgrade_cb (void *data, const char *signal,
const char *type_data,
void *signal_data)
{
struct t_relay_client *ptr_client;
struct t_relay_weechat_msg *msg;
char str_signal[128];
/* make C compiler happy */
(void) type_data;
(void) signal_data;
ptr_client = (struct t_relay_client *)data;
if (!ptr_client || !relay_client_valid (ptr_client))
return WEECHAT_RC_OK;
snprintf (str_signal, sizeof (str_signal), "_%s", signal);
if ((strcmp (signal, "upgrade") == 0)
|| (strcmp (signal, "upgrade_ended") == 0))
{
msg = relay_weechat_msg_new (str_signal);
if (msg)
{
relay_weechat_msg_send (ptr_client, msg, 0);
relay_weechat_msg_free (msg);
}
}
return WEECHAT_RC_OK;
}
/*
* relay_weechat_protocol_cb_sync: 'sync' command from client
*/

View File

@ -72,6 +72,10 @@ extern int relay_weechat_protocol_signal_nicklist_cb (void *data,
const char *signal,
const char *type_data,
void *signal_data);
extern int relay_weechat_protocol_signal_upgrade_cb (void *data,
const char *signal,
const char *type_data,
void *signal_data);
extern int relay_weechat_protocol_timer_nicklist_cb (void *data,
int remaining_calls);
extern void relay_weechat_protocol_recv (struct t_relay_client *client,

View File

@ -81,6 +81,10 @@ relay_weechat_hook_signals (struct t_relay_client *client)
weechat_hook_signal ("nicklist_*",
&relay_weechat_protocol_signal_nicklist_cb,
client);
RELAY_WEECHAT_DATA(client, hook_signal_upgrade) =
weechat_hook_signal ("upgrade*",
&relay_weechat_protocol_signal_upgrade_cb,
client);
}
/*
@ -100,6 +104,11 @@ relay_weechat_unhook_signals (struct t_relay_client *client)
weechat_unhook (RELAY_WEECHAT_DATA(client, hook_signal_nicklist));
RELAY_WEECHAT_DATA(client, hook_signal_nicklist) = NULL;
}
if (RELAY_WEECHAT_DATA(client, hook_signal_upgrade))
{
weechat_unhook (RELAY_WEECHAT_DATA(client, hook_signal_upgrade));
RELAY_WEECHAT_DATA(client, hook_signal_upgrade) = NULL;
}
}
/*
@ -205,6 +214,7 @@ relay_weechat_alloc (struct t_relay_client *client)
NULL);
RELAY_WEECHAT_DATA(client, hook_signal_buffer) = NULL;
RELAY_WEECHAT_DATA(client, hook_signal_nicklist) = NULL;
RELAY_WEECHAT_DATA(client, hook_signal_upgrade) = NULL;
RELAY_WEECHAT_DATA(client, buffers_nicklist) =
weechat_hashtable_new (16,
WEECHAT_HASHTABLE_STRING,
@ -258,6 +268,7 @@ relay_weechat_alloc_with_infolist (struct t_relay_client *client,
}
RELAY_WEECHAT_DATA(client, hook_signal_buffer) = NULL;
RELAY_WEECHAT_DATA(client, hook_signal_nicklist) = NULL;
RELAY_WEECHAT_DATA(client, hook_signal_upgrade) = NULL;
RELAY_WEECHAT_DATA(client, buffers_nicklist) =
weechat_hashtable_new (16,
WEECHAT_HASHTABLE_STRING,
@ -304,6 +315,8 @@ relay_weechat_free (struct t_relay_client *client)
weechat_unhook (RELAY_WEECHAT_DATA(client, hook_signal_buffer));
if (RELAY_WEECHAT_DATA(client, hook_signal_nicklist))
weechat_unhook (RELAY_WEECHAT_DATA(client, hook_signal_nicklist));
if (RELAY_WEECHAT_DATA(client, hook_signal_upgrade))
weechat_unhook (RELAY_WEECHAT_DATA(client, hook_signal_upgrade));
if (RELAY_WEECHAT_DATA(client, buffers_nicklist))
weechat_hashtable_free (RELAY_WEECHAT_DATA(client, buffers_nicklist));
@ -355,6 +368,7 @@ relay_weechat_print_log (struct t_relay_client *client)
"keys_values"));
weechat_log_printf (" hook_signal_buffer . . : 0x%lx", RELAY_WEECHAT_DATA(client, hook_signal_buffer));
weechat_log_printf (" hook_signal_nicklist . : 0x%lx", RELAY_WEECHAT_DATA(client, hook_signal_nicklist));
weechat_log_printf (" hook_signal_upgrade. . : 0x%lx", RELAY_WEECHAT_DATA(client, hook_signal_upgrade));
weechat_log_printf (" buffers_nicklist . . . : 0x%lx (hashtable: '%s')",
RELAY_WEECHAT_DATA(client, buffers_nicklist),
weechat_hashtable_get_string (RELAY_WEECHAT_DATA(client, buffers_nicklist),

View File

@ -41,8 +41,9 @@ struct t_relay_weechat_data
/* sync of buffers */
struct t_hashtable *buffers_sync; /* buffers synchronized (events */
/* received for these buffers) */
struct t_hook *hook_signal_buffer; /* hook for signals "buffer_xxx" */
struct t_hook *hook_signal_nicklist; /* hook for signals "nicklist_xxx"*/
struct t_hook *hook_signal_buffer; /* hook for signals "buffer_*" */
struct t_hook *hook_signal_nicklist; /* hook for signals "nicklist_*" */
struct t_hook *hook_signal_upgrade; /* hook for signals "upgrade*" */
struct t_hashtable *buffers_nicklist; /* send nicklist for these buffers*/
struct t_hook *hook_timer_nicklist; /* timer for sending nicklist */
};