X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fcmd_neonserv_up.c;h=930df02331b38d57241671a41490da682d4cfb72;hb=b53d0c5f88063f075a48a0426f9d5d6b3490b9fc;hp=6bdda2f424b271cfe8fa655b20b03cb1e945dd7d;hpb=55bcc9aad6a4c85d10b47fb8639b4d2255059051;p=NeonServV5.git diff --git a/src/cmd_neonserv_up.c b/src/cmd_neonserv_up.c index 6bdda2f..930df02 100644 --- a/src/cmd_neonserv_up.c +++ b/src/cmd_neonserv_up.c @@ -1,5 +1,5 @@ -/* cmd_neonserv_up.c - NeonServ v5.2 - * Copyright (C) 2011 Philipp Kreil (pk910) +/* cmd_neonserv_up.c - NeonServ v5.3 + * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,7 +21,40 @@ * no arguments */ +struct neonserv_cmd_up_cache { + struct ClientSocket *client; + struct ClientSocket *textclient; + struct UserNode *user; + struct Event *event; +}; + +static void neonserv_cmd_up_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event); +static USERLIST_CALLBACK(neonserv_cmd_up_userlist_lookup); + CMD_BIND(neonserv_cmd_up) { + if(isModeSet(chan->modes, 'd') || isModeSet(chan->modes, 'D')) { + struct neonserv_cmd_up_cache *cache = malloc(sizeof(*cache)); + if (!cache) { + perror("malloc() failed"); + return; + } + cache->client = client; + cache->textclient = getTextBot(); + cache->user = user; + cache->event = event; + get_userlist_if_invisible(chan, neonserv_cmd_up_userlist_lookup, cache); + } else { + neonserv_cmd_up_async1(client, getTextBot(), user, chan, event); + } +} + +static USERLIST_CALLBACK(neonserv_cmd_up_userlist_lookup) { + struct neonserv_cmd_up_cache *cache = data; + neonserv_cmd_up_async1(cache->client, cache->textclient, cache->user, chan, cache->event); + free(cache); +} + +static void neonserv_cmd_up_async1(struct ClientSocket *client, struct ClientSocket *textclient, struct UserNode *user, struct ChanNode *chan, struct Event *event) { struct ChanUser *chanuser = getChanUser(user, chan); if(!chanuser) { reply(getTextBot(), user, "NS_NOT_ON_CHANNEL_YOU", chan->name);