comparison mcabber/mcabber/hooks.h @ 1795:47699a09ceb3

Rework the hook system This hook system implementation should be more efficient and a little more flexible.
author Mikael Berthe <mikael@lilotux.net>
date Sat, 20 Mar 2010 14:38:17 +0100
parents 250ad919f03f
children 5e2db25fdb17
comparison
equal deleted inserted replaced
1794:58d1390f28ca 1795:47699a09ceb3
11 11
12 #include <mcabber/config.h> 12 #include <mcabber/config.h>
13 #ifdef MODULES_ENABLE 13 #ifdef MODULES_ENABLE
14 #include <glib.h> 14 #include <glib.h>
15 15
16 #define HOOK_MESSAGE_IN ( 0x00000001 ) 16 // Core hooks
17 #define HOOK_MESSAGE_OUT ( 0x00000002 ) 17 #define HOOK_MESSAGE_IN "hook-message-in"
18 #define HOOK_STATUS_CHANGE ( 0x00000004 ) 18 #define HOOK_MESSAGE_OUT "hook-message-out"
19 #define HOOK_MY_STATUS_CHANGE ( 0x00000008 ) 19 #define HOOK_STATUS_CHANGE "hook-status-change"
20 #define HOOK_POST_CONNECT ( 0x00000010 ) 20 #define HOOK_MY_STATUS_CHANGE "hook-my-status-change"
21 #define HOOK_PRE_DISCONNECT ( 0x00000020 ) 21 #define HOOK_POST_CONNECT "hook-post-connect"
22 #define HOOK_INTERNAL ( HOOK_POST_CONNECT | HOOK_PRE_DISCONNECT ) 22 #define HOOK_PRE_DISCONNECT "hook-pre-disconnect"
23
24 typedef enum {
25 HOOK_HANDLER_RESULT_ALLOW_MORE_HOOKS = 0,
26 HOOK_HANDLER_RESULT_NO_MORE_HOOK,
27 HOOK_HANDLER_RESULT_NO_MORE_HOOK_DROP_DATA,
28 } hk_handler_result;
23 29
24 typedef struct { 30 typedef struct {
25 const char *name; 31 const char *name;
26 const char *value; 32 const char *value;
27 } hk_arg_t; 33 } hk_arg_t;
28 34
29 typedef void (*hk_handler_t) (guint32 flags, hk_arg_t *args, gpointer userdata); 35 typedef guint (*hk_handler_t) (const gchar *hookname, hk_arg_t *args,
36 gpointer userdata);
30 37
31 void hk_add_handler(hk_handler_t handler, guint32 flags, gpointer userdata); 38 guint hk_add_handler(hk_handler_t handler, const gchar *hookname,
32 void hk_del_handler(hk_handler_t handler, gpointer userdata); 39 gint priority, gpointer userdata);
40 void hk_del_handler(const gchar *hookname, guint hid);
41 guint hk_run_handlers(const gchar *hookname, hk_arg_t *args);
33 #endif 42 #endif
34 43
35 void hk_message_in(const char *bjid, const char *resname, 44 void hk_message_in(const char *bjid, const char *resname,
36 time_t timestamp, const char *msg, LmMessageSubType type, 45 time_t timestamp, const char *msg, LmMessageSubType type,
37 guint encrypted); 46 guint encrypted);