Frameworks/libpurple.framework/Versions/0.6.2/Headers/plugin.h
author Zachary West <zacw@adium.im>
Fri Aug 21 13:25:11 2009 -0700 (2009-08-21)
changeset 2592 e8d15275025e
parent 2535 Frameworks/libpurple.framework/Versions/0.6.0/Headers/plugin.h@39c3c161de14
permissions -rw-r--r--
im.pidgin.adium.1-4 at 267c6165e02e34318a1823960bd04c0639952f73
Evan@653
     1
/**
Evan@653
     2
 * @file plugin.h Plugin API
Evan@653
     3
 * @ingroup core
Evan@653
     4
 * @see @ref plugin-signals
Evan@653
     5
 * @see @ref plugin-ids
Evan@653
     6
 * @see @ref plugin-i18n
Evan@653
     7
 */
Evan@653
     8
Evan@653
     9
/* purple
Evan@653
    10
 *
Evan@653
    11
 * Purple is the legal property of its developers, whose names are too numerous
Evan@653
    12
 * to list here.  Please refer to the COPYRIGHT file distributed with this
Evan@653
    13
 * source distribution.
Evan@653
    14
 *
Evan@653
    15
 * This program is free software; you can redistribute it and/or modify
Evan@653
    16
 * it under the terms of the GNU General Public License as published by
Evan@653
    17
 * the Free Software Foundation; either version 2 of the License, or
Evan@653
    18
 * (at your option) any later version.
Evan@653
    19
 *
Evan@653
    20
 * This program is distributed in the hope that it will be useful,
Evan@653
    21
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Evan@653
    22
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Evan@653
    23
 * GNU General Public License for more details.
Evan@653
    24
 *
Evan@653
    25
 * You should have received a copy of the GNU General Public License
Evan@653
    26
 * along with this program; if not, write to the Free Software
Evan@653
    27
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
Evan@653
    28
 */
Evan@653
    29
#ifndef _PURPLE_PLUGIN_H_
Evan@653
    30
#define _PURPLE_PLUGIN_H_
Evan@653
    31
zacw@1759
    32
#include <glib.h>
Evan@653
    33
#include <gmodule.h>
Evan@653
    34
#include "signals.h"
Evan@653
    35
#include "value.h"
Evan@653
    36
Evan@1427
    37
/** @copydoc _PurplePlugin */
Evan@653
    38
typedef struct _PurplePlugin           PurplePlugin;
Evan@1427
    39
/** @copydoc _PurplePluginInfo */
Evan@653
    40
typedef struct _PurplePluginInfo       PurplePluginInfo;
Evan@1427
    41
/** @copydoc _PurplePluginUiInfo */
Evan@653
    42
typedef struct _PurplePluginUiInfo     PurplePluginUiInfo;
Evan@1427
    43
/** @copydoc _PurplePluginLoaderInfo */
Evan@653
    44
typedef struct _PurplePluginLoaderInfo PurplePluginLoaderInfo;
Evan@653
    45
Evan@1427
    46
/** @copydoc _PurplePluginAction */
Evan@653
    47
typedef struct _PurplePluginAction     PurplePluginAction;
Evan@653
    48
Evan@653
    49
typedef int PurplePluginPriority; /**< Plugin priority. */
Evan@653
    50
Evan@653
    51
#include "pluginpref.h"
Evan@653
    52
Evan@653
    53
/**
Evan@653
    54
 * Plugin types.
Evan@653
    55
 */
Evan@653
    56
typedef enum
Evan@653
    57
{
Evan@653
    58
	PURPLE_PLUGIN_UNKNOWN  = -1,  /**< Unknown type.    */
Evan@653
    59
	PURPLE_PLUGIN_STANDARD = 0,   /**< Standard plugin. */
Evan@653
    60
	PURPLE_PLUGIN_LOADER,         /**< Loader plugin.   */
Evan@653
    61
	PURPLE_PLUGIN_PROTOCOL        /**< Protocol plugin. */
Evan@653
    62
Evan@653
    63
} PurplePluginType;
Evan@653
    64
Evan@653
    65
#define PURPLE_PRIORITY_DEFAULT     0
Evan@653
    66
#define PURPLE_PRIORITY_HIGHEST  9999
Evan@653
    67
#define PURPLE_PRIORITY_LOWEST  -9999
Evan@653
    68
Evan@653
    69
#define PURPLE_PLUGIN_FLAG_INVISIBLE 0x01
Evan@653
    70
Evan@653
    71
#define PURPLE_PLUGIN_MAGIC 5 /* once we hit 6.0.0 I think we can remove this */
Evan@653
    72
Evan@653
    73
/**
Evan@653
    74
 * Detailed information about a plugin.
Evan@653
    75
 *
Evan@653
    76
 * This is used in the version 2.0 API and up.
Evan@653
    77
 */
Evan@653
    78
