Merge branch 'master' into IOMultiplexer
authorpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 04:15:57 +0000 (06:15 +0200)
committerpk910 <philipp@zoelle1.de>
Mon, 27 Aug 2012 04:15:57 +0000 (06:15 +0200)
src/IRCEvents.c
src/IRCEvents.h
src/IRCParser.c
src/main.c
src/modules.c
src/modules/module.h
src/version.h

index 2ef7f3f63679e1db208870c4702672f653c30161..b4eba22e0fcf2eab39747cd18796bc9c81c2890a 100644 (file)
@@ -48,8 +48,9 @@ static void **binds;
 #define BIND_TYPE_REGISTERED 16
 #define BIND_TYPE_FREEUSER   17
 #define BIND_TYPE_FREECHAN   18
+#define BIND_TYPE_RELOAD     19
 
-#define TOTAL_BIND_TYPES     19
+#define TOTAL_BIND_TYPES     20
 
 void init_bind() {
     binds = calloc(TOTAL_BIND_TYPES, sizeof(*binds));
@@ -221,3 +222,7 @@ FUNC_EVENT(freeuser, freeuser_func_t, BIND_TYPE_FREEUSER, (struct UserNode *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))
+
+FUNC_BIND(reload, reload_func_t, BIND_TYPE_RELOAD)
+FUNC_UNBIND(reload, reload_func_t, BIND_TYPE_RELOAD)
+FUNC_EVENT(reload, reload_func_t, BIND_TYPE_RELOAD, (int initialization), (initialization))
\ No newline at end of file
index e3190378265a656bd7f2f78bda94f5eff31be1ad..2b8e9470fd141108335521dd9c1adb38a20ded94 100644 (file)
@@ -156,4 +156,11 @@ typedef int freechan_func_t(struct ChanNode *chan);
 int event_freechan(struct ChanNode *chan);
 #endif
 
+typedef int reload_func_t(int initialization);
+#ifndef DND_FUNCTIONS
+/* MODULAR ACCESSIBLE */ int bind_reload(reload_func_t *func, int module_id);
+/* MODULAR ACCESSIBLE */ void unbind_reload(reload_func_t *func);
+int event_reload(int initialization);
+#endif
+
 #endif
index 2d9fbbf5b815cea2dc3c164a56ef5c2aba04cbb6..f7ff777d877405dca80242be84124731e8f35495 100644 (file)
@@ -395,13 +395,16 @@ static IRC_CMD(raw_quit) {
     struct ChanUser *chanuser, *next_chanuser;
     for(chanuser = getUserChannels(user, NULL); chanuser; chanuser = next_chanuser) {
         next_chanuser = getUserChannels(user, chanuser);
-        chanuser->visCount--;
-        if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) {
-            delChanUser(chanuser, 0); //not free, yet!
-            event_part(chanuser, 1, argv[0]);
-            if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
-                check_full_rejoin(chanuser->chan);
-            freeChanUser(chanuser);
+        //decrease visCount counter only if client is in the channel
+        if(isUserOnChan(client->user, chanuser->chan)) {
+            chanuser->visCount--;
+            if(chanuser->visCount <= 0 && !(user->flags & USERFLAG_WAS_REGISTERING)) {
+                delChanUser(chanuser, 0); //not free, yet!
+                event_part(chanuser, 1, argv[0]);
+                if((chanuser->chan->flags & CHANFLAG_RECEIVED_USERLIST) && !(chanuser->chan->flags & CHANFLAG_REJOINING))
+                    check_full_rejoin(chanuser->chan);
+                freeChanUser(chanuser);
+            }
         }
     }
     
index d585ada9e62872c3325a0f75219c8dc1554704de..11272635f808d570dcb0ede01f3be65794902659 100644 (file)
@@ -202,6 +202,7 @@ int main(int argc, char *argv[]) {
         fprintf(stderr, "Unable to load " CONF_FILE "\n");
         exit(0);
     }
+    event_reload(1);
     #if HAVE_THREADS
     THREAD_MUTEX_INIT(log_sync);
     #endif
@@ -366,6 +367,7 @@ void stop_bot() {
 
 void reload_config() {
     loadConfig(CONF_FILE);
+    event_reload(0);
 }
 
 static int getCurrentSecondsOfDay() {
index eda8f46f479762e434ea537db06a7ef3602356b5..b451c0d25614683f4293d7c13704747cf93a3f34 100644 (file)
@@ -113,8 +113,8 @@ void *global_functions[] = {
 /* 054 */ (Function) unbind_nick,
 /* 055 */ (Function) bind_part,
 /* 056 */ (Function) unbind_part,
-/* 057 */ (Function) NULL, /* deprecated */
-/* 058 */ (Function) NULL, /* deprecated */
+/* 057 */ (Function) bind_reload,
+/* 058 */ (Function) unbind_reload,
 /* 059 */ (Function) bind_kick,
 /* 060 */ (Function) unbind_kick,
 /* 061 */ (Function) bind_topic,
index 5e203a76e506e60f937bc43811d73634b0331173..1a8426c06c1894fac726fb3d665823187535df91 100644 (file)
@@ -84,8 +84,8 @@ extern int module_id;
 /* 054 */ #define unbind_nick ((void (*)(nick_func_t *))global[54])
 /* 055 */ #define bind_part ((int (*)(part_func_t *, int))global[55])
 /* 056 */ #define unbind_part ((void (*)(part_func_t *))global[56])
-/* 057 */ /* deprecated */
-/* 058 */ /* deprecated */
+/* 057 */ #define bind_reload ((int (*)(reload_func_t *, int))global[57])
+/* 058 */ #define unbind_reload ((void (*)(reload_func_t *))global[58])
 /* 059 */ #define bind_kick ((int (*)(kick_func_t *, int))global[59])
 /* 060 */ #define unbind_kick ((void (*)(kick_func_t *))global[60])
 /* 061 */ #define bind_topic ((int (*)(topic_func_t *, int))global[61])
index 26a178b57f33e83f170445949efd5160513efea2..2b653c2b12e70ee1357b4834c2746d311f91e821 100644 (file)
@@ -19,7 +19,7 @@
 
 #include "main.h"
 
-#define MODULE_VERSION 5
+#define MODULE_VERSION 6
 
 #ifndef DND_FUNCTIONS
 extern const char *compilation;