summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fe-common/irc/fe-netjoin.c18
-rw-r--r--src/fe-common/irc/fe-netsplit.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/src/fe-common/irc/fe-netjoin.c b/src/fe-common/irc/fe-netjoin.c
index da786f1d..f00f1b03 100644
--- a/src/fe-common/irc/fe-netjoin.c
+++ b/src/fe-common/irc/fe-netjoin.c
@@ -325,11 +325,27 @@ static int netjoin_set_nickmode(NETJOIN_REC *rec, const char *channel,
char mode)
{
GSList *pos;
+ char oldmode = 0;
+
+ for (pos = rec->now_channels; pos != NULL; pos = pos->next) {
+ char *chan = pos->data;
+ char *realchannel = chan +
+ (isnickflag(*chan) && ischannel(chan[1]));
+ if (strcasecmp(realchannel, channel) == 0) {
+ if (strcasecmp(chan, channel) != 0)
+ oldmode = chan[0];
+ break;
+ }
+ }
- pos = gslist_find_icase_string(rec->now_channels, channel);
if (pos == NULL)
return FALSE;
+ if (oldmode == '@')
+ return TRUE;
+ if (oldmode == '%' && mode == '+')
+ return TRUE;
+
g_free(pos->data);
pos->data = g_strdup_printf("%c%s", mode, channel);
return TRUE;
diff --git a/src/fe-common/irc/fe-netsplit.c b/src/fe-common/irc/fe-netsplit.c
index 7e5d602e..dfa3a1fc 100644
--- a/src/fe-common/irc/fe-netsplit.c
+++ b/src/fe-common/irc/fe-netsplit.c
@@ -132,6 +132,8 @@ static void get_server_splits(void *key, NETSPLIT_REC *split,
chanrec->nick_count <= netsplit_nicks_hide_threshold) {
if (splitchan->op)
g_string_append_c(chanrec->nicks, '@');
+ else if (splitchan->voice)
+ g_string_append_c(chanrec->nicks, '+');
g_string_sprintfa(chanrec->nicks, "%s, ", split->nick);
if (chanrec->nick_count == netsplit_max_nicks)