# HG changeset patch # User Myhailo Danylenko # Date 1263910167 -7200 # Node ID b09f82f617459aae2b032d667dd05d6f47fefad3 # Parent d1e8fb14ce2dbc70814818d8da20221c81b49f44 Split HOOK_INTERNAL diff -r d1e8fb14ce2d -r b09f82f61745 mcabber/doc/HOWTO_modules.txt --- 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 -------------------------------------------------------- diff -r d1e8fb14ce2d -r b09f82f61745 mcabber/mcabber/hooks.c --- 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 */ diff -r d1e8fb14ce2d -r b09f82f61745 mcabber/mcabber/hooks.h --- 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); diff -r d1e8fb14ce2d -r b09f82f61745 mcabber/mcabber/xmpp.c --- 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); } diff -r d1e8fb14ce2d -r b09f82f61745 mcabber/mcabber/xmpp_iqrequest.c --- 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; }