From 1bea35736d72f4be9ead3bf5b5dfbf978daf5f3f Mon Sep 17 00:00:00 2001 From: pk910 Date: Thu, 20 Oct 2011 22:10:32 +0200 Subject: [PATCH] added get_userlist_if_invisible (WHO only if invisible users COULD be present) --- src/WHOHandler.c | 4 ++-- src/WHOHandler.h | 4 +++- src/cmd_neonserv_op.c | 2 +- src/cmd_neonserv_opall.c | 2 +- src/cmd_neonserv_peek.c | 2 +- src/cmd_neonserv_voice.c | 2 +- src/cmd_neonserv_voiceall.c | 2 +- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/WHOHandler.c b/src/WHOHandler.c index 25d2467..4ee579f 100644 --- a/src/WHOHandler.c +++ b/src/WHOHandler.c @@ -109,7 +109,7 @@ void get_userlist(struct ChanNode *chan, userlist_callback_t callback, void *dat callback(bot, chan, data); } -void get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data) { +void _get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data, int force) { struct ClientSocket *bot; for(bot = getBots(SOCKET_FLAG_READY, NULL); bot; bot = getBots(SOCKET_FLAG_READY, bot)) { if(isUserOnChan(bot->user, chan)) @@ -119,7 +119,7 @@ void get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t call //check if we really need to who the channel //invisible users can only be present if chanmode +D or +d is set! int do_who = (!(chan->flags & CHANFLAG_RECEIVED_USERLIST)) || (isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D')); - if(!do_who) { + if(!do_who && force) { struct ChanUser *chanuser; for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) { if(!(chanuser->user->flags & (USERFLAG_ISAUTHED | USERFLAG_ISIRCOP | USERFLAG_ISBOT)) && (time(0) - chanuser->user->last_who) > REWHO_TIMEOUT) { diff --git a/src/WHOHandler.h b/src/WHOHandler.h index 55dabf1..8a2684a 100644 --- a/src/WHOHandler.h +++ b/src/WHOHandler.h @@ -32,7 +32,9 @@ typedef USERAUTH_CALLBACK(userauth_callback_t); void recv_whohandler_354(struct ClientSocket *client, char **argv, unsigned int argc); void recv_whohandler_315(struct ClientSocket *client, char **argv, unsigned int argc); void get_userlist(struct ChanNode *chan, userlist_callback_t callback, void *data); -void get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data); +#define get_userlist_if_invisible(CHAN, CALLBACK, DATA) _get_userlist_with_invisible(CHAN, CALLBACK, DATA, 0) +#define get_userlist_with_invisible(CHAN, CALLBACK, DATA) _get_userlist_with_invisible(CHAN, CALLBACK, DATA, 1) +void _get_userlist_with_invisible(struct ChanNode *chan, userlist_callback_t callback, void *data, int force); void get_userauth(struct UserNode *user, userauth_callback_t callback, void *data); void free_whoqueue(); diff --git a/src/cmd_neonserv_op.c b/src/cmd_neonserv_op.c index 2b4d0ed..98fce17 100644 --- a/src/cmd_neonserv_op.c +++ b/src/cmd_neonserv_op.c @@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_op) { cache->user = user; cache->event = event; cache->nicks = strdup(merge_argv(argv, 0, argc)); - get_userlist_with_invisible(chan, neonserv_cmd_op_userlist_lookup, cache); + get_userlist_if_invisible(chan, neonserv_cmd_op_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_op_userlist_lookup) { diff --git a/src/cmd_neonserv_opall.c b/src/cmd_neonserv_opall.c index ebeee03..6f3e44a 100644 --- a/src/cmd_neonserv_opall.c +++ b/src/cmd_neonserv_opall.c @@ -49,7 +49,7 @@ CMD_BIND(neonserv_cmd_opall) { cache->nickmask = strdup(argv[1]); } else cache->nickmask = NULL; - get_userlist_with_invisible(chan, neonserv_cmd_opall_userlist_lookup, cache); + get_userlist_if_invisible(chan, neonserv_cmd_opall_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_opall_userlist_lookup) { diff --git a/src/cmd_neonserv_peek.c b/src/cmd_neonserv_peek.c index b3af164..210312a 100644 --- a/src/cmd_neonserv_peek.c +++ b/src/cmd_neonserv_peek.c @@ -37,7 +37,7 @@ CMD_BIND(neonserv_cmd_peek) { cache->client = client; cache->textclient = getTextBot(); cache->user = user; - get_userlist_with_invisible(chan, neonserv_cmd_peek_userlist_lookup, cache); + get_userlist_if_invisible(chan, neonserv_cmd_peek_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_peek_userlist_lookup) { diff --git a/src/cmd_neonserv_voice.c b/src/cmd_neonserv_voice.c index d98025e..2bf2698 100644 --- a/src/cmd_neonserv_voice.c +++ b/src/cmd_neonserv_voice.c @@ -41,7 +41,7 @@ CMD_BIND(neonserv_cmd_voice) { cache->user = user; cache->event = event; cache->nicks = strdup(merge_argv(argv, 0, argc)); - get_userlist_with_invisible(chan, neonserv_cmd_voice_userlist_lookup, cache); + get_userlist_if_invisible(chan, neonserv_cmd_voice_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_voice_userlist_lookup) { diff --git a/src/cmd_neonserv_voiceall.c b/src/cmd_neonserv_voiceall.c index d16bf84..a54f92a 100644 --- a/src/cmd_neonserv_voiceall.c +++ b/src/cmd_neonserv_voiceall.c @@ -44,7 +44,7 @@ CMD_BIND(neonserv_cmd_voiceall) { cache->nickmask = strdup(argv[0]); } else cache->nickmask = NULL; - get_userlist_with_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache); + get_userlist_if_invisible(chan, neonserv_cmd_voiceall_userlist_lookup, cache); } static USERLIST_CALLBACK(neonserv_cmd_voiceall_userlist_lookup) { -- 2.20.1