changeset 1683:b09f82f61745

Split HOOK_INTERNAL
author Myhailo Danylenko <isbear@ukrpost.net>
date Tue, 19 Jan 2010 16:09:27 +0200
parents d1e8fb14ce2d
children 95df4ea512c8
files mcabber/doc/HOWTO_modules.txt mcabber/mcabber/hooks.c mcabber/mcabber/hooks.h mcabber/mcabber/xmpp.c mcabber/mcabber/xmpp_iqrequest.c
diffstat 5 files changed, 50 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/doc/HOWTO_modules.txt	Tue Jan 19 09:53:12 2010 +0200
+++ b/mcabber/doc/HOWTO_modules.txt	Tue Jan 19 16:09:27 2010 +0200
@@ -148,8 +148,8 @@
      hook-status-change. Old one should still be
      available as the current status of the user.
    * message - new status message
- - hook-post-connect (HOOK_INTERNAL) with no parameters
- - hook-pre-disconnect (HOOK_INTERNAL) with no
+ - hook-post-connect (HOOK_POST_CONNECT) with no parameters
+ - hook-pre-disconnect (HOOK_PRE_DICSONNECT) with no
    parameters
 
 --------------------------------------------------------
--- a/mcabber/mcabber/hooks.c	Tue Jan 19 09:53:12 2010 +0200
+++ b/mcabber/mcabber/hooks.c	Tue Jan 19 16:09:27 2010 +0200
@@ -502,13 +502,9 @@
   //hlog_write_status(NULL, 0, status);
 }
 
-
-/* Internal commands */
-
-void hook_execute_internal(const char *hookname)
+void hk_postconnect(void)
 {
   const char *hook_command;
-  char *buf;
   char *cmdline;
 
 #ifdef MODULES_ENABLE
@@ -516,34 +512,67 @@
     GSList *h = hk_handler_queue;
     if (h) {
       hk_arg_t args[] = {
-        { "hook", hookname },
+        { "hook", "hook-post-connect" },
         { NULL, NULL },
       };
       while (h) {
         hook_list_data_t *data = h->data;
-        if (data->flags & HOOK_INTERNAL)
-          (data->handler) (HOOK_INTERNAL, args, data->userdata);
+        if (data->flags & HOOK_POST_CONNECT)
+          (data->handler) (HOOK_POST_CONNECT, args, data->userdata);
         h = g_slist_next (h);
       }
     }
   }
 #endif
 
-  hook_command = settings_opt_get(hookname);
+  hook_command = settings_opt_get("hook-post-connect");
   if (!hook_command)
     return;
 
-  buf = g_strdup_printf("Running %s...", hookname);
-  scr_LogPrint(LPRINT_LOGNORM, "%s", buf);
+  scr_LogPrint(LPRINT_LOGNORM, "Running hook-post-connect...");
 
   cmdline = from_utf8(hook_command);
   if (process_command(cmdline, TRUE) == 255)
     mcabber_set_terminate_ui();
 
   g_free(cmdline);
-  g_free(buf);
 }
 
+void hk_predisconnect(void)
+{
+  const char *hook_command;
+  char *cmdline;
+
+#ifdef MODULES_ENABLE
+  {
+    GSList *h = hk_handler_queue;
+    if (h) {
+      hk_arg_t args[] = {
+        { "hook", "hook-pre-disconnect" },
+        { NULL, NULL },
+      };
+      while (h) {
+        hook_list_data_t *data = h->data;
+        if (data->flags & HOOK_PRE_DISCONNECT)
+          (data->handler) (HOOK_PRE_DISCONNECT, args, data->userdata);
+        h = g_slist_next (h);
+      }
+    }
+  }
+#endif
+
+  hook_command = settings_opt_get("hook-pre-disconnect");
+  if (!hook_command)
+    return;
+
+  scr_LogPrint(LPRINT_LOGNORM, "Running hook-pre-disconnect...");
+
+  cmdline = from_utf8(hook_command);
+  if (process_command(cmdline, TRUE) == 255)
+    mcabber_set_terminate_ui();
+
+  g_free(cmdline);
+}
 
 /* External commands */
 
--- a/mcabber/mcabber/hooks.h	Tue Jan 19 09:53:12 2010 +0200
+++ b/mcabber/mcabber/hooks.h	Tue Jan 19 16:09:27 2010 +0200
@@ -17,7 +17,9 @@
 #define HOOK_MESSAGE_OUT      ( 0x00000002 )
 #define HOOK_STATUS_CHANGE    ( 0x00000004 )
 #define HOOK_MY_STATUS_CHANGE ( 0x00000008 )
-#define HOOK_INTERNAL         ( 0x00000010 )
+#define HOOK_POST_CONNECT     ( 0x00000010 )
+#define HOOK_PRE_DISCONNECT   ( 0x00000020 )
+#define HOOK_INTERNAL         ( HOOK_POST_CONNECT | HOOK_PRE_DISCONNECT )
 
 typedef struct {
   const char *name;
@@ -43,7 +45,8 @@
                               enum imstatus old_status,
                               enum imstatus new_status, const char *msg);
 
-void hook_execute_internal(const char *hookname);
+void hk_postconnect(void);
+void hk_predisconnect(void);
 
 void hk_ext_cmd_init(const char *command);
 void hk_ext_cmd(const char *bjid, guchar type, guchar info, const char *data);
--- a/mcabber/mcabber/xmpp.c	Tue Jan 19 09:53:12 2010 +0200
+++ b/mcabber/mcabber/xmpp.c	Tue Jan 19 16:09:27 2010 +0200
@@ -1777,7 +1777,7 @@
     return;
   if (lm_connection_is_authenticated(lconnection)) {
     // Launch pre-disconnect internal hook
-    hook_execute_internal("hook-pre-disconnect");
+    hk_predisconnect();
     // Announce it to  everyone else
     xmpp_setstatus(offline, NULL, "", FALSE);
   }
--- a/mcabber/mcabber/xmpp_iqrequest.c	Tue Jan 19 09:53:12 2010 +0200
+++ b/mcabber/mcabber/xmpp_iqrequest.c	Tue Jan 19 16:09:27 2010 +0200
@@ -115,7 +115,7 @@
     handle_iq_roster(NULL, c, m, user_data);
 
   // Post-login stuff
-  hook_execute_internal("hook-post-connect");
+  hk_postconnect();
 
   return LM_HANDLER_RESULT_REMOVE_MESSAGE;
 }