plugin.h
Go to the documentation of this file.00001
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _PURPLE_PLUGIN_H_
00030 #define _PURPLE_PLUGIN_H_
00031
00032 #include <glib/glist.h>
00033 #include <gmodule.h>
00034 #include "signals.h"
00035 #include "value.h"
00036
00038 typedef struct _PurplePlugin PurplePlugin;
00040 typedef struct _PurplePluginInfo PurplePluginInfo;
00042 typedef struct _PurplePluginUiInfo PurplePluginUiInfo;
00044 typedef struct _PurplePluginLoaderInfo PurplePluginLoaderInfo;
00045
00047 typedef struct _PurplePluginAction PurplePluginAction;
00048
00049 typedef int PurplePluginPriority;
00051 #include "pluginpref.h"
00052
00056 typedef enum
00057 {
00058 PURPLE_PLUGIN_UNKNOWN = -1,
00059 PURPLE_PLUGIN_STANDARD = 0,
00060 PURPLE_PLUGIN_LOADER,
00061 PURPLE_PLUGIN_PROTOCOL
00063 } PurplePluginType;
00064
00065 #define PURPLE_PRIORITY_DEFAULT 0
00066 #define PURPLE_PRIORITY_HIGHEST 9999
00067 #define PURPLE_PRIORITY_LOWEST -9999
00068
00069 #define PURPLE_PLUGIN_FLAG_INVISIBLE 0x01
00070
00071 #define PURPLE_PLUGIN_MAGIC 5
00072
00078 struct _PurplePluginInfo
00079 {
00080 unsigned int magic;
00081 unsigned int major_version;
00082 unsigned int minor_version;
00083 PurplePluginType type;
00084 char *ui_requirement;
00085 unsigned long flags;
00086 GList *dependencies;
00087 PurplePluginPriority priority;
00088
00089 char *id;
00090 char *name;
00091 char *version;
00092 char *summary;
00093 char *description;
00094 char *author;
00095 char *homepage;
00096
00101 gboolean (*load)(PurplePlugin *plugin);
00102 gboolean (*unload)(PurplePlugin *plugin);
00103 void (*destroy)(PurplePlugin *plugin);
00104
00105 void *ui_info;
00106 void *extra_info;
00107 PurplePluginUiInfo *prefs_info;
00108 GList *(*actions)(PurplePlugin *plugin, gpointer context);
00109
00110 void (*_purple_reserved1)(void);
00111 void (*_purple_reserved2)(void);
00112 void (*_purple_reserved3)(void);
00113 void (*_purple_reserved4)(void);
00114 };
00115
00119 struct _PurplePluginLoaderInfo
00120 {
00121 GList *exts;
00122
00123 gboolean (*probe)(PurplePlugin *plugin);
00124 gboolean (*load)(PurplePlugin *plugin);
00125 gboolean (*unload)(PurplePlugin *plugin);
00126 void (*destroy)(PurplePlugin *plugin);
00127
00128 void (*_purple_reserved1)(void);
00129 void (*_purple_reserved2)(void);
00130 void (*_purple_reserved3)(void);
00131 void (*_purple_reserved4)(void);
00132 };
00133
00137 struct _PurplePlugin
00138 {
00139 gboolean native_plugin;
00140 gboolean loaded;
00141 void *handle;
00142 char *path;
00143 PurplePluginInfo *info;
00144 char *error;
00145 void *ipc_data;
00146 void *extra;
00147 gboolean unloadable;
00148 GList *dependent_plugins;
00150 void (*_purple_reserved1)(void);
00151 void (*_purple_reserved2)(void);
00152 void (*_purple_reserved3)(void);
00153 void (*_purple_reserved4)(void);
00154 };
00155
00156 #define PURPLE_PLUGIN_LOADER_INFO(plugin) \
00157 ((PurplePluginLoaderInfo *)(plugin)->info->extra_info)
00158
00159 struct _PurplePluginUiInfo {
00160 PurplePluginPrefFrame *(*get_plugin_pref_frame)(PurplePlugin *plugin);
00161
00162 int page_num;
00163 PurplePluginPrefFrame *frame;
00165 void (*_purple_reserved1)(void);
00166 void (*_purple_reserved2)(void);
00167 void (*_purple_reserved3)(void);
00168 void (*_purple_reserved4)(void);
00169 };
00170
00171 #define PURPLE_PLUGIN_HAS_PREF_FRAME(plugin) \
00172 ((plugin)->info != NULL && (plugin)->info->prefs_info != NULL)
00173
00174 #define PURPLE_PLUGIN_UI_INFO(plugin) \
00175 ((PurplePluginUiInfo*)(plugin)->info->prefs_info)
00176
00177
00181 struct _PurplePluginAction {
00182 char *label;
00183 void (*callback)(PurplePluginAction *);
00184
00186 PurplePlugin *plugin;
00187
00190 gpointer context;
00191
00192 gpointer user_data;
00193 };
00194
00195 #define PURPLE_PLUGIN_HAS_ACTIONS(plugin) \
00196 ((plugin)->info != NULL && (plugin)->info->actions != NULL)
00197
00198 #define PURPLE_PLUGIN_ACTIONS(plugin, context) \
00199 (PURPLE_PLUGIN_HAS_ACTIONS(plugin)? \
00200 (plugin)->info->actions(plugin, context): NULL)
00201
00202
00206 #if !defined(PURPLE_PLUGINS) || defined(PURPLE_STATIC_PRPL)
00207 # define _FUNC_NAME(x) purple_init_##x##_plugin
00208 # define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
00209 gboolean _FUNC_NAME(pluginname)(void);\
00210 gboolean _FUNC_NAME(pluginname)(void) { \
00211 PurplePlugin *plugin = purple_plugin_new(TRUE, NULL); \
00212 plugin->info = &(plugininfo); \
00213 initfunc((plugin)); \
00214 purple_plugin_load((plugin)); \
00215 return purple_plugin_register(plugin); \
00216 }
00217 #else
00218 # define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
00219 G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin); \
00220 G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin) { \
00221 plugin->info = &(plugininfo); \
00222 initfunc((plugin)); \
00223 return purple_plugin_register(plugin); \
00224 }
00225 #endif
00226
00227
00228 #ifdef __cplusplus
00229 extern "C" {
00230 #endif
00231
00232
00234
00245 PurplePlugin *purple_plugin_new(gboolean native, const char *path);
00246
00258 PurplePlugin *purple_plugin_probe(const char *filename);
00259
00273 gboolean purple_plugin_register(PurplePlugin *plugin);
00274
00285 gboolean purple_plugin_load(PurplePlugin *plugin);
00286
00297 gboolean purple_plugin_unload(PurplePlugin *plugin);
00298
00309 void purple_plugin_disable(PurplePlugin *plugin);
00310
00321 gboolean purple_plugin_reload(PurplePlugin *plugin);
00322
00328 void purple_plugin_destroy(PurplePlugin *plugin);
00329
00337 gboolean purple_plugin_is_loaded(const PurplePlugin *plugin);
00338
00351 gboolean purple_plugin_is_unloadable(const PurplePlugin *plugin);
00352
00360 const gchar *purple_plugin_get_id(const PurplePlugin *plugin);
00361
00369 const gchar *purple_plugin_get_name(const PurplePlugin *plugin);
00370
00378 const gchar *purple_plugin_get_version(const PurplePlugin *plugin);
00379
00387 const gchar *purple_plugin_get_summary(const PurplePlugin *plugin);
00388
00396 const gchar *purple_plugin_get_description(const PurplePlugin *plugin);
00397
00405 const gchar *purple_plugin_get_author(const PurplePlugin *plugin);
00406
00414 const gchar *purple_plugin_get_homepage(const PurplePlugin *plugin);
00415
00418
00420
00437 gboolean purple_plugin_ipc_register(PurplePlugin *plugin, const char *command,
00438 PurpleCallback func,
00439 PurpleSignalMarshalFunc marshal,
00440 PurpleValue *ret_value, int num_params, ...);
00441
00448 void purple_plugin_ipc_unregister(PurplePlugin *plugin, const char *command);
00449
00455 void purple_plugin_ipc_unregister_all(PurplePlugin *plugin);
00456
00468 gboolean purple_plugin_ipc_get_params(PurplePlugin *plugin, const char *command,
00469 PurpleValue **ret_value, int *num_params,
00470 PurpleValue ***params);
00471
00483 void *purple_plugin_ipc_call(PurplePlugin *plugin, const char *command,
00484 gboolean *ok, ...);
00485
00488
00490
00498 void purple_plugins_add_search_path(const char *path);
00499
00503 void purple_plugins_unload_all(void);
00504
00508 void purple_plugins_destroy_all(void);
00509
00515 void purple_plugins_save_loaded(const char *key);
00516
00523 void purple_plugins_load_saved(const char *key);
00524
00532 void purple_plugins_probe(const char *ext);
00533
00539 gboolean purple_plugins_enabled(void);
00540
00541 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00542
00549 void purple_plugins_register_probe_notify_cb(void (*func)(void *), void *data);
00550 #endif
00551
00552 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00553
00559 void purple_plugins_unregister_probe_notify_cb(void (*func)(void *));
00560 #endif
00561
00562 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00563
00570 void purple_plugins_register_load_notify_cb(void (*func)(PurplePlugin *, void *),
00571 void *data);
00572 #endif
00573
00574 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00575
00581 void purple_plugins_unregister_load_notify_cb(void (*func)(PurplePlugin *, void *));
00582 #endif
00583
00584 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00585
00592 void purple_plugins_register_unload_notify_cb(void (*func)(PurplePlugin *, void *),
00593 void *data);
00594 #endif
00595
00596 #if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
00597
00603 void purple_plugins_unregister_unload_notify_cb(void (*func)(PurplePlugin *,
00604 void *));
00605 #endif
00606
00614 PurplePlugin *purple_plugins_find_with_name(const char *name);
00615
00623 PurplePlugin *purple_plugins_find_with_filename(const char *filename);
00624
00632 PurplePlugin *purple_plugins_find_with_basename(const char *basename);
00633
00641 PurplePlugin *purple_plugins_find_with_id(const char *id);
00642
00648 GList *purple_plugins_get_loaded(void);
00649
00658 GList *purple_plugins_get_protocols(void);
00659
00665 GList *purple_plugins_get_all(void);
00666
00669
00671
00679 void *purple_plugins_get_handle(void);
00680
00684 void purple_plugins_init(void);
00685
00689 void purple_plugins_uninit(void);
00690
00699 PurplePluginAction *purple_plugin_action_new(const char* label, void (*callback)(PurplePluginAction *));
00700
00706 void purple_plugin_action_free(PurplePluginAction *action);
00707
00708 #ifdef __cplusplus
00709 }
00710 #endif
00711
00712 #endif