diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2006-08-25 16:30:10 +0000 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2006-08-25 16:30:10 +0000 |
commit | 00fbd7ad56d4520bac6d7b8240ebf7148e2bc73f (patch) | |
tree | 22aab2893a586b17fd2e7e8ea7e7acb234aea001 /src/irc | |
parent | 77e3fb3c8312031572e6aa6d1962a9bb3faf68b8 (diff) | |
download | weechat-00fbd7ad56d4520bac6d7b8240ebf7148e2bc73f.zip |
Added server default notify level (task #5634), fixed crashs with /buffer and /charset commands when not connected to any server (bug #17525)
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/irc-channel.c | 27 | ||||
-rw-r--r-- | src/irc/irc-server.c | 47 | ||||
-rw-r--r-- | src/irc/irc.h | 2 |
3 files changed, 61 insertions, 15 deletions
diff --git a/src/irc/irc-channel.c b/src/irc/irc-channel.c index 63f0849eb..117c549f3 100644 --- a/src/irc/irc-channel.c +++ b/src/irc/irc-channel.c @@ -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); } /* diff --git a/src/irc/irc-server.c b/src/irc/irc-server.c index 498cdc09e..0df519975 100644 --- a/src/irc/irc-server.c +++ b/src/irc/irc-server.c @@ -1936,6 +1936,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) */ diff --git a/src/irc/irc.h b/src/irc/irc.h index 3b1469046..454834c3c 100644 --- a/src/irc/irc.h +++ b/src/irc/irc.h @@ -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) */ |