summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2006-08-25 16:30:10 +0000
committerSebastien Helleu <flashcode@flashtux.org>2006-08-25 16:30:10 +0000
commit00fbd7ad56d4520bac6d7b8240ebf7148e2bc73f (patch)
tree22aab2893a586b17fd2e7e8ea7e7acb234aea001 /src/irc
parent77e3fb3c8312031572e6aa6d1962a9bb3faf68b8 (diff)
downloadweechat-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.c27
-rw-r--r--src/irc/irc-server.c47
-rw-r--r--src/irc/irc.h2
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) */