Added functions to create/destroy event_attrs to plugin interface.

Function names were chosen to keep consistency with the rest of the
API.
This commit is contained in:
Diogo Sousa 2013-07-12 22:15:17 +01:00
parent e0fb3d537d
commit 18eaccb840
4 changed files with 38 additions and 8 deletions

View File

@ -182,6 +182,9 @@ struct _hexchat_plugin
void *userdata); void *userdata);
int (*hexchat_emit_print_attrs) (hexchat_plugin *ph, hexchat_event_attrs *attrs, int (*hexchat_emit_print_attrs) (hexchat_plugin *ph, hexchat_event_attrs *attrs,
const char *event_name, ...); const char *event_name, ...);
hexchat_event_attrs *(*hexchat_event_attrs_create) (hexchat_plugin *ph);
void (*hexchat_event_attrs_free) (hexchat_plugin *ph,
hexchat_event_attrs *attrs);
}; };
#endif #endif
@ -194,6 +197,10 @@ hexchat_hook_command (hexchat_plugin *ph,
const char *help_text, const char *help_text,
void *userdata); void *userdata);
hexchat_event_attrs *hexchat_event_attrs_create (hexchat_plugin *ph);
void hexchat_event_attrs_free (hexchat_plugin *ph, hexchat_event_attrs *attrs);
hexchat_hook * hexchat_hook *
hexchat_hook_server (hexchat_plugin *ph, hexchat_hook_server (hexchat_plugin *ph,
const char *name, const char *name,
@ -201,7 +208,6 @@ hexchat_hook_server (hexchat_plugin *ph,
int (*callback) (char *word[], char *word_eol[], void *user_data), int (*callback) (char *word[], char *word_eol[], void *user_data),
void *userdata); void *userdata);
hexchat_hook * hexchat_hook *
hexchat_hook_server_attrs (hexchat_plugin *ph, hexchat_hook_server_attrs (hexchat_plugin *ph,
const char *name, const char *name,
@ -389,6 +395,8 @@ hexchat_pluginpref_list (hexchat_plugin *ph,
#define HEXCHAT_PLUGIN_HANDLE (ph) #define HEXCHAT_PLUGIN_HANDLE (ph)
#endif #endif
#define hexchat_hook_command ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_command) #define hexchat_hook_command ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_command)
#define hexchat_event_attrs_create ((HEXCHAT_PLUGIN_HANDLE)->hexchat_event_attrs_create)
#define hexchat_event_attrs_free ((HEXCHAT_PLUGIN_HANDLE)->hexchat_event_attrs_free)
#define hexchat_hook_server ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_server) #define hexchat_hook_server ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_server)
#define hexchat_hook_server_attrs ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_server_attrs) #define hexchat_hook_server_attrs ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_server_attrs)
#define hexchat_hook_print ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_print) #define hexchat_hook_print ((HEXCHAT_PLUGIN_HANDLE)->hexchat_hook_print)

View File

@ -296,9 +296,8 @@ plugin_add (session *sess, char *filename, void *handle, void *init_func,
pl->hexchat_hook_server_attrs = hexchat_hook_server_attrs; pl->hexchat_hook_server_attrs = hexchat_hook_server_attrs;
pl->hexchat_hook_print_attrs = hexchat_hook_print_attrs; pl->hexchat_hook_print_attrs = hexchat_hook_print_attrs;
pl->hexchat_emit_print_attrs = hexchat_emit_print_attrs; pl->hexchat_emit_print_attrs = hexchat_emit_print_attrs;
pl->hexchat_event_attrs_create = hexchat_event_attrs_create;
/* incase new plugins are loaded on older HexChat */ pl->hexchat_event_attrs_free = hexchat_event_attrs_free;
pl->hexchat_dummy1 = hexchat_dummy;
/* run hexchat_plugin_init, if it returns 0, close the plugin */ /* run hexchat_plugin_init, if it returns 0, close the plugin */
if (((hexchat_init_func *)init_func) (pl, &pl->name, &pl->desc, &pl->version, arg) == 0) if (((hexchat_init_func *)init_func) (pl, &pl->name, &pl->desc, &pl->version, arg) == 0)
@ -620,8 +619,28 @@ plugin_emit_command (session *sess, char *name, char *word[], char *word_eol[])
return plugin_hook_run (sess, name, word, word_eol, NULL, HOOK_COMMAND); return plugin_hook_run (sess, name, word, word_eol, NULL, HOOK_COMMAND);
} }
/* got a server PRIVMSG, NOTICE, numeric etc... */ hexchat_event_attrs *
hexchat_event_attrs_create (hexchat_plugin *ph)
{
hexchat_event_attrs *attrs;
attrs = malloc (sizeof (*attrs));
if (attrs == NULL)
return NULL;
attrs->server_time_utc = (time_t) 0;
return attrs;
}
void
hexchat_event_attrs_free (hexchat_plugin *ph, hexchat_event_attrs *attrs)
{
g_free (attrs);
}
/* got a server PRIVMSG, NOTICE, numeric etc... */
int int
plugin_emit_server (session *sess, char *name, char *word[], char *word_eol[]) plugin_emit_server (session *sess, char *name, char *word[], char *word_eol[])
{ {

View File

@ -146,9 +146,9 @@ struct _hexchat_plugin
void *userdata); void *userdata);
int (*hexchat_emit_print_attrs) (hexchat_plugin *ph, hexchat_event_attrs *attrs, int (*hexchat_emit_print_attrs) (hexchat_plugin *ph, hexchat_event_attrs *attrs,
const char *event_name, ...); const char *event_name, ...);
hexchat_event_attrs *(*hexchat_event_attrs_create) (hexchat_plugin *ph);
/* If you add a new function here you should remove the dummy function bellow. */ void (*hexchat_event_attrs_free) (hexchat_plugin *ph,
void *(*hexchat_dummy1) (hexchat_plugin *ph); hexchat_event_attrs *attrs);
/* PRIVATE FIELDS! */ /* PRIVATE FIELDS! */
void *handle; /* from dlopen */ void *handle; /* from dlopen */

View File

@ -1,6 +1,8 @@
EXPORTED { EXPORTED {
global: global:
hexchat_hook_command; hexchat_hook_command;
hexchat_event_attrs_create;
hexchat_event_attrs_free;
hexchat_hook_server; hexchat_hook_server;
hexchat_hook_server_attrs; hexchat_hook_server_attrs;
hexchat_hook_print; hexchat_hook_print;
@ -27,6 +29,7 @@ EXPORTED {
hexchat_plugingui_add; hexchat_plugingui_add;
hexchat_plugingui_remove; hexchat_plugingui_remove;
hexchat_emit_print; hexchat_emit_print;
hexchat_emit_print_attrs;
hexchat_list_time; hexchat_list_time;
hexchat_gettext; hexchat_gettext;
hexchat_send_modes; hexchat_send_modes;