Added some list functions in plugin API

This commit is contained in:
Sebastien Helleu 2007-11-03 12:42:02 +01:00
parent 04e5afe6e4
commit f6ed0f2e5b
5 changed files with 302 additions and 18 deletions

View File

@ -849,7 +849,7 @@ plugin_api_list_get_add_buffer_line (struct t_plugin_list *list,
/*
* plugin_api_list_get: get list with infos about WeeChat structures
* WARNING: caller has to free string returned
* by this function after use, with weechat_free()
* by this function after use, with weechat_list_free()
*/
struct t_plugin_list *
@ -931,6 +931,96 @@ plugin_api_list_get (struct t_weechat_plugin *plugin, char *name,
return NULL;
}
/*
* plugin_api_list_next: get next item in a list
* if current item pointer is NULL,
* then return first item of list
*/
struct t_plugin_list_item *
plugin_api_list_next (struct t_weechat_plugin *plugin, void *list)
{
if (!plugin || !list)
return NULL;
return plugin_list_next_item ((struct t_plugin_list *)list);
}
/*
* plugin_api_list_prev: get previousi item in a list
* if current item pointer is NULL,
* then return last item of list
*/
struct t_plugin_list_item *
plugin_api_list_prev (struct t_weechat_plugin *plugin, void *list)
{
if (!plugin || !list)
return NULL;
return plugin_list_prev_item ((struct t_plugin_list *)list);
}
/*
* plugin_api_list_int: get an integer variable value in an item
*/
int
plugin_api_list_int (struct t_weechat_plugin *plugin, void *list_item,
char *var)
{
if (!plugin || !list_item)
return 0;
return plugin_list_get_int ((struct t_plugin_list_item *)list_item,
var);
}
/*
* plugin_api_list_string: get a string variable value in an item
*/
char *
plugin_api_list_string (struct t_weechat_plugin *plugin, void *list_item,
char *var)
{
if (!plugin || !list_item)
return NULL;
return plugin_list_get_string ((struct t_plugin_list_item *)list_item,
var);
}
/*
* plugin_api_list_pointer: get a pointer variable value in an item
*/
void *
plugin_api_list_pointer (struct t_weechat_plugin *plugin, void *list_item,
char *var)
{
if (!plugin || !list_item)
return NULL;
return plugin_list_get_pointer ((struct t_plugin_list_item *)list_item,
var);
}
/*
* plugin_api_list_time: get a time variable value in an item
*/
time_t
plugin_api_list_time (struct t_weechat_plugin *plugin, void *list_item,
char *var)
{
if (!plugin || !list_item)
return 0;
return plugin_list_get_time ((struct t_plugin_list_item *)list_item,
var);
}
/*
* plugin_api_get_config_str_value: return string value for any option
* This function should never be called directly

View File

@ -22,14 +22,20 @@
/* strings */
extern void plugin_api_charset_set (struct t_weechat_plugin *, char *);
extern char *plugin_api_iconv_to_internal (struct t_weechat_plugin *, char *, char *);
extern char *plugin_api_iconv_from_internal (struct t_weechat_plugin *, char *, char *);
extern char *plugin_api_iconv_to_internal (struct t_weechat_plugin *, char *,
char *);
extern char *plugin_api_iconv_from_internal (struct t_weechat_plugin *, char *,
char *);
extern char *plugin_api_gettext (struct t_weechat_plugin *, char *);
extern char *plugin_api_ngettext (struct t_weechat_plugin *, char *, char *, int);
extern char *plugin_api_ngettext (struct t_weechat_plugin *, char *, char *,
int);
extern int plugin_api_strcasecmp (struct t_weechat_plugin *,char *, char *);
extern int plugin_api_strncasecmp (struct t_weechat_plugin *,char *, char *, int);
extern char **plugin_api_explode_string (struct t_weechat_plugin *, char *, char *, int, int *);
extern void plugin_api_free_exploded_string (struct t_weechat_plugin *, char **);
extern int plugin_api_strncasecmp (struct t_weechat_plugin *,char *, char *,
int);
extern char **plugin_api_explode_string (struct t_weechat_plugin *, char *,
char *, int, int *);
extern void plugin_api_free_exploded_string (struct t_weechat_plugin *,
char **);
/* directories */
extern int plugin_api_mkdir_home (struct t_weechat_plugin *, char *);
@ -84,13 +90,28 @@ extern void plugin_api_command (struct t_weechat_plugin *, void *, char *);
/* infos */
extern char *plugin_api_info_get (struct t_weechat_plugin *, char *);
/* lists */
extern struct t_plugin_list *(*list_get) (struct t_weechat_plugin *, char *,
void *);
extern struct t_plugin_list_item *list_next (struct t_weechat_plugin *,
void *);
extern struct t_plugin_list_item *list_prev (struct t_weechat_plugin *,
void *);
extern int *list_int (struct t_weechat_plugin *, void *, char *);
extern char *list_str (struct t_weechat_plugin *, void *, char *);
extern void *list_pointer (struct t_weechat_plugin *, void *, char *);
extern time_t list_time (struct t_weechat_plugin *, void *, char *);
extern void list_free (struct t_weechat_plugin *, void *);
/* config */
extern char *plugin_api_config_get (struct t_weechat_plugin *, char *);
extern int plugin_api_config_set (struct t_weechat_plugin *, char *, char *);
extern char *plugin_api_plugin_config_get (struct t_weechat_plugin *, char *);
extern int plugin_api_plugin_config_set (struct t_weechat_plugin *, char *, char *);
extern int plugin_api_plugin_config_set (struct t_weechat_plugin *, char *,
char *);
/* log */
extern void plugin_api_log (struct t_weechat_plugin *, char *, char *, char *, ...);
extern void plugin_api_log (struct t_weechat_plugin *, char *, char *,
char *, ...);
#endif /* plugin-api.h */

View File

@ -28,6 +28,7 @@
#include "../core/weechat.h"
#include "../core/wee-log.h"
#include "../core/wee-string.h"
#include "plugin-list.h"
@ -213,6 +214,150 @@ plugin_list_new_var_time (struct t_plugin_list_item *item,
return new_var;
}
/*
* plugin_list_next_item: return next item for a list
* if current item pointer is NULL,
* then return first item of list
*/
struct t_plugin_list_item *
plugin_list_next_item (struct t_plugin_list *list)
{
if (!list->ptr_item)
{
list->ptr_item = list->items;
return list->ptr_item;
}
list->ptr_item = list->ptr_item->next_item;
return list->ptr_item;
}
/*
* plugin_list_prev_item: return previous item for a list
* if current item pointer is NULL,
* then return last item of list
*/
struct t_plugin_list_item *
plugin_list_prev_item (struct t_plugin_list *list)
{
if (!list->ptr_item)
{
list->ptr_item = list->last_item;
return list->ptr_item;
}
list->ptr_item = list->ptr_item->prev_item;
return list->ptr_item;
}
/*
* plugin_list_get_int: get an integer variable value in an item
*/
int
plugin_list_get_int (struct t_plugin_list_item *item, char *var)
{
struct t_plugin_list_var *ptr_var;
if (!item || !var || !var[0])
return 0;
for (ptr_var = item->vars; ptr_var; ptr_var = ptr_var->next_var)
{
if (string_strcasecmp (ptr_var->name, var) == 0)
{
if (ptr_var->type == PLUGIN_LIST_VAR_INTEGER)
return ptr_var->value_int;
else
return 0;
}
}
/* variable not found */
return 0;
}
/*
* plugin_list_get_string: get a string variable value in an item
*/
char *
plugin_list_get_string (struct t_plugin_list_item *item, char *var)
{
struct t_plugin_list_var *ptr_var;
if (!item || !var || !var[0])
return NULL;
for (ptr_var = item->vars; ptr_var; ptr_var = ptr_var->next_var)
{
if (string_strcasecmp (ptr_var->name, var) == 0)
{
if (ptr_var->type == PLUGIN_LIST_VAR_STRING)
return ptr_var->value_string;
else
return NULL;
}
}
/* variable not found */
return NULL;
}
/*
* plugin_list_get_pointer: get a pointer variable value in an item
*/
void *
plugin_list_get_pointer (struct t_plugin_list_item *item, char *var)
{
struct t_plugin_list_var *ptr_var;
if (!item || !var || !var[0])
return NULL;
for (ptr_var = item->vars; ptr_var; ptr_var = ptr_var->next_var)
{
if (string_strcasecmp (ptr_var->name, var) == 0)
{
if (ptr_var->type == PLUGIN_LIST_VAR_POINTER)
return ptr_var->value_pointer;
else
return NULL;
}
}
/* variable not found */
return NULL;
}
/*
* plugin_list_get_time: get a time variable value in an item
*/
time_t
plugin_list_get_time (struct t_plugin_list_item *item, char *var)
{
struct t_plugin_list_var *ptr_var;
if (!item || !var || !var[0])
return 0;
for (ptr_var = item->vars; ptr_var; ptr_var = ptr_var->next_var)
{
if (string_strcasecmp (ptr_var->name, var) == 0)
{
if (ptr_var->type == PLUGIN_LIST_VAR_TIME)
return ptr_var->value_time;
else
return 0;
}
}
/* variable not found */
return 0;
}
/*
* plugin_list_var_free: free a plugin list variable
*/

View File

@ -76,6 +76,12 @@ extern struct t_plugin_list_var *plugin_list_new_var_pointer (struct t_plugin_li
char *, void *);
extern struct t_plugin_list_var *plugin_list_new_var_time (struct t_plugin_list_item *,
char *, time_t);
extern struct t_plugin_list_item *plugin_list_next_item (struct t_plugin_list *);
extern struct t_plugin_list_item *plugin_list_prev_item (struct t_plugin_list *);
extern int plugin_list_get_int (struct t_plugin_list_item *, char *);
extern char *plugin_list_get_string (struct t_plugin_list_item *, char *);
extern void *plugin_list_get_pointer (struct t_plugin_list_item *, char *);
extern time_t plugin_list_get_time (struct t_plugin_list_item *, char *);
extern void plugin_list_free (struct t_plugin_list *);
extern void plugin_list_print_log ();

View File

@ -49,12 +49,12 @@ struct t_weechat_plugin
struct t_weechat_plugin *prev_plugin; /* link to previous plugin */
struct t_weechat_plugin *next_plugin; /* link to next plugin */
/* plugin functions (interface) */
/* plugin functions (API) */
/* IMPORTANT NOTE for WeeChat developers: always add new interface functions
/* IMPORTANT NOTE for WeeChat developers: always add new API functions
at the END of functions, for keeping backward compatibility with
existing plugins */
/* strings */
void (*charset_set) (struct t_weechat_plugin *, char *);
char *(*iconv_to_internal) (struct t_weechat_plugin *, char *, char *);
@ -66,19 +66,19 @@ struct t_weechat_plugin
char **(*explode_string) (struct t_weechat_plugin *, char *, char *, int,
int *);
void (*free_exploded_string) (struct t_weechat_plugin *, char **);
/* directories */
int (*mkdir_home) (struct t_weechat_plugin *, char *);
void (*exec_on_files) (struct t_weechat_plugin *, char *,
int (*)(char *));
/* display */
void (*printf) (struct t_weechat_plugin *, void *, char *, ...);
char *(*prefix) (struct t_weechat_plugin *, char *);
char *(*color) (struct t_weechat_plugin *, char *);
void (*print_infobar) (struct t_weechat_plugin *, int, char *, ...);
void (*infobar_remove) (struct t_weechat_plugin *, int);
/* hooks */
struct t_hook *(*hook_command) (struct t_weechat_plugin *, char *, char *,
char *, char *, char *,
@ -108,16 +108,21 @@ struct t_weechat_plugin
/* command */
void (*command) (struct t_weechat_plugin *, void *, char *);
/* infos */
char *(*info_get) (struct t_weechat_plugin *, char *);
/* lists */
struct t_plugin_list *(*list_get) (struct t_weechat_plugin *, char *,
void *);
struct t_plugin_list *(*list_next) (struct t_weechat_plugin *, void *);
struct t_plugin_list *(*list_prev) (struct t_weechat_plugin *, void *);
int (*list_int) (struct t_weechat_plugin *, void *, char *);
char *(*list_string) (struct t_weechat_plugin *, void *, char *);
void *(*list_pointer) (struct t_weechat_plugin *, void *, char *);
time_t (*list_time) (struct t_weechat_plugin *, void *, char *);
void (*list_free) (struct t_weechat_plugin *, void *);
/* config */
char *(*config_get) (struct t_weechat_plugin *, char *);
int (*config_set) (struct t_weechat_plugin *, char *, char *);
@ -188,6 +193,23 @@ struct t_weechat_plugin
#define weechat_info_get(infoname) \
weechat_plugin->info_get(weechat_plugin, infoname)
#define weechat_list_get(name, pointer) \
weechat_plugin->list_get(weechat_plugin, name, pointer)
#define weechat_list_next(ptrlist) \
weechat_plugin->list_next(weechat_plugin, ptrlist)
#define weechat_list_prev(ptrlist) \
weechat_plugin->list_prev(weechat_plugin, ptrlist)
#define weechat_list_int(ptritem, var) \
weechat_plugin->list_int(weechat_plugin, ptritem, var)
#define weechat_list_string(ptritem, var) \
weechat_plugin->list_string(weechat_plugin, ptritem, var)
#define weechat_list_pointer(ptritem, var) \
weechat_plugin->list_pointer(weechat_plugin, ptritem, var)
#define weechat_list_time(ptritem, var) \
weechat_plugin->list_time(weechat_plugin, ptritem, var)
#define weechat_list_free(ptrlist) \
weechat_plugin->list_free(weechat_plugin, ptrlist)
#define weechat_config_get(option) \
weechat_plugin->config_get(weechat_plugin, option)
#define weechat_config_set(option, value) \