From: pk910 Date: Wed, 16 Nov 2011 15:50:45 +0000 (+0100) Subject: added events for FreeUser & FreeChan (triggered just before freeing a UserNode/ChanNode) X-Git-Tag: v5.3~174 X-Git-Url: http://git.pk910.de/?p=NeonServV5.git;a=commitdiff_plain;h=336aac7dbdb3597f3d80423aa07239fad5287046 added events for FreeUser & FreeChan (triggered just before freeing a UserNode/ChanNode) --- diff --git a/src/ChanNode.c b/src/ChanNode.c index 55f1302..bafc3bd 100644 --- a/src/ChanNode.c +++ b/src/ChanNode.c @@ -21,6 +21,7 @@ #include "modcmd.h" #include "ModeNode.h" #include "bot_NeonSpam.h" +#include "IRCEvents.h" static struct ChanNode **chanList; @@ -211,6 +212,7 @@ void delChannel(struct ChanNode* chan, int freeChan) { } void freeChanNode(struct ChanNode* chan) { + event_freechan(chan); if(chan->trigger) { struct trigger_cache *trigger, *next_trigger; for(trigger = chan->trigger; trigger; trigger = next_trigger) { diff --git a/src/IRCEvents.c b/src/IRCEvents.c index a8239a9..6d813fe 100644 --- a/src/IRCEvents.c +++ b/src/IRCEvents.c @@ -45,8 +45,10 @@ static void **binds; #define BIND_TYPE_RAW 14 #define BIND_TYPE_BOT_READY 15 #define BIND_TYPE_REGISTERED 16 +#define BIND_TYPE_FREEUSER 17 +#define BIND_TYPE_FREECHAN 18 -#define TOTAL_BIND_TYPES 17 +#define TOTAL_BIND_TYPES 19 void init_bind() { binds = calloc(TOTAL_BIND_TYPES, sizeof(*binds)); @@ -204,3 +206,11 @@ int event_registered(struct UserNode *old_user, struct UserNode *new_user) { post_event(BIND_TYPE_REGISTERED); return ret; } + +FUNC_BIND(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER) +FUNC_UNBIND(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER) +FUNC_EVENT(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER, (struct UserNode *user), (user)) + +FUNC_BIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN) +FUNC_UNBIND(freechan, freechan_func_t, BIND_TYPE_FREECHAN) +FUNC_EVENT(freechan, freechan_func_t, BIND_TYPE_FREECHAN, (struct ChanNode *chan), (chan)) diff --git a/src/IRCEvents.h b/src/IRCEvents.h index 8d5ff5a..86d310f 100644 --- a/src/IRCEvents.h +++ b/src/IRCEvents.h @@ -112,4 +112,14 @@ int bind_registered(registered_func_t *func); void unbind_registered(registered_func_t *func); int event_registered(struct UserNode *old_user, struct UserNode *new_user); +typedef int freeuser_func_t(struct UserNode *user); +int bind_freeuser(freeuser_func_t *func); +void unbind_freeuser(freeuser_func_t *func); +int event_freeuser(struct UserNode *user); + +typedef int freechan_func_t(struct ChanNode *chan); +int bind_freechan(freechan_func_t *func); +void unbind_freechan(freechan_func_t *func); +int event_freechan(struct ChanNode *chan); + #endif \ No newline at end of file diff --git a/src/UserNode.c b/src/UserNode.c index e4d73ca..7ab2d08 100644 --- a/src/UserNode.c +++ b/src/UserNode.c @@ -17,6 +17,7 @@ #include "UserNode.h" #include "ChanUser.h" #include "tools.h" +#include "IRCEvents.h" static struct UserNode **userList; @@ -338,6 +339,7 @@ int renameUser(struct UserNode* user, const char *new_nick) { void delUser(struct UserNode* user, int freeUser) { int userListIndex = get_nicklist_entry(user->nick[0]); if(userListIndex == -1) return; + event_freeuser(user); struct UserNode *cuser, *last_user = NULL; for(cuser = userList[userListIndex]; cuser; cuser = cuser->next) { if(cuser == user) {