struct _PurplePluginInfo
Evan@653
    79
{
Evan@653
    80
	unsigned int magic;
Evan@653
    81
	unsigned int major_version;
Evan@653
    82
	unsigned int minor_version;
Evan@653
    83
	PurplePluginType type;
Evan@653
    84
	char *ui_requirement;
Evan@653
    85
	unsigned long flags;
Evan@653
    86
	GList *dependencies;
Evan@653
    87
	PurplePluginPriority priority;
Evan@653
    88
Evan@653
    89
	char *id;
Evan@653
    90
	char *name;
Evan@653
    91
	char *version;
Evan@653
    92
	char *summary;
Evan@653
    93
	char *description;
Evan@653
    94
	char *author;
Evan@653
    95
	char *homepage;
Evan@653
    96
Evan@653
    97
	/**
Evan@653
    98
	 * If a plugin defines a 'load' function, and it returns FALSE,
Evan@653
    99
	 * then the plugin will not be loaded.
Evan@653
   100
	 */
Evan@653
   101
	gboolean (*load)(PurplePlugin *plugin);
Evan@653
   102
	gboolean (*unload)(PurplePlugin *plugin);
Evan@653
   103
	void (*destroy)(PurplePlugin *plugin);
Evan@653
   104
Evan@653
   105
	void *ui_info; /**< Used only by UI-specific plugins to build a preference screen with a custom UI */
Evan@653
   106
	void *extra_info;
Evan@653
   107
	PurplePluginUiInfo *prefs_info; /**< Used by any plugin to display preferences.  If #ui_info has been specified, this will be ignored. */
zacw@1953
   108
zacw@1953
   109
	/**
zacw@1953
   110
	 * This callback has a different use depending on whether this
zacw@1953
   111
	 * plugin type is PURPLE_PLUGIN_STANDARD or PURPLE_PLUGIN_PROTOCOL.
zacw@1953
   112
	 *
zacw@1953
   113
	 * If PURPLE_PLUGIN_STANDARD then the list of actions will show up
zacw@1953
   114
	 * in the Tools menu, under a submenu with the name of the plugin.
zacw@1953
   115
	 * context will be NULL.
zacw@1953
   116
	 *
zacw@1953
   117
	 * If PURPLE_PLUGIN_PROTOCOL then the list of actions will show up
zacw@1953
   118
	 * in the Accounts menu, under a submenu with the name of the
zacw@1953
   119
	 * account.  context will be set to the PurpleConnection for that
zacw@1953
   120
	 * account.  This callback will only be called for online accounts.
zacw@1953
   121
	 */
Evan@653
   122
	GList *(*actions)(PurplePlugin *plugin, gpointer context);
Evan@653
   123
Evan@653
   124
	void (*_purple_reserved1)(void);
Evan@653
   125
	void (*_purple_reserved2)(void);
Evan@653
   126
	void (*_purple_reserved3)(void);
Evan@653
   127
	void (*_purple_reserved4)(void);
Evan@653
   128
};
Evan@653
   129
Evan@653
   130
/**
Evan@653
   131
 * Extra information for loader plugins.
Evan@653
   132
 */
Evan@653
   133
struct _PurplePluginLoaderInfo
Evan@653
   134
{
Evan@653
   135
	GList *exts;
Evan@653
   136
Evan@653
   137
	gboolean (*probe)(PurplePlugin *plugin);
Evan@653
   138
	gboolean (*load)(PurplePlugin *plugin);
Evan@653
   139
	gboolean (*unload)(PurplePlugin *plugin);
Evan@653
   140
	void     (*destroy)(PurplePlugin *plugin);
Evan@653
   141
Evan@653
   142
	void (*_purple_reserved1)(void);
Evan@653
   143
	void (*_purple_reserved2)(void);
Evan@653
   144
	void (*_purple_reserved3)(void);
Evan@653
   145
	void (*_purple_reserved4)(void);
Evan@653
   146
};
Evan@653
   147
Evan@653
   148
/**
Evan@653
   149
 * A plugin handle.
Evan@653
   150
 */
Evan@653
   151
struct _PurplePlugin
Evan@653
   152
{
Evan@653
   153
	gboolean native_plugin;                /**< Native C plugin.          */
Evan@653
   154
	gboolean loaded;                       /**< The loaded state.         */
Evan@653
   155
	void *handle;                          /**< The module handle.        */
Evan@653
   156
	char *path;                            /**< The path to the plugin.   */
Evan@653
   157
	PurplePluginInfo *info;                  /**< The plugin information.   */
Evan@653
   158
	char *error;
Evan@653
   159
	void *ipc_data;                        /**< IPC data.                 */
Evan@653
   160
	void *extra;                           /**< Plugin-specific data.     */
Evan@653
   161
	gboolean unloadable;                   /**< Unloadable                */
Evan@653
   162
	GList *dependent_plugins;              /**< Plugins depending on this */
Evan@653
   163
Evan@653
   164
	void (*_purple_reserved1)(void);
Evan@653
   165
	void (*_purple_reserved2)(void);
Evan@653
   166
	void (*_purple_reserved3)(void);
Evan@653
   167
	void (*_purple_reserved4)(void);
Evan@653
   168
};
Evan@653
   169
