added events for FreeUser & FreeChan (triggered just before freeing a UserNode/ChanNode)
authorpk910 <philipp@zoelle1.de>
Wed, 16 Nov 2011 15:50:45 +0000 (16:50 +0100)
committerpk910 <philipp@zoelle1.de>
Thu, 17 Nov 2011 16:14:52 +0000 (17:14 +0100)
src/ChanNode.c
src/IRCEvents.c
src/IRCEvents.h
src/UserNode.c

index 55f1302720f0684fb2bdc6cb7fab4ac8518d3ea7..bafc3bd055e9ca8263bc5b2529a6b726ccc7eaae 100644 (file)
@@ -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) {
index a8239a9c420012c91cdfcd4a537c49c1bc285e9b..6d813fe9831e548bdbe2a8f5da92dc8a844c9282 100644 (file)
@@ -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))
index 8d5ff5a37c8cc6256eb0ff8c6577bc56983eef04..86d310fa5ac6b2100838da19a91c576595c93ac7 100644 (file)
@@ -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
index e4d73cac70bc8e33817c34f3657053aa61c209bf..7ab2d08307f9ea54d67a0f95a90c10a0ed6196b8 100644 (file)
@@ -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) {