mirror of
https://github.com/weechat/weechat.git
synced 2026-06-26 12:56:37 +02:00
irc: add option irc.look.display_join_message (task #10895)
This commit is contained in:
@@ -294,7 +294,11 @@ irc_channel_new (struct t_irc_server *server, int channel_type,
|
||||
{
|
||||
new_channel->key = NULL;
|
||||
}
|
||||
new_channel->names_received = 0;
|
||||
new_channel->join_msg_received = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
new_channel->checking_away = 0;
|
||||
new_channel->away_message = NULL;
|
||||
new_channel->has_quit_server = 0;
|
||||
@@ -1183,7 +1187,7 @@ irc_channel_hdata_channel_cb (void *data, const char *hdata_name)
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, modes, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, limit, INTEGER, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, key, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, names_received, INTEGER, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, join_msg_received, HASHTABLE, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, checking_away, INTEGER, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, away_message, STRING, 0, NULL, NULL);
|
||||
WEECHAT_HDATA_VAR(struct t_irc_channel, has_quit_server, INTEGER, 0, NULL, NULL);
|
||||
@@ -1278,7 +1282,8 @@ irc_channel_add_to_infolist (struct t_infolist *infolist,
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_string (ptr_item, "key", channel->key))
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_integer (ptr_item, "names_received", channel->names_received))
|
||||
if (!weechat_infolist_new_var_string (ptr_item, "join_msg_received",
|
||||
weechat_hashtable_get_string (channel->join_msg_received, "keys")))
|
||||
return 0;
|
||||
if (!weechat_infolist_new_var_integer (ptr_item, "checking_away", channel->checking_away))
|
||||
return 0;
|
||||
@@ -1360,7 +1365,10 @@ irc_channel_print_log (struct t_irc_channel *channel)
|
||||
weechat_log_printf (" modes. . . . . . . . . . : '%s'", channel->modes);
|
||||
weechat_log_printf (" limit. . . . . . . . . . : %d", channel->limit);
|
||||
weechat_log_printf (" key. . . . . . . . . . . : '%s'", channel->key);
|
||||
weechat_log_printf (" names_received . . . . . : %d", channel->names_received);
|
||||
weechat_log_printf (" join_msg_received. . . . : 0x%lx (hashtable: '%s')",
|
||||
channel->join_msg_received,
|
||||
weechat_hashtable_get_string (channel->join_msg_received,
|
||||
"keys_values"));
|
||||
weechat_log_printf (" checking_away. . . . . . : %d", channel->checking_away);
|
||||
weechat_log_printf (" away_message . . . . . . : '%s'", channel->away_message);
|
||||
weechat_log_printf (" has_quit_server. . . . . : %d", channel->has_quit_server);
|
||||
|
||||
@@ -47,7 +47,9 @@ struct t_irc_channel
|
||||
char *modes; /* channel modes */
|
||||
int limit; /* user limit (0 is limit not set) */
|
||||
char *key; /* channel key (NULL if no key set) */
|
||||
int names_received; /* names received (message 366) */
|
||||
struct t_hashtable *join_msg_received; /* messages received after join: */
|
||||
/* 366=names, 332/333=topic, */
|
||||
/* 329=creation date */
|
||||
int checking_away; /* = 1 if checking away with WHO cmd */
|
||||
char *away_message; /* to display away only once in pv */
|
||||
int has_quit_server; /* =1 if nick has quit (pv only), to */
|
||||
|
||||
@@ -73,6 +73,7 @@ struct t_config_option *irc_config_look_display_ctcp_unknown;
|
||||
struct t_config_option *irc_config_look_display_host_join;
|
||||
struct t_config_option *irc_config_look_display_host_join_local;
|
||||
struct t_config_option *irc_config_look_display_host_quit;
|
||||
struct t_config_option *irc_config_look_display_join_message;
|
||||
struct t_config_option *irc_config_look_display_old_topic;
|
||||
struct t_config_option *irc_config_look_display_pv_away_once;
|
||||
struct t_config_option *irc_config_look_display_pv_back;
|
||||
@@ -141,6 +142,7 @@ struct t_config_option *irc_config_server_default[IRC_SERVER_NUM_OPTIONS];
|
||||
struct t_hook *irc_config_hook_config_nick_colors = NULL;
|
||||
char **irc_config_nick_colors = NULL;
|
||||
int irc_config_num_nick_colors = 0;
|
||||
struct t_hashtable *irc_config_hashtable_display_join_message = NULL;
|
||||
struct t_hashtable *irc_config_hashtable_nick_color_force = NULL;
|
||||
struct t_hashtable *irc_config_hashtable_nick_prefixes = NULL;
|
||||
struct t_hashtable *irc_config_hashtable_color_mirc_remap = NULL;
|
||||
@@ -274,6 +276,45 @@ irc_config_change_look_color_nicks_in_nicklist (void *data,
|
||||
irc_nick_nicklist_set_color_all ();
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for changes on option "irc.look.display_join_message".
|
||||
*/
|
||||
|
||||
void
|
||||
irc_config_change_look_display_join_message (void *data,
|
||||
struct t_config_option *option)
|
||||
{
|
||||
char **items;
|
||||
int num_items, i;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) option;
|
||||
|
||||
if (!irc_config_hashtable_display_join_message)
|
||||
{
|
||||
irc_config_hashtable_display_join_message = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
else
|
||||
weechat_hashtable_remove_all (irc_config_hashtable_display_join_message);
|
||||
|
||||
items = weechat_string_split (weechat_config_string (irc_config_look_display_join_message),
|
||||
",", 0, 0, &num_items);
|
||||
if (items)
|
||||
{
|
||||
for (i = 0; i < num_items; i++)
|
||||
{
|
||||
weechat_hashtable_set (irc_config_hashtable_display_join_message,
|
||||
items[i], "1");
|
||||
}
|
||||
weechat_string_free_split (items);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for changes on option "irc.look.server_buffer".
|
||||
*/
|
||||
@@ -2052,11 +2093,11 @@ irc_config_init ()
|
||||
{
|
||||
struct t_config_section *ptr_section;
|
||||
|
||||
irc_config_hashtable_color_mirc_remap = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
irc_config_hashtable_display_join_message = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
irc_config_hashtable_nick_color_force = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
@@ -2067,6 +2108,11 @@ irc_config_init ()
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
irc_config_hashtable_color_mirc_remap = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
irc_config_file = weechat_config_new (IRC_CONFIG_NAME,
|
||||
&irc_config_reload, NULL);
|
||||
@@ -2257,6 +2303,14 @@ irc_config_init ()
|
||||
N_("display host in part/quit messages"),
|
||||
NULL, 0, 0, "on", NULL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
irc_config_look_display_join_message = weechat_config_new_option (
|
||||
irc_config_file, ptr_section,
|
||||
"display_join_message", "string",
|
||||
N_("comma-separated list of messages to display after joining a channel: "
|
||||
"329 = channel creation date, 332 = topic, 333 = nick/date for topic, "
|
||||
"366 = names on channel"),
|
||||
NULL, 0, 0, "329,332,333,366", NULL, 0, NULL, NULL,
|
||||
&irc_config_change_look_display_join_message, NULL, NULL, NULL);
|
||||
irc_config_look_display_old_topic = weechat_config_new_option (
|
||||
irc_config_file, ptr_section,
|
||||
"display_old_topic", "boolean",
|
||||
@@ -2754,6 +2808,7 @@ irc_config_read ()
|
||||
if (rc == WEECHAT_CONFIG_READ_OK)
|
||||
{
|
||||
irc_notify_new_for_all_servers ();
|
||||
irc_config_change_look_display_join_message (NULL, NULL);
|
||||
irc_config_change_look_nick_color_force (NULL, NULL);
|
||||
irc_config_change_look_nicks_hide_password (NULL, NULL);
|
||||
irc_config_change_color_nick_prefixes (NULL, NULL);
|
||||
@@ -2804,6 +2859,12 @@ irc_config_free ()
|
||||
irc_config_num_nicks_hide_password = 0;
|
||||
}
|
||||
|
||||
if (irc_config_hashtable_display_join_message)
|
||||
{
|
||||
weechat_hashtable_free (irc_config_hashtable_display_join_message);
|
||||
irc_config_hashtable_display_join_message = NULL;
|
||||
}
|
||||
|
||||
if (irc_config_hashtable_nick_color_force)
|
||||
{
|
||||
weechat_hashtable_free (irc_config_hashtable_nick_color_force);
|
||||
|
||||
@@ -115,6 +115,7 @@ extern struct t_config_option *irc_config_look_display_ctcp_unknown;
|
||||
extern struct t_config_option *irc_config_look_display_host_join;
|
||||
extern struct t_config_option *irc_config_look_display_host_join_local;
|
||||
extern struct t_config_option *irc_config_look_display_host_quit;
|
||||
extern struct t_config_option *irc_config_look_display_join_message;
|
||||
extern struct t_config_option *irc_config_look_display_old_topic;
|
||||
extern struct t_config_option *irc_config_look_display_pv_away_once;
|
||||
extern struct t_config_option *irc_config_look_display_pv_back;
|
||||
@@ -177,6 +178,7 @@ extern struct t_config_option *irc_config_server_default[];
|
||||
extern char **irc_config_nick_colors;
|
||||
extern int irc_config_num_nick_colors;
|
||||
|
||||
extern struct t_hashtable *irc_config_hashtable_display_join_message;
|
||||
extern struct t_hashtable *irc_config_hashtable_nick_color_force;
|
||||
extern struct t_hashtable *irc_config_hashtable_nick_prefixes;
|
||||
extern struct t_hashtable *irc_config_hashtable_color_mirc_remap;
|
||||
|
||||
+200
-172
@@ -561,7 +561,7 @@ IRC_PROTOCOL_CALLBACK(join)
|
||||
ptr_channel->modes = NULL;
|
||||
}
|
||||
ptr_channel->limit = 0;
|
||||
ptr_channel->names_received = 0;
|
||||
weechat_hashtable_remove_all (ptr_channel->join_msg_received);
|
||||
ptr_channel->checking_away = 0;
|
||||
}
|
||||
|
||||
@@ -2967,15 +2967,19 @@ IRC_PROTOCOL_CALLBACK(329)
|
||||
|
||||
if (ptr_channel)
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "created on" is a date */
|
||||
_("%sChannel created on %s"),
|
||||
weechat_prefix ("network"),
|
||||
weechat_util_get_time_string (&datetime));
|
||||
if (weechat_hashtable_has_key (ptr_channel->join_msg_received, command)
|
||||
|| weechat_hashtable_has_key (irc_config_hashtable_display_join_message, command))
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "created on" is a date */
|
||||
_("%sChannel created on %s"),
|
||||
weechat_prefix ("network"),
|
||||
weechat_util_get_time_string (&datetime));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2993,6 +2997,9 @@ IRC_PROTOCOL_CALLBACK(329)
|
||||
weechat_util_get_time_string (&datetime));
|
||||
}
|
||||
|
||||
if (ptr_channel)
|
||||
weechat_hashtable_set (ptr_channel->join_msg_received, command, "1");
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -3129,21 +3136,31 @@ IRC_PROTOCOL_CALLBACK(332)
|
||||
topic_color = irc_color_decode (pos_topic,
|
||||
(weechat_config_boolean (irc_config_network_colors_receive)) ? 1 : 0);
|
||||
}
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sTopic for %s%s%s is \"%s%s\""),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
argv[3],
|
||||
IRC_COLOR_RESET,
|
||||
(topic_color) ? topic_color : ((pos_topic) ? pos_topic : ""),
|
||||
IRC_COLOR_RESET);
|
||||
|
||||
if (!ptr_channel
|
||||
|| (weechat_hashtable_has_key (ptr_channel->join_msg_received, command))
|
||||
|| weechat_hashtable_has_key (irc_config_hashtable_display_join_message, command))
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sTopic for %s%s%s is \"%s%s\""),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
argv[3],
|
||||
IRC_COLOR_RESET,
|
||||
(topic_color) ? topic_color : ((pos_topic) ? pos_topic : ""),
|
||||
IRC_COLOR_RESET);
|
||||
}
|
||||
|
||||
if (topic_color)
|
||||
free (topic_color);
|
||||
|
||||
if (ptr_channel)
|
||||
weechat_hashtable_set (ptr_channel->join_msg_received, command, "1");
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -3182,38 +3199,42 @@ IRC_PROTOCOL_CALLBACK(333)
|
||||
|
||||
if (ptr_channel && ptr_channel->nicks)
|
||||
{
|
||||
if (topic_nick)
|
||||
if (weechat_hashtable_has_key (ptr_channel->join_msg_received, command)
|
||||
|| weechat_hashtable_has_key (irc_config_hashtable_display_join_message, command))
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "on" is a date */
|
||||
_("%sTopic set by %s%s%s%s%s%s%s%s%s on %s"),
|
||||
weechat_prefix ("network"),
|
||||
irc_nick_color_for_server_message (server, ptr_nick, topic_nick),
|
||||
topic_nick,
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
(topic_address && topic_address[0]) ? " (" : "",
|
||||
IRC_COLOR_CHAT_HOST,
|
||||
(topic_address) ? topic_address : "",
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
(topic_address && topic_address[0]) ? ")" : "",
|
||||
IRC_COLOR_RESET,
|
||||
weechat_util_get_time_string (&datetime));
|
||||
}
|
||||
else
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "on" is a date */
|
||||
_("%sTopic set on %s"),
|
||||
weechat_prefix ("network"),
|
||||
weechat_util_get_time_string (&datetime));
|
||||
if (topic_nick)
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "on" is a date */
|
||||
_("%sTopic set by %s%s%s%s%s%s%s%s%s on %s"),
|
||||
weechat_prefix ("network"),
|
||||
irc_nick_color_for_server_message (server, ptr_nick, topic_nick),
|
||||
topic_nick,
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
(topic_address && topic_address[0]) ? " (" : "",
|
||||
IRC_COLOR_CHAT_HOST,
|
||||
(topic_address) ? topic_address : "",
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
(topic_address && topic_address[0]) ? ")" : "",
|
||||
IRC_COLOR_RESET,
|
||||
weechat_util_get_time_string (&datetime));
|
||||
}
|
||||
else
|
||||
{
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, NULL,
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
/* TRANSLATORS: "%s" after "on" is a date */
|
||||
_("%sTopic set on %s"),
|
||||
weechat_prefix ("network"),
|
||||
weechat_util_get_time_string (&datetime));
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -3259,6 +3280,9 @@ IRC_PROTOCOL_CALLBACK(333)
|
||||
}
|
||||
}
|
||||
|
||||
if (ptr_channel)
|
||||
weechat_hashtable_set (ptr_channel->join_msg_received, command, "1");
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -3930,133 +3954,137 @@ IRC_PROTOCOL_CALLBACK(366)
|
||||
ptr_channel = irc_channel_search (server, argv[3]);
|
||||
if (ptr_channel && ptr_channel->nicks)
|
||||
{
|
||||
/* display users on channel */
|
||||
infolist = weechat_infolist_get ("nicklist", ptr_channel->buffer, NULL);
|
||||
if (infolist)
|
||||
if (weechat_hashtable_has_key (ptr_channel->join_msg_received, command)
|
||||
|| weechat_hashtable_has_key (irc_config_hashtable_display_join_message, command))
|
||||
{
|
||||
length = 0;
|
||||
while (weechat_infolist_next (infolist))
|
||||
/* display users on channel */
|
||||
infolist = weechat_infolist_get ("nicklist", ptr_channel->buffer, NULL);
|
||||
if (infolist)
|
||||
{
|
||||
if (strcmp (weechat_infolist_string (infolist, "type"),
|
||||
"nick") == 0)
|
||||
length = 0;
|
||||
while (weechat_infolist_next (infolist))
|
||||
{
|
||||
ptr_option = weechat_config_get (weechat_infolist_string (infolist,
|
||||
"prefix_color"));
|
||||
length +=
|
||||
((ptr_option) ? strlen (weechat_color (weechat_config_string (ptr_option))) : 0) +
|
||||
strlen (weechat_infolist_string (infolist, "prefix")) +
|
||||
16 + /* nick color */
|
||||
strlen (weechat_infolist_string (infolist, "name")) +
|
||||
16 + /* reset color */
|
||||
1; /* space */
|
||||
}
|
||||
}
|
||||
if (length > 0)
|
||||
{
|
||||
string = malloc (length);
|
||||
if (string)
|
||||
{
|
||||
string[0] = '\0';
|
||||
i = 0;
|
||||
while (weechat_infolist_next (infolist))
|
||||
if (strcmp (weechat_infolist_string (infolist, "type"),
|
||||
"nick") == 0)
|
||||
{
|
||||
if (strcmp (weechat_infolist_string (infolist, "type"),
|
||||
"nick") == 0)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
strcat (string, IRC_COLOR_RESET);
|
||||
strcat (string, " ");
|
||||
}
|
||||
prefix = weechat_infolist_string (infolist, "prefix");
|
||||
if (prefix[0] && (prefix[0] != ' '))
|
||||
{
|
||||
prefix_color = weechat_infolist_string (infolist,
|
||||
"prefix_color");
|
||||
if (strchr (prefix_color, '.'))
|
||||
{
|
||||
ptr_option = weechat_config_get (weechat_infolist_string (infolist,
|
||||
"prefix_color"));
|
||||
if (ptr_option)
|
||||
strcat (string, weechat_color (weechat_config_string (ptr_option)));
|
||||
}
|
||||
else
|
||||
{
|
||||
strcat (string, weechat_color (prefix_color));
|
||||
}
|
||||
strcat (string, prefix);
|
||||
}
|
||||
nickname = weechat_infolist_string (infolist, "name");
|
||||
if (weechat_config_boolean (irc_config_look_color_nicks_in_names))
|
||||
{
|
||||
if (irc_server_strcasecmp (server, nickname, server->nick) == 0)
|
||||
strcat (string, IRC_COLOR_CHAT_NICK_SELF);
|
||||
else
|
||||
strcat (string, irc_nick_find_color (nickname));
|
||||
}
|
||||
else
|
||||
strcat (string, IRC_COLOR_RESET);
|
||||
strcat (string, nickname);
|
||||
i++;
|
||||
}
|
||||
ptr_option = weechat_config_get (weechat_infolist_string (infolist,
|
||||
"prefix_color"));
|
||||
length +=
|
||||
((ptr_option) ? strlen (weechat_color (weechat_config_string (ptr_option))) : 0) +
|
||||
strlen (weechat_infolist_string (infolist, "prefix")) +
|
||||
16 + /* nick color */
|
||||
strlen (weechat_infolist_string (infolist, "name")) +
|
||||
16 + /* reset color */
|
||||
1; /* space */
|
||||
}
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, "names",
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sNicks %s%s%s: %s[%s%s]"),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
ptr_channel->name,
|
||||
IRC_COLOR_RESET,
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
string,
|
||||
IRC_COLOR_CHAT_DELIMITERS);
|
||||
free (string);
|
||||
}
|
||||
if (length > 0)
|
||||
{
|
||||
string = malloc (length);
|
||||
if (string)
|
||||
{
|
||||
string[0] = '\0';
|
||||
i = 0;
|
||||
while (weechat_infolist_next (infolist))
|
||||
{
|
||||
if (strcmp (weechat_infolist_string (infolist, "type"),
|
||||
"nick") == 0)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
strcat (string, IRC_COLOR_RESET);
|
||||
strcat (string, " ");
|
||||
}
|
||||
prefix = weechat_infolist_string (infolist, "prefix");
|
||||
if (prefix[0] && (prefix[0] != ' '))
|
||||
{
|
||||
prefix_color = weechat_infolist_string (infolist,
|
||||
"prefix_color");
|
||||
if (strchr (prefix_color, '.'))
|
||||
{
|
||||
ptr_option = weechat_config_get (weechat_infolist_string (infolist,
|
||||
"prefix_color"));
|
||||
if (ptr_option)
|
||||
strcat (string, weechat_color (weechat_config_string (ptr_option)));
|
||||
}
|
||||
else
|
||||
{
|
||||
strcat (string, weechat_color (prefix_color));
|
||||
}
|
||||
strcat (string, prefix);
|
||||
}
|
||||
nickname = weechat_infolist_string (infolist, "name");
|
||||
if (weechat_config_boolean (irc_config_look_color_nicks_in_names))
|
||||
{
|
||||
if (irc_server_strcasecmp (server, nickname, server->nick) == 0)
|
||||
strcat (string, IRC_COLOR_CHAT_NICK_SELF);
|
||||
else
|
||||
strcat (string, irc_nick_find_color (nickname));
|
||||
}
|
||||
else
|
||||
strcat (string, IRC_COLOR_RESET);
|
||||
strcat (string, nickname);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, "names",
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sNicks %s%s%s: %s[%s%s]"),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
ptr_channel->name,
|
||||
IRC_COLOR_RESET,
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
string,
|
||||
IRC_COLOR_CHAT_DELIMITERS);
|
||||
free (string);
|
||||
}
|
||||
}
|
||||
weechat_infolist_free (infolist);
|
||||
}
|
||||
weechat_infolist_free (infolist);
|
||||
|
||||
/* display number of nicks, ops, halfops & voices on the channel */
|
||||
irc_nick_count (server, ptr_channel, &num_nicks, &num_op, &num_halfop,
|
||||
&num_voice, &num_normal);
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, "names",
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sChannel %s%s%s: %s%d%s %s %s(%s%d%s %s, "
|
||||
"%s%d%s %s, %s%d%s %s, %s%d%s %s%s)"),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
ptr_channel->name,
|
||||
IRC_COLOR_RESET,
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_nicks,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("nick", "nicks", num_nicks),
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_op,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("op", "ops", num_op),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_halfop,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("halfop", "halfops", num_halfop),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_voice,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("voice", "voices", num_voice),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_normal,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("normal", "normals", num_normal),
|
||||
IRC_COLOR_CHAT_DELIMITERS);
|
||||
}
|
||||
|
||||
/* display number of nicks, ops, halfops & voices on the channel */
|
||||
irc_nick_count (server, ptr_channel, &num_nicks, &num_op, &num_halfop,
|
||||
&num_voice, &num_normal);
|
||||
weechat_printf_date_tags (irc_msgbuffer_get_target_buffer (server, NULL,
|
||||
command, "names",
|
||||
ptr_channel->buffer),
|
||||
date,
|
||||
irc_protocol_tags (command, "irc_numeric", NULL),
|
||||
_("%sChannel %s%s%s: %s%d%s %s %s(%s%d%s %s, "
|
||||
"%s%d%s %s, %s%d%s %s, %s%d%s %s%s)"),
|
||||
weechat_prefix ("network"),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
ptr_channel->name,
|
||||
IRC_COLOR_RESET,
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_nicks,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("nick", "nicks", num_nicks),
|
||||
IRC_COLOR_CHAT_DELIMITERS,
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_op,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("op", "ops", num_op),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_halfop,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("halfop", "halfops", num_halfop),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_voice,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("voice", "voices", num_voice),
|
||||
IRC_COLOR_CHAT_CHANNEL,
|
||||
num_normal,
|
||||
IRC_COLOR_RESET,
|
||||
NG_("normal", "normals", num_normal),
|
||||
IRC_COLOR_CHAT_DELIMITERS);
|
||||
|
||||
if (!ptr_channel->names_received)
|
||||
if (!weechat_hashtable_has_key (ptr_channel->join_msg_received, command))
|
||||
{
|
||||
irc_command_mode_server (server, ptr_channel, NULL,
|
||||
IRC_SERVER_SEND_OUTQ_PRIO_LOW);
|
||||
@@ -4079,7 +4107,7 @@ IRC_PROTOCOL_CALLBACK(366)
|
||||
}
|
||||
|
||||
if (ptr_channel)
|
||||
ptr_channel->names_received = 1;
|
||||
weechat_hashtable_set (ptr_channel->join_msg_received, command, "1");
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -284,10 +284,11 @@ irc_upgrade_read_cb (void *data,
|
||||
int object_id,
|
||||
struct t_infolist *infolist)
|
||||
{
|
||||
int flags, sock, size, i, index, nicks_count;
|
||||
int flags, sock, size, i, index, nicks_count, num_items;
|
||||
long number;
|
||||
time_t join_time;
|
||||
char *buf, option_name[64], **nicks, *nick_join, *pos, *error;
|
||||
char **items;
|
||||
const char *buffer_name, *str, *nick;
|
||||
struct t_irc_nick *ptr_nick;
|
||||
struct t_irc_redirect *ptr_redirect;
|
||||
@@ -442,7 +443,21 @@ irc_upgrade_read_cb (void *data,
|
||||
str = weechat_infolist_string (infolist, "key");
|
||||
if (str)
|
||||
irc_upgrade_current_channel->key = strdup (str);
|
||||
irc_upgrade_current_channel->names_received = weechat_infolist_integer (infolist, "names_received");
|
||||
str = weechat_infolist_string (infolist, "join_msg_received");
|
||||
if (str)
|
||||
{
|
||||
items = weechat_string_split (str, ",", 0, 0,
|
||||
&num_items);
|
||||
if (items)
|
||||
{
|
||||
for (i = 0; i < num_items; i++)
|
||||
{
|
||||
weechat_hashtable_set (irc_upgrade_current_channel->join_msg_received,
|
||||
items[i], "1");
|
||||
}
|
||||
weechat_string_free_split (items);
|
||||
}
|
||||
}
|
||||
irc_upgrade_current_channel->checking_away = weechat_infolist_integer (infolist, "checking_away");
|
||||
str = weechat_infolist_string (infolist, "away_message");
|
||||
if (str)
|
||||
|
||||
Reference in New Issue
Block a user