Evan@653
   170
#define PURPLE_PLUGIN_LOADER_INFO(plugin) \
Evan@653
   171
	((PurplePluginLoaderInfo *)(plugin)->info->extra_info)
Evan@653
   172
Evan@653
   173
struct _PurplePluginUiInfo {
Evan@653
   174
	PurplePluginPrefFrame *(*get_plugin_pref_frame)(PurplePlugin *plugin);
Evan@653
   175
Evan@653
   176
	int page_num;                                         /**< Reserved */
Evan@653
   177
	PurplePluginPrefFrame *frame;                           /**< Reserved */
Evan@653
   178
Evan@653
   179
	void (*_purple_reserved1)(void);
Evan@653
   180
	void (*_purple_reserved2)(void);
Evan@653
   181
	void (*_purple_reserved3)(void);
Evan@653
   182
	void (*_purple_reserved4)(void);
Evan@653
   183
};
Evan@653
   184
Evan@653
   185
#define PURPLE_PLUGIN_HAS_PREF_FRAME(plugin) \
Evan@653
   186
	((plugin)->info != NULL && (plugin)->info->prefs_info != NULL)
Evan@653
   187
Evan@653
   188
#define PURPLE_PLUGIN_UI_INFO(plugin) \
Evan@653
   189
	((PurplePluginUiInfo*)(plugin)->info->prefs_info)
Evan@653
   190
Evan@653
   191
Evan@653
   192
/**
Evan@653
   193
 * The structure used in the actions member of PurplePluginInfo
Evan@653
   194
 */
Evan@653
   195
struct _PurplePluginAction {
Evan@653
   196
	char *label;
Evan@653
   197
	void (*callback)(PurplePluginAction *);
Evan@653
   198
Evan@653
   199
	/** set to the owning plugin */
Evan@653
   200
	PurplePlugin *plugin;
Evan@653
   201
Evan@653
   202
	/** NULL for plugin actions menu, set to the PurpleConnection for
Evan@653
   203
	    account actions menu */
Evan@653
   204
	gpointer context;
Evan@1427
   205
Evan@653
   206
	gpointer user_data;
Evan@653
   207
};
Evan@653
   208
Evan@653
   209
#define PURPLE_PLUGIN_HAS_ACTIONS(plugin) \
Evan@653
   210
	((plugin)->info != NULL && (plugin)->info->actions != NULL)
Evan@653
   211
Evan@653
   212
#define PURPLE_PLUGIN_ACTIONS(plugin, context) \
Evan@653
   213
	(PURPLE_PLUGIN_HAS_ACTIONS(plugin)? \
Evan@653
   214
	(plugin)->info->actions(plugin, context): NULL)
Evan@653
   215
Evan@653
   216
Evan@653
   217
/**
Evan@653
   218
 * Handles the initialization of modules.
Evan@653
   219
 */
Evan@653
   220
#if !defined(PURPLE_PLUGINS) || defined(PURPLE_STATIC_PRPL)
Evan@653
   221
# define _FUNC_NAME(x) purple_init_##x##_plugin
Evan@653
   222
# define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
Evan@653
   223
	gboolean _FUNC_NAME(pluginname)(void);\
Evan@653
   224
	gboolean _FUNC_NAME(pluginname)(void) { \
Evan@653
   225
		PurplePlugin *plugin = purple_plugin_new(TRUE, NULL); \
Evan@653
   226
		plugin->info = &(plugininfo); \
Evan@653
   227
		initfunc((plugin)); \
Evan@653
   228
		purple_plugin_load((plugin)); \
Evan@653
   229
		return purple_plugin_register(plugin); \
Evan@653
   230
	}
Evan@653
   231
#else /* PURPLE_PLUGINS  && !PURPLE_STATIC_PRPL */
Evan@653
   232
# define PURPLE_INIT_PLUGIN(pluginname, initfunc, plugininfo) \
Evan@653
   233
	G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin); \
Evan@653
   234
	G_MODULE_EXPORT gboolean purple_init_plugin(PurplePlugin *plugin) { \
Evan@653
   235
		plugin->info = &(plugininfo); \
Evan@653
   236
		initfunc((plugin)); \
Evan@653
   237
		return purple_plugin_register(plugin); \
Evan@653
   238
	}
Evan@653
   239
#endif
Evan@653
   240
Evan@653
   241
Evan@653
   242
#ifdef __cplusplus
Evan@653
   243
