mirror of
https://github.com/weechat/weechat.git
synced 2026-07-04 16:53:14 +02:00
Added server default notify level (task #5634), fixed crashs with /buffer and /charset commands when not connected to any server (bug #17525)
This commit is contained in:
+12
-15
@@ -488,7 +488,7 @@ int
|
||||
channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
|
||||
{
|
||||
char *name, *pos, *pos2;
|
||||
int notify;
|
||||
int server_default_notify, notify;
|
||||
|
||||
if ((!server) || (!channel))
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
@@ -496,26 +496,28 @@ channel_get_notify_level (t_irc_server *server, t_irc_channel *channel)
|
||||
if ((!server->notify_levels) || (!server->notify_levels[0]))
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
|
||||
server_default_notify = server_get_default_notify_level (server);
|
||||
|
||||
name = (char *) malloc (strlen (channel->name) + 2);
|
||||
strcpy (name, channel->name);
|
||||
strcat (name, ":");
|
||||
pos = strstr (server->notify_levels, name);
|
||||
free (name);
|
||||
if (!pos)
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
return server_default_notify;
|
||||
|
||||
pos2 = pos + strlen (channel->name);
|
||||
if (pos2[0] != ':')
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
return server_default_notify;
|
||||
pos2++;
|
||||
if (!pos2[0])
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
return server_default_notify;
|
||||
|
||||
notify = (int)(pos2[0] - '0');
|
||||
if ((notify < NOTIFY_LEVEL_MIN) || (notify > NOTIFY_LEVEL_MAX))
|
||||
return NOTIFY_LEVEL_DEFAULT;
|
||||
else
|
||||
if ((notify >= NOTIFY_LEVEL_MIN) && (notify <= NOTIFY_LEVEL_MAX))
|
||||
return notify;
|
||||
|
||||
return server_default_notify;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -530,14 +532,9 @@ channel_set_notify_level (t_irc_server *server, t_irc_channel *channel, int noti
|
||||
if ((!server) || (!channel))
|
||||
return;
|
||||
|
||||
if (notify == NOTIFY_LEVEL_DEFAULT)
|
||||
config_option_list_remove (&(server->notify_levels), channel->name);
|
||||
else
|
||||
{
|
||||
level_string[0] = notify + '0';
|
||||
level_string[1] = '\0';
|
||||
config_option_list_set (&(server->notify_levels), channel->name, level_string);
|
||||
}
|
||||
level_string[0] = notify + '0';
|
||||
level_string[1] = '\0';
|
||||
config_option_list_set (&(server->notify_levels), channel->name, level_string);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1935,6 +1935,53 @@ server_set_away (t_irc_server *server, char *nick, int is_away)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_get_default_notify_level: get default notify level for server
|
||||
*/
|
||||
|
||||
int
|
||||
server_get_default_notify_level (t_irc_server *server)
|
||||
{
|
||||
int notify, value;
|
||||
char *pos;
|
||||
|
||||
notify = NOTIFY_LEVEL_DEFAULT;
|
||||
|
||||
if (!server)
|
||||
return notify;
|
||||
|
||||
pos = strstr (server->notify_levels, "*:");
|
||||
if (pos)
|
||||
{
|
||||
pos += 2;
|
||||
if (pos[0])
|
||||
{
|
||||
value = (int)(pos[0] - '0');
|
||||
if ((value >= NOTIFY_LEVEL_MIN) && (value <= NOTIFY_LEVEL_MAX))
|
||||
notify = value;
|
||||
}
|
||||
}
|
||||
|
||||
return notify;
|
||||
}
|
||||
|
||||
/*
|
||||
* server_set_default_notify_level: set default notify level for server
|
||||
*/
|
||||
|
||||
void
|
||||
server_set_default_notify_level (t_irc_server *server, int notify)
|
||||
{
|
||||
char level_string[2];
|
||||
|
||||
if (server)
|
||||
{
|
||||
level_string[0] = notify + '0';
|
||||
level_string[1] = '\0';
|
||||
config_option_list_set (&(server->notify_levels), "*", level_string);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* server_print_log: print server infos in log (usually for crash dump)
|
||||
*/
|
||||
|
||||
@@ -355,6 +355,8 @@ extern int server_name_already_exists (char *);
|
||||
extern void server_remove_away ();
|
||||
extern void server_check_away ();
|
||||
extern void server_set_away (t_irc_server *, char *, int);
|
||||
extern int server_get_default_notify_level (t_irc_server *);
|
||||
extern void server_set_default_notify_level (t_irc_server *, int);
|
||||
extern void server_print_log (t_irc_server *);
|
||||
|
||||
/* proxy functions (irc-server.c) */
|
||||
|
||||
Reference in New Issue
Block a user