added get_userlist_if_invisible (WHO only if invisible users COULD be present)
authorpk910 <philipp@zoelle1.de>
Thu, 20 Oct 2011 20:10:32 +0000 (22:10 +0200)
committerpk910 <philipp@zoelle1.de>
Thu, 20 Oct 2011 20:10:32 +0000 (22:10 +0200)
src/WHOHandler.c
src/WHOHandler.h
src/cmd_neonserv_op.c
src/cmd_neonserv_opall.c
src/cmd_neonserv_peek.c
src/cmd_neonserv_voice.c
src/cmd_neonserv_voiceall.c

index 25d2467f8acef2f17e03e369a395597fc2ffeff0..4ee579fc2c1ef39eca71da05634c65ff12c52148 100644 (file)
@@ -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) {
index 55dabf19a6ebc5e669df1d4860ff524fbed885a9..8a2684afdb234903af04a8cb289b5bd26dfa6362 100644 (file)
@@ -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();
 
index 2b4d0ede08347f4be70de151afad46d4acd28b76..98fce1744b89da80e770c85be6ccaee9ca552d0f 100644 (file)
@@ -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) {
index ebeee03272e4505fdd8abe0ac6576bf0c3409587..6f3e44a402438a714e8dc22c60f984c27e196157 100644 (file)
@@ -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) {
index b3af164199e32958e373a1b0e190f1e5b9dbd86c..210312afc7a5b8f30ccb6d826545d76a0dbdba75 100644 (file)
@@ -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) {
index d98025e7c491b6a60ac7d56f7f52c2f569747068..2bf2698072f6c4c1c215af0fb1bd63653cc335c0 100644 (file)
@@ -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) {
index d16bf84b08f19ecc924375be277d9a0c1311ea8f..a54f92ab7971f71a51099881e89a38ea9778a74d 100644 (file)
@@ -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) {