extern "C" {
Evan@653
   244
#endif
Evan@653
   245
Evan@653
   246
/**************************************************************************/
Evan@653
   247
/** @name Plugin API                                                      */
Evan@653
   248
/**************************************************************************/
Evan@653
   249
/*@{*/
Evan@653
   250
Evan@653
   251
/**
Evan@653
   252
 * Creates a new plugin structure.
Evan@653
   253
 *
Evan@653
   254
 * @param native Whether or not the plugin is native.
Evan@653
   255
 * @param path   The path to the plugin, or @c NULL if statically compiled.
Evan@653
   256
 *
Evan@653
   257
 * @return A new PurplePlugin structure.
Evan@653
   258
 */
Evan@653
   259
PurplePlugin *purple_plugin_new(gboolean native, const char *path);
Evan@653
   260
Evan@653
   261
/**
Evan@653
   262
 * Probes a plugin, retrieving the information on it and adding it to the
Evan@653
   263
 * list of available plugins.
Evan@653
   264
 *
Evan@653
   265
 * @param filename The plugin's filename.
Evan@653
   266
 *
Evan@653
   267
 * @return The plugin handle.
Evan@653
   268
 *
Evan@653
   269
 * @see purple_plugin_load()
Evan@653
   270
 * @see purple_plugin_destroy()
Evan@653
   271
 */
Evan@653
   272
PurplePlugin *purple_plugin_probe(const char *filename);
Evan@653
   273
Evan@653
   274
/**
Evan@653
   275
 * Registers a plugin and prepares it for loading.
Evan@653
   276
 *
Evan@653
   277
 * This shouldn't be called by anything but the internal module code.
Evan@653
   278
 * Plugins should use the PURPLE_INIT_PLUGIN() macro to register themselves
Evan@653
   279
 * with the core.
Evan@653
   280
 *
Evan@653
   281
 * @param plugin The plugin to register.
Evan@653
   282
 *
Evan@653
   283
 * @return @c TRUE if the plugin was registered successfully.  Otherwise
Evan@653
   284
 *         @c FALSE is returned (this happens if the plugin does not contain
Evan@653
   285
 *         the necessary information).
Evan@653
   286
 */
Evan@653
   287
gboolean purple_plugin_register(PurplePlugin *plugin);
Evan@653
   288
Evan@653
   289
/**
Evan@653
   290
 * Attempts to load a previously probed plugin.
Evan@653
   291
 *
Evan@653
   292
 * @param plugin The plugin to load.
Evan@653
   293
 *
Evan@653
   294
 * @return @c TRUE if successful, or @c FALSE otherwise.
Evan@653
   295
 *
Evan@653
   296
 * @see purple_plugin_reload()
Evan@653
   297
 * @see purple_plugin_unload()
Evan@653
   298
 */
Evan@653
   299
gboolean purple_plugin_load(PurplePlugin *plugin);
Evan@653
   300
Evan@653
   301
/**
Evan@653
   302
 * Unloads the specified plugin.
Evan@653
   303
 *
Evan@653
   304
 * @param plugin The plugin handle.
Evan@653
   305
 *
Evan@653
   306
 * @return @c TRUE if successful, or @c FALSE otherwise.
Evan@653
   307
 *
Evan@653
   308
 * @see purple_plugin_load()
Evan@653
   309
 * @see purple_plugin_reload()
Evan@653
   310
 */
Evan@653
   311
gboolean purple_plugin_unload(PurplePlugin *plugin);
Evan@653
   312
Evan@653
   313
/**
Evan@653
   314
 * Disable a plugin.
Evan@653
   315
 *
Evan@653
   316
 * This function adds the plugin to a list of plugins to "disable at the next
Evan@653
   317
 * startup" by excluding said plugins from the list of plugins to save.  The
Evan@653
   318
 * UI needs to call purple_plugins_save_loaded() after calling this for it
Evan@653
   319
 * to have any effect.
Evan@653
   320
 *
Evan@653
   321
 * @since 2.3.0
Evan@653
   322
 */
Evan@653
   323
void purple_plugin_disable(PurplePlugin *plugin);
Evan@653
   324
Evan@653
   325
/**
Evan@653
   326
 * Reloads a plugin.
Evan@653
   327
 *
Evan@653
   328
 * @param plugin The old plugin handle.
Evan@653
   329
 *
Evan@653
   330
 * @return @c TRUE if successful, or @c FALSE otherwise.
Evan@653
   331
 *
Evan@653
   332
 * @see purple_plugin_load()
Evan@653
   333
 * @see purple_plugin_unload()
Evan@653
   334
 */
Evan@653
   335
gboolean purple_plugin_reload(PurplePlugin *plugin);
Evan@653
   336
Evan@653
   337
/**
Evan@653
   338
 * Unloads a plugin and destroys the structure from memory.
Evan@653
   339
 *
Evan@653
   340
 * @param plugin The plugin handle.
Evan@653
   341
 */
Evan@653
   342
void purple_plugin_destroy(PurplePlugin *plugin);
Evan@653
   343
Evan@653
   344
/**
Evan@653
   345
 * Returns whether or not a plugin is currently loaded.
Evan@653
   346
 *
Evan@653
   347
 * @param plugin The plugin.
Evan@653
   348
 *
Evan@653
   349
 * @return @c TRUE if loaded, or @c FALSE otherwise.
Evan@653
   350
 */
Evan@653
   351
gboolean purple_plugin_is_loaded(const PurplePlugin *plugin);
Evan@653
   352
Evan@653
   353
/**
Evan@653
   354
 * Returns whether or not a plugin is unloadable.
Evan@653
   355
 *
Evan@653
   356
 * If this returns @c TRUE, the plugin is guaranteed to not
Evan@653
   357
 * be loadable. However, a return value of @c FALSE does not
Evan@653
   358
 * guarantee the plugin is loadable.
Evan@653
   359
 *
Evan@653
   360
 * @param plugin The plugin.
Evan@653
   361
 *
Evan@653
   362
 * @return @c TRUE if the plugin is known to be unloadable,\
Evan@653
   363
 *         @c FALSE otherwise
Evan@653
   364
 */
Evan@653
   365
gboolean purple_plugin_is_unloadable(const PurplePlugin *plugin);
Evan@653
   366
Evan@653
   367
/**
Evan@653
   368
 * Returns a plugin's id.
Evan@653
   369
 *
Evan@653
   370
 * @param plugin The plugin.
Evan@653
   371
 *
Evan@653
   372
 * @return The plugin's id.
Evan@653
   373
 */
Evan@653
   374
const gchar *purple_plugin_get_id(const PurplePlugin *plugin);
Evan@653
   375
Evan@653
   376
/**
Evan@653
   377
 * Returns a plugin's name.
Evan@653
   378
 *
Evan@653
   379
 * @param plugin The plugin.
Evan@1427
   380
 *
Evan@653
   381
 * @return THe name of the plugin, or @c NULL.
Evan@653
   382
 */
Evan@653
   383
const gchar *purple_plugin_get_name(const PurplePlugin *plugin);
Evan@653
   384
Evan@653
   385
/**
Evan@653
   386
 * Returns a plugin's version.
Evan@653
   387
 *
Evan@653
   388
 * @param plugin The plugin.
Evan@653
   389
 *
Evan@653
   390
 * @return The plugin's version or @c NULL.
Evan@653
   391
 */
Evan@653
   392
const gchar *purple_plugin_get_version(const PurplePlugin *plugin);
Evan@653
   393
Evan@653
   394
/**
Evan@653
   395
 * Returns a plugin's summary.
Evan@653
   396
 *
Evan@653
   397
 * @param plugin The plugin.
Evan@653
   398
 *
Evan@653
   399
 * @return The plugin's summary.
Evan@653
   400
 */
Evan@653
   401
const gchar *purple_plugin_get_summary(const PurplePlugin *plugin);
Evan@653
   402
Evan@653
   403
/**
Evan@653
   404
 * Returns a plugin's description.
Evan@653
   405
 *
Evan@653
   406
 * @param plugin The plugin.
Evan@653
   407
 *
Evan@653
   408
 * @return The plugin's description.
Evan@653
   409
 */
Evan@653
   410
const gchar *purple_plugin_get_description(const PurplePlugin *plugin);
Evan@653
   411
Evan@653
   412
/**
Evan@653
   413
 * Returns a plugin's author.
Evan@653
   414
 *
Evan@653
   415
 * @param plugin The plugin.
Evan@653
   416
 *
Evan@653
   417
 * @return The plugin's author.
Evan@653
   418
 */
Evan@653
   419
const gchar *purple_plugin_get_author(const PurplePlugin *plugin);
Evan@653
   420
Evan@653
   421
/**
Evan@653
   422
 * Returns a plugin's homepage.
Evan@653
   423
 *
Evan@653
   424
 * @param plugin The plugin.
Evan@653
   425
 *
Evan@653
   426
 * @return The plugin's homepage.
Evan@653
   427
 */
Evan@653
   428
const gchar *purple_plugin_get_homepage(const PurplePlugin *plugin);
Evan@653
   429
Evan@653
   430
/*@}*/
Evan@653
   431
Evan@653
   432
/**************************************************************************/
Evan@653
   433
/** @name Plugin IPC API                                                  */
Evan@653
   434
/**************************************************************************/
Evan@653
   435
/*@{*/
Evan@653
   436
Evan@653
   437
/**
Evan@653
   438
 * Registers an IPC command in a plugin.
Evan@653
   439
 *
Evan@653
   440
 * @param plugin     The plugin to register the command with.
Evan@653
   441
 * @param command    The name of the command.
Evan@653
   442
 * @param func       The function to execute.
Evan@653
   443
 * @param marshal    The marshalling function.
Evan@653
   444
 * @param ret_value  The return value type.
Evan@653
   445
 * @param num_params The number of parameters.
Evan@653
   446
 * @param ...        The parameter types.
Evan@653
   447
 *
Evan@653
   448
 * @return TRUE if the function was registered successfully, or
Evan@653
   449
 *         FALSE otherwise.
Evan@653
   450
 */
Evan@653
   451
gboolean purple_plugin_ipc_register(PurplePlugin *plugin, const char *command,
Evan@653
   452
								  PurpleCallback func,
Evan@653
   453
								  PurpleSignalMarshalFunc marshal,
Evan@653
   454
								  PurpleValue *ret_value, int num_params, ...);
Evan@653
   455
Evan@653
   456
/**
Evan@653
   457
 * Unregisters an IPC command in a plugin.
Evan@653
   458
 *
Evan@653
   459
 * @param plugin  The plugin to unregister the command from.
Evan@653
   460
 * @param command The name of the command.
Evan@653
   461
 */
Evan@653
   462
void purple_plugin_ipc_unregister(PurplePlugin *plugin, const char *command);
Evan@653
   463
Evan@653
   464
/**
Evan@653
   465
 * Unregisters all IPC commands in a plugin.
Evan@653
   466
 *
Evan@653
   467
 * @param plugin The plugin to unregister the commands from.
Evan@653
   468
 */
Evan@653
   469
void purple_plugin_ipc_unregister_all(PurplePlugin *plugin);
Evan@653
   470
Evan@653
   471
/**
Evan@653
   472
 * Returns a list of value types used for an IPC command.
Evan@653
   473
 *
Evan@653
   474
 * @param plugin     The plugin.
Evan@653
   475
 * @param command    The name of the command.
Evan@653
   476
 * @param ret_value  The returned return value.
Evan@653
   477
 * @param num_params The returned number of parameters.
Evan@653
   478
 * @param params     The returned list of parameters.
Evan@653
   479
 *
Evan@653
   480
 * @return TRUE if the command was found, or FALSE otherwise.
Evan@653
   481
 */
Evan@653
   482
gboolean purple_plugin_ipc_get_params(PurplePlugin *plugin, const char *command,
Evan@653
   483
									PurpleValue **ret_value, int *num_params,
Evan@653
   484
									PurpleValue ***params);
Evan@653
   485
Evan@653
   486
/**
Evan@653
   487
 * Executes an IPC command.
Evan@653
   488
 *
Evan@653
   489
 * @param plugin  The plugin to execute the command on.
Evan@653
   490
 * @param command The name of the command.
Evan@653
   491
 * @param ok      TRUE if the call was successful, or FALSE otherwise.
Evan@653
   492
 * @param ...     The parameters to pass.
Evan@653
   493
 *
Evan@653
   494
 * @return The return value, which will be NULL if the command doesn't
Evan@653
   495
 *         return a value.
Evan@653
   496
 */
Evan@653
   497
void *purple_plugin_ipc_call(PurplePlugin *plugin, const char *command,
Evan@653
   498
						   gboolean *ok, ...);
Evan@653
   499
Evan@653
   500
/*@}*/
Evan@653
   501
Evan@653
   502
/**************************************************************************/
Evan@653
   503
/** @name Plugins API                                                     */
Evan@653
   504
/**************************************************************************/
Evan@653
   505
/*@{*/
Evan@653
   506
Evan@653
   507
/**
Evan@653
   508
 * Add a new directory to search for plugins
Evan@653
   509
 *
Evan@653
   510
 * @param path The new search path.
Evan@653
   511
 */
Evan@653
   512
void purple_plugins_add_search_path(const char *path);
Evan@653
   513
Evan@653
   514
/**
zacw@2535
   515
 * Returns a list of plugin search paths.
zacw@2535
   516
 *
zacw@2535
   517
 * @constreturn A list of searched paths.
zacw@2535
   518
 *
zacw@2535
   519
 * @since 2.6.0
zacw@2535
   520
 */
zacw@2535
   521
GList *purple_plugins_get_search_paths(void);
zacw@2535
   522
zacw@2535
   523
/**
Evan@653
   524
 * Unloads all loaded plugins.
Evan@653
   525
 */
Evan@653
   526
void purple_plugins_unload_all(void);
Evan@653
   527
Evan@653
   528
/**
zacw@1759
   529
 * Unloads all plugins of a specific type.
zacw@1759
   530
 */
zacw@1759
   531
void purple_plugins_unload(PurplePluginType type);
zacw@1759
   532
zacw@1759
   533
/**
Evan@653
   534
 * Destroys all registered plugins.
Evan@653
   535
 */
Evan@653
   536
void purple_plugins_destroy_all(void);
Evan@653
   537
Evan@653
   538
/**
Evan@653
   539
 * Saves the list of loaded plugins to the specified preference key
Evan@653
   540
 *
Evan@653
   541
 * @param key The preference key to save the list of plugins to.
Evan@653
   542
 */
Evan@653
   543
void purple_plugins_save_loaded(const char *key);
Evan@653
   544
Evan@653
   545
/**
Evan@653
   546
 * Attempts to load all the plugins in the specified preference key
Evan@653
   547
 * that were loaded when purple last quit.
Evan@653
   548
 *
Evan@653
   549
 * @param key The preference key containing the list of plugins.
Evan@653
   550
 */
Evan@653
   551
void purple_plugins_load_saved(const char *key);
Evan@653
   552
Evan@653
   553
/**
Evan@653
   554
 * Probes for plugins in the registered module paths.
Evan@653
   555
 *
Evan@653
   556
 * @param ext The extension type to probe for, or @c NULL for all.
Evan@653
   557
 *
Evan@653
   558
 * @see purple_plugin_set_probe_path()
Evan@653
   559
 */
Evan@653
   560
void purple_plugins_probe(const char *ext);
Evan@653
   561
Evan@653
   562
/**
Evan@653
   563
 * Returns whether or not plugin support is enabled.
Evan@653
   564
 *
Evan@653
   565
 * @return TRUE if plugin support is enabled, or FALSE otherwise.
Evan@653
   566
 */
Evan@653
   567
gboolean purple_plugins_enabled(void);
Evan@653
   568
Evan@653
   569
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   570
/**
Evan@653
   571
 * Registers a function that will be called when probing is finished.
Evan@653
   572
 *
Evan@653
   573
 * @param func The callback function.
Evan@653
   574
 * @param data Data to pass to the callback.
Evan@653
   575
 * @deprecated If you need this, ask for a plugin-probe signal to be added.
Evan@653
   576
 */
Evan@653
   577
void purple_plugins_register_probe_notify_cb(void (*func)(void *), void *data);
Evan@653
   578
#endif
Evan@653
   579
Evan@653
   580
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   581
/**
Evan@653
   582
 * Unregisters a function that would be called when probing is finished.
Evan@653
   583
 *
Evan@653
   584
 * @param func The callback function.
Evan@653
   585
 * @deprecated If you need this, ask for a plugin-probe signal to be added.
Evan@653
   586
 */
Evan@653
   587
void purple_plugins_unregister_probe_notify_cb(void (*func)(void *));
Evan@653
   588
#endif
Evan@653
   589
Evan@653
   590
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   591
/**
Evan@653
   592
 * Registers a function that will be called when a plugin is loaded.
Evan@653
   593
 *
Evan@653
   594
 * @param func The callback function.
Evan@653
   595
 * @param data Data to pass to the callback.
Evan@653
   596
 * @deprecated Use the plugin-load signal instead.
Evan@653
   597
 */
Evan@653
   598
void purple_plugins_register_load_notify_cb(void (*func)(PurplePlugin *, void *),
Evan@653
   599
										  void *data);
Evan@653
   600
#endif
Evan@653
   601
Evan@653
   602
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   603
/**
Evan@653
   604
 * Unregisters a function that would be called when a plugin is loaded.
Evan@653
   605
 *
Evan@653
   606
 * @param func The callback function.
Evan@653
   607
 * @deprecated Use the plugin-load signal instead.
Evan@653
   608
 */
Evan@653
   609
void purple_plugins_unregister_load_notify_cb(void (*func)(PurplePlugin *, void *));
Evan@653
   610
#endif
Evan@653
   611
Evan@653
   612
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   613
/**
Evan@653
   614
 * Registers a function that will be called when a plugin is unloaded.
Evan@653
   615
 *
Evan@653
   616
 * @param func The callback function.
Evan@653
   617
 * @param data Data to pass to the callback.
Evan@653
   618
 * @deprecated Use the plugin-unload signal instead.
Evan@653
   619
 */
Evan@653
   620
void purple_plugins_register_unload_notify_cb(void (*func)(PurplePlugin *, void *),
Evan@653
   621
											void *data);
Evan@653
   622
#endif
Evan@653
   623
Evan@653
   624
#if !(defined PURPLE_DISABLE_DEPRECATED) || (defined _PURPLE_PLUGIN_C_)
Evan@653
   625
/**
Evan@653
   626
 * Unregisters a function that would be called when a plugin is unloaded.
Evan@653
   627
 *
Evan@653
   628
 * @param func The callback function.
Evan@653
   629
 * @deprecated Use the plugin-unload signal instead.
Evan@653
   630
 */
Evan@653
   631
void purple_plugins_unregister_unload_notify_cb(void (*func)(PurplePlugin *,
Evan@653
   632
														   void *));
Evan@653
   633
#endif
Evan@653
   634
Evan@653
   635
/**
Evan@653
   636
 * Finds a plugin with the specified name.
Evan@653
   637
 *
Evan@653
   638
 * @param name The plugin name.
Evan@653
   639
 *
Evan@653
   640
 * @return The plugin if found, or @c NULL if not found.
Evan@653
   641
 */
Evan@653
   642
PurplePlugin *purple_plugins_find_with_name(const char *name);
Evan@653
   643
Evan@653
   644
/**
Evan@653
   645
 * Finds a plugin with the specified filename (filename with a path).
Evan@653
   646
 *
Evan@653
   647
 * @param filename The plugin filename.
Evan@653
   648
 *
Evan@653
   649
 * @return The plugin if found, or @c NULL if not found.
Evan@653
   650
 */
Evan@653
   651
PurplePlugin *purple_plugins_find_with_filename(const char *filename);
Evan@653
   652
Evan@653
   653
/**
Evan@653
   654
 * Finds a plugin with the specified basename (filename without a path).
Evan@653
   655
 *
Evan@653
   656
 * @param basename The plugin basename.
Evan@653
   657
 *
Evan@653
   658
 * @return The plugin if found, or @c NULL if not found.
Evan@653
   659
 */
Evan@653
   660
PurplePlugin *purple_plugins_find_with_basename(const char *basename);
Evan@653
   661
Evan@653
   662
/**
Evan@653
   663
 * Finds a plugin with the specified plugin ID.
Evan@653
   664
 *
Evan@653
   665
 * @param id The plugin ID.
Evan@653
   666
 *
Evan@653
   667
 * @return The plugin if found, or @c NULL if not found.
Evan@653
   668
 */
Evan@653
   669
PurplePlugin *purple_plugins_find_with_id(const char *id);
Evan@653
   670
Evan@653
   671
/**
Evan@653
   672
 * Returns a list of all loaded plugins.
Evan@653
   673
 *
Evan@653
   674
 * @constreturn A list of all loaded plugins.
Evan@653
   675
 */
Evan@653
   676
GList *purple_plugins_get_loaded(void);
Evan@653
   677
Evan@653
   678
/**
Evan@653
   679
 * Returns a list of all valid protocol plugins.  A protocol
Evan@653
   680
 * plugin is considered invalid if it does not contain the call
Evan@653
   681
 * to the PURPLE_INIT_PLUGIN() macro, or if it was compiled
Evan@653
   682
 * against an incompatable API version.
Evan@653
   683
 *
Evan@653
   684
 * @constreturn A list of all protocol plugins.
Evan@653
   685
 */
Evan@653
   686
GList *purple_plugins_get_protocols(void);
Evan@653
   687
Evan@653
   688
/**
Evan@653
   689
 * Returns a list of all plugins, whether loaded or not.
Evan@653
   690
 *
Evan@653
   691
 * @constreturn A list of all plugins.
Evan@653
   692
 */
Evan@653
   693
GList *purple_plugins_get_all(void);
Evan@653
   694
Evan@653
   695
/*@}*/
Evan@653
   696
Evan@653
   697
/**************************************************************************/
Evan@653
   698
/** @name Plugins SubSytem API                                            */
Evan@653
   699
/**************************************************************************/
Evan@653
   700
/*@{*/
Evan@653
   701
Evan@653
   702
/**
Evan@653
   703
 * Returns the plugin subsystem handle.
Evan@653
   704
 *
Evan@653
   705
 * @return The plugin sybsystem handle.
Evan@653
   706
 */
Evan@653
   707
void *purple_plugins_get_handle(void);
Evan@653
   708
Evan@653
   709
/**
Evan@653
   710
 * Initializes the plugin subsystem
Evan@653
   711
 */
Evan@653
   712
void purple_plugins_init(void);
Evan@653
   713
Evan@653
   714
/**
Evan@653
   715
 * Uninitializes the plugin subsystem
Evan@653
   716
 */
Evan@653
   717
void purple_plugins_uninit(void);
Evan@653
   718
Evan@653
   719
/*@}*/
Evan@653
   720
Evan@653
   721
/**
Evan@653
   722
 * Allocates and returns a new PurplePluginAction.
Evan@653
   723
 *
Evan@653
   724
 * @param label    The description of the action to show to the user.
Evan@653
   725
 * @param callback The callback to call when the user selects this action.
Evan@653
   726
 */
Evan@653
   727
PurplePluginAction *purple_plugin_action_new(const char* label, void (*callback)(PurplePluginAction *));
Evan@653
   728
Evan@653
   729
/**
Evan@653
   730
 * Frees a PurplePluginAction
Evan@653
   731
 *
Evan@653
   732
 * @param action The PurplePluginAction to free.
Evan@653
   733
 */
Evan@653
   734
void purple_plugin_action_free(PurplePluginAction *action);
Evan@653
   735
Evan@653
   736
#ifdef __cplusplus
Evan@653
   737
}
Evan@653
   738
#endif
Evan@653
   739
Evan@653
   740
#endif /* _PURPLE_PLUGIN_H_ */