Fix bug with IRC ignore (a ignore on nick was ignoring othernick), fix completion of command /ignore, remove obsolete alias /unig
This commit is contained in:
parent
12bc7f13e1
commit
c15c536b35
@ -603,7 +603,6 @@ alias_config_write_default (void *data,
|
|||||||
weechat_config_write_line (config_file, "SIGNOFF", "%s", "\"quit\"");
|
weechat_config_write_line (config_file, "SIGNOFF", "%s", "\"quit\"");
|
||||||
weechat_config_write_line (config_file, "T", "%s", "\"topic\"");
|
weechat_config_write_line (config_file, "T", "%s", "\"topic\"");
|
||||||
weechat_config_write_line (config_file, "UB", "%s", "\"unban\"");
|
weechat_config_write_line (config_file, "UB", "%s", "\"unban\"");
|
||||||
weechat_config_write_line (config_file, "UNIG", "%s", "\"unignore\"");
|
|
||||||
weechat_config_write_line (config_file, "W", "%s", "\"who\"");
|
weechat_config_write_line (config_file, "W", "%s", "\"who\"");
|
||||||
weechat_config_write_line (config_file, "WC", "%s", "\"window merge\"");
|
weechat_config_write_line (config_file, "WC", "%s", "\"window merge\"");
|
||||||
weechat_config_write_line (config_file, "WI", "%s", "\"whois\"");
|
weechat_config_write_line (config_file, "WI", "%s", "\"whois\"");
|
||||||
|
@ -1309,6 +1309,10 @@ irc_command_halfop (void *data, struct t_gui_buffer *buffer, int argc,
|
|||||||
void
|
void
|
||||||
irc_command_ignore_display (struct t_irc_ignore *ignore)
|
irc_command_ignore_display (struct t_irc_ignore *ignore)
|
||||||
{
|
{
|
||||||
|
char *mask;
|
||||||
|
|
||||||
|
mask = weechat_strndup (ignore->mask + 1, strlen (ignore->mask) - 2);
|
||||||
|
|
||||||
weechat_printf (NULL,
|
weechat_printf (NULL,
|
||||||
_(" %s[%s%d%s]%s mask: %s / server: %s / channel: %s"),
|
_(" %s[%s%d%s]%s mask: %s / server: %s / channel: %s"),
|
||||||
IRC_COLOR_CHAT_DELIMITERS,
|
IRC_COLOR_CHAT_DELIMITERS,
|
||||||
@ -1316,11 +1320,14 @@ irc_command_ignore_display (struct t_irc_ignore *ignore)
|
|||||||
ignore->number,
|
ignore->number,
|
||||||
IRC_COLOR_CHAT_DELIMITERS,
|
IRC_COLOR_CHAT_DELIMITERS,
|
||||||
IRC_COLOR_CHAT,
|
IRC_COLOR_CHAT,
|
||||||
ignore->mask,
|
(mask) ? mask : ignore->mask,
|
||||||
(ignore->server) ?
|
(ignore->server) ?
|
||||||
ignore->server : "*",
|
ignore->server : "*",
|
||||||
(ignore->channel) ?
|
(ignore->channel) ?
|
||||||
ignore->channel : "*");
|
ignore->channel : "*");
|
||||||
|
|
||||||
|
if (mask)
|
||||||
|
free (mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3892,7 +3899,8 @@ irc_command_init ()
|
|||||||
" /ignore add toto@domain.com freenode\n"
|
" /ignore add toto@domain.com freenode\n"
|
||||||
" ignore host \"toto*@*.domain.com\" on freenode/#weechat:\n"
|
" ignore host \"toto*@*.domain.com\" on freenode/#weechat:\n"
|
||||||
" /ignore add toto*@*.domain.com freenode #weechat"),
|
" /ignore add toto*@*.domain.com freenode #weechat"),
|
||||||
NULL, &irc_command_ignore, NULL);
|
"list|add|del %(irc_channel_nicks_hosts) "
|
||||||
|
"%(irc_servers) %(irc_channels) ", &irc_command_ignore, NULL);
|
||||||
weechat_hook_command ("info",
|
weechat_hook_command ("info",
|
||||||
N_("get information describing the server"),
|
N_("get information describing the server"),
|
||||||
N_("[target]"),
|
N_("[target]"),
|
||||||
|
@ -117,17 +117,36 @@ irc_ignore_new (const char *mask, const char *server, const char *channel)
|
|||||||
{
|
{
|
||||||
struct t_irc_ignore *new_ignore;
|
struct t_irc_ignore *new_ignore;
|
||||||
regex_t *regex;
|
regex_t *regex;
|
||||||
|
char *complete_mask;
|
||||||
|
|
||||||
if (!mask)
|
if (!mask || !mask[0])
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
complete_mask = malloc (1 + strlen (mask) + 1 + 1);
|
||||||
|
if (!complete_mask)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (mask[0] == '^')
|
||||||
|
strcpy (complete_mask, mask);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strcpy (complete_mask, "^");
|
||||||
|
strcat (complete_mask, mask);
|
||||||
|
}
|
||||||
|
if (complete_mask[strlen (complete_mask) - 1] != '$')
|
||||||
|
strcat (complete_mask, "$");
|
||||||
|
|
||||||
regex = malloc (sizeof (*regex));
|
regex = malloc (sizeof (*regex));
|
||||||
if (!regex)
|
if (!regex)
|
||||||
|
{
|
||||||
|
free (complete_mask);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (regcomp (regex, mask, REG_NOSUB | REG_ICASE) != 0)
|
if (regcomp (regex, complete_mask, REG_NOSUB | REG_ICASE) != 0)
|
||||||
{
|
{
|
||||||
free (regex);
|
free (regex);
|
||||||
|
free (complete_mask);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +154,7 @@ irc_ignore_new (const char *mask, const char *server, const char *channel)
|
|||||||
if (new_ignore)
|
if (new_ignore)
|
||||||
{
|
{
|
||||||
new_ignore->number = (last_irc_ignore) ? last_irc_ignore->number + 1 : 1;
|
new_ignore->number = (last_irc_ignore) ? last_irc_ignore->number + 1 : 1;
|
||||||
new_ignore->mask = strdup (mask);
|
new_ignore->mask = strdup (complete_mask);
|
||||||
new_ignore->regex_mask = regex;
|
new_ignore->regex_mask = regex;
|
||||||
new_ignore->server = (server) ? strdup (server) : strdup ("*");
|
new_ignore->server = (server) ? strdup (server) : strdup ("*");
|
||||||
new_ignore->channel = (channel) ? strdup (channel) : strdup ("*");
|
new_ignore->channel = (channel) ? strdup (channel) : strdup ("*");
|
||||||
@ -150,6 +169,8 @@ irc_ignore_new (const char *mask, const char *server, const char *channel)
|
|||||||
new_ignore->next_ignore = NULL;
|
new_ignore->next_ignore = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free (complete_mask);
|
||||||
|
|
||||||
return new_ignore;
|
return new_ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,9 +214,9 @@ irc_ignore_check (struct t_irc_server *server, struct t_irc_channel *channel,
|
|||||||
|
|
||||||
if (server_match && channel_match)
|
if (server_match && channel_match)
|
||||||
{
|
{
|
||||||
if (nick && (strcmp (ptr_ignore->mask, nick) == 0))
|
if (nick && (regexec (ptr_ignore->regex_mask, nick, 0, NULL, 0) == 0))
|
||||||
return 1;
|
return 1;
|
||||||
if (host && regexec (ptr_ignore->regex_mask, host, 0, NULL, 0) == 0)
|
if (host && (regexec (ptr_ignore->regex_mask, host, 0, NULL, 0) == 0))
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user