diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2009-02-22 16:49:38 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2009-02-22 16:49:38 +0100 |
commit | 2c9bf846a6db7258ca828862068f6f0e51179627 (patch) | |
tree | e346318b2c6d36e03e9e362a8e67e16d331ca850 | |
parent | b2584798a1549089095a3a2e98e1c93424dd9435 (diff) | |
download | weechat-2c9bf846a6db7258ca828862068f6f0e51179627.zip |
Add upgrade functions in script plugin API
-rw-r--r-- | src/core/wee-upgrade-file.c | 22 | ||||
-rw-r--r-- | src/core/wee-upgrade-file.h | 16 | ||||
-rw-r--r-- | src/core/wee-upgrade.c | 14 | ||||
-rw-r--r-- | src/plugins/irc/irc-upgrade.c | 14 | ||||
-rw-r--r-- | src/plugins/jabber/jabber-upgrade.c | 14 | ||||
-rw-r--r-- | src/plugins/plugin.c | 2 | ||||
-rw-r--r-- | src/plugins/relay/relay-upgrade.c | 15 | ||||
-rw-r--r-- | src/plugins/scripts/lua/weechat-lua-api.c | 211 | ||||
-rw-r--r-- | src/plugins/scripts/perl/weechat-perl-api.c | 184 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python-api.c | 190 | ||||
-rw-r--r-- | src/plugins/scripts/ruby/weechat-ruby-api.c | 211 | ||||
-rw-r--r-- | src/plugins/scripts/script-api.c | 45 | ||||
-rw-r--r-- | src/plugins/scripts/script-api.h | 8 | ||||
-rw-r--r-- | src/plugins/scripts/script-callback.c | 2 | ||||
-rw-r--r-- | src/plugins/scripts/script-callback.h | 1 | ||||
-rw-r--r-- | src/plugins/scripts/tcl/weechat-tcl-api.c | 213 | ||||
-rw-r--r-- | src/plugins/weechat-plugin.h | 21 | ||||
-rw-r--r-- | src/plugins/xfer/xfer-upgrade.c | 13 |
18 files changed, 1149 insertions, 47 deletions
diff --git a/src/core/wee-upgrade-file.c b/src/core/wee-upgrade-file.c index 96226433b..52f6d9e7a 100644 --- a/src/core/wee-upgrade-file.c +++ b/src/core/wee-upgrade-file.c @@ -164,13 +164,13 @@ upgrade_file_write_buffer (struct t_upgrade_file *upgrade_file, void *pointer, } /* - * upgrade_file_create: create an upgrade file - * if write == 1 then it's opened in write mode, otherwise - * read mode + * upgrade_file_new: create an upgrade file + * if write == 1 then it's opened in write mode, otherwise + * read mode */ struct t_upgrade_file * -upgrade_file_create (const char *filename, int write) +upgrade_file_new (const char *filename, int write) { int length; struct t_upgrade_file *new_upgrade_file; @@ -661,7 +661,10 @@ upgrade_file_read_object (struct t_upgrade_file *upgrade_file) if (upgrade_file->callback_read) { - if ((int)(upgrade_file->callback_read) (object_id, infolist) == WEECHAT_RC_ERROR) + if ((int)(upgrade_file->callback_read) (upgrade_file->callback_read_data, + upgrade_file, + object_id, + infolist) == WEECHAT_RC_ERROR) rc = 0; } @@ -680,16 +683,21 @@ upgrade_file_read_object (struct t_upgrade_file *upgrade_file) /* * upgrade_file_read: read an upgrade file + * return 1 if ok, 0 if error */ int upgrade_file_read (struct t_upgrade_file *upgrade_file, - int (*callback_read)(int object_id, - struct t_infolist *infolist)) + int (*callback_read)(void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist), + void *callback_read_data) { char *signature; upgrade_file->callback_read = callback_read; + upgrade_file->callback_read_data = callback_read_data; signature = NULL; if (!upgrade_file_read_string (upgrade_file, &signature)) diff --git a/src/core/wee-upgrade-file.h b/src/core/wee-upgrade-file.h index 266195b5d..ff865ca05 100644 --- a/src/core/wee-upgrade-file.h +++ b/src/core/wee-upgrade-file.h @@ -41,20 +41,26 @@ struct t_upgrade_file long last_read_pos; /* last read position */ int last_read_length; /* last read length */ int (*callback_read) /* callback called when reading */ - (int object_id, /* file */ + (void *data, /* file */ + struct t_upgrade_file *upgrade_file, + int object_id, struct t_infolist *infolist); + void *callback_read_data; /* data sent to callback */ struct t_upgrade_file *prev_upgrade; /* link to previous upgrade file */ struct t_upgrade_file *next_upgrade; /* link to next upgrade file */ }; -extern struct t_upgrade_file *upgrade_file_create (const char *filename, - int write); +extern struct t_upgrade_file *upgrade_file_new (const char *filename, + int write); extern int upgrade_file_write_object (struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist); extern int upgrade_file_read (struct t_upgrade_file *upgrade_file, - int (*callback_read)(int object_id, - struct t_infolist *infolist)); + int (*callback_read)(void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist), + void *callback_read_data); extern void upgrade_file_close (struct t_upgrade_file *upgrade_file); #endif /* wee-upgrade-file.h */ diff --git a/src/core/wee-upgrade.c b/src/core/wee-upgrade.c index cf5c49345..4cc32d722 100644 --- a/src/core/wee-upgrade.c +++ b/src/core/wee-upgrade.c @@ -257,7 +257,7 @@ upgrade_weechat_save () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = upgrade_file_create (WEECHAT_UPGRADE_FILENAME, 1); + upgrade_file = upgrade_file_new (WEECHAT_UPGRADE_FILENAME, 1); if (!upgrade_file) return 0; @@ -277,7 +277,9 @@ upgrade_weechat_save () */ int -upgrade_weechat_read_cb (int object_id, +upgrade_weechat_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, struct t_infolist *infolist) { const char *key, *var_name, *type, *name, *group_name; @@ -289,6 +291,10 @@ upgrade_weechat_read_cb (int object_id, void *buf; int size, index, length; + /* make C compiler happy */ + (void) data; + (void) upgrade_file; + infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { @@ -534,8 +540,8 @@ upgrade_weechat_load () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = upgrade_file_create (WEECHAT_UPGRADE_FILENAME, 0); - rc = upgrade_file_read (upgrade_file, &upgrade_weechat_read_cb); + upgrade_file = upgrade_file_new (WEECHAT_UPGRADE_FILENAME, 0); + rc = upgrade_file_read (upgrade_file, &upgrade_weechat_read_cb, NULL); if (!hotlist_reset) gui_hotlist_clear (); diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c index 5ce1cc4d2..096f2839c 100644 --- a/src/plugins/irc/irc-upgrade.c +++ b/src/plugins/irc/irc-upgrade.c @@ -124,7 +124,7 @@ irc_upgrade_save () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = weechat_upgrade_create (IRC_UPGRADE_FILENAME, 1); + upgrade_file = weechat_upgrade_new (IRC_UPGRADE_FILENAME, 1); if (!upgrade_file) return 0; @@ -166,7 +166,9 @@ irc_upgrade_set_buffer_callbacks () */ int -irc_upgrade_read_cb (int object_id, +irc_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, struct t_infolist *infolist) { int flags, sock, size, i, index; @@ -175,6 +177,10 @@ irc_upgrade_read_cb (int object_id, struct t_irc_nick *ptr_nick; struct t_gui_buffer *ptr_buffer; + /* make C compiler happy */ + (void) data; + (void) upgrade_file; + weechat_infolist_reset_item_cursor (infolist); while (weechat_infolist_next (infolist)) { @@ -351,8 +357,8 @@ irc_upgrade_load () irc_upgrade_set_buffer_callbacks (); - upgrade_file = weechat_upgrade_create (IRC_UPGRADE_FILENAME, 0); - rc = weechat_upgrade_read (upgrade_file, &irc_upgrade_read_cb); + upgrade_file = weechat_upgrade_new (IRC_UPGRADE_FILENAME, 0); + rc = weechat_upgrade_read (upgrade_file, &irc_upgrade_read_cb, NULL); return rc; } diff --git a/src/plugins/jabber/jabber-upgrade.c b/src/plugins/jabber/jabber-upgrade.c index 05942c734..75229a6e6 100644 --- a/src/plugins/jabber/jabber-upgrade.c +++ b/src/plugins/jabber/jabber-upgrade.c @@ -125,7 +125,7 @@ jabber_upgrade_save () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = weechat_upgrade_create (JABBER_UPGRADE_FILENAME, 1); + upgrade_file = weechat_upgrade_new (JABBER_UPGRADE_FILENAME, 1); if (!upgrade_file) return 0; @@ -168,7 +168,9 @@ jabber_upgrade_set_buffer_callbacks () */ int -jabber_upgrade_read_cb (int object_id, +jabber_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, struct t_infolist *infolist) { int flags, size, i, index; @@ -177,6 +179,10 @@ jabber_upgrade_read_cb (int object_id, struct t_jabber_buddy *ptr_buddy; struct t_gui_buffer *ptr_buffer; + /* make C compiler happy */ + (void) data; + (void) upgrade_file; + weechat_infolist_reset_item_cursor (infolist); while (weechat_infolist_next (infolist)) { @@ -322,8 +328,8 @@ jabber_upgrade_load () jabber_upgrade_set_buffer_callbacks (); - upgrade_file = weechat_upgrade_create (JABBER_UPGRADE_FILENAME, 0); - rc = weechat_upgrade_read (upgrade_file, &jabber_upgrade_read_cb); + upgrade_file = weechat_upgrade_new (JABBER_UPGRADE_FILENAME, 0); + rc = weechat_upgrade_read (upgrade_file, &jabber_upgrade_read_cb, NULL); return rc; } diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index 277283a13..26588ff5b 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -512,7 +512,7 @@ plugin_load (const char *filename) new_plugin->infolist_time = &plugin_api_infolist_time; new_plugin->infolist_free = &plugin_api_infolist_free; - new_plugin->upgrade_create = &upgrade_file_create; + new_plugin->upgrade_new = &upgrade_file_new; new_plugin->upgrade_write_object = &upgrade_file_write_object; new_plugin->upgrade_read = &upgrade_file_read; new_plugin->upgrade_close = &upgrade_file_close; diff --git a/src/plugins/relay/relay-upgrade.c b/src/plugins/relay/relay-upgrade.c index 3fcb0e332..2fd43b189 100644 --- a/src/plugins/relay/relay-upgrade.c +++ b/src/plugins/relay/relay-upgrade.c @@ -50,7 +50,7 @@ relay_upgrade_save () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = weechat_upgrade_create (RELAY_UPGRADE_FILENAME, 1); + upgrade_file = weechat_upgrade_new (RELAY_UPGRADE_FILENAME, 1); if (!upgrade_file) return 0; @@ -92,12 +92,17 @@ relay_upgrade_set_buffer_callbacks () */ int -relay_upgrade_read_cb (int object_id, - struct t_infolist *infolist) +relay_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) { /* TODO: write relay read cb */ + (void) data; + (void) upgrade_file; (void) object_id; (void) infolist; + return WEECHAT_RC_OK; } @@ -114,8 +119,8 @@ relay_upgrade_load () relay_upgrade_set_buffer_callbacks (); - upgrade_file = weechat_upgrade_create (RELAY_UPGRADE_FILENAME, 0); - rc = weechat_upgrade_read (upgrade_file, &relay_upgrade_read_cb); + upgrade_file = weechat_upgrade_new (RELAY_UPGRADE_FILENAME, 0); + rc = weechat_upgrade_read (upgrade_file, &relay_upgrade_read_cb, NULL); return rc; } diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c index 2b0284e5b..9393dd0a4 100644 --- a/src/plugins/scripts/lua/weechat-lua-api.c +++ b/src/plugins/scripts/lua/weechat-lua-api.c @@ -6145,6 +6145,213 @@ weechat_lua_api_infolist_free (lua_State *L) } /* + * weechat_lua_api_config_new: create a new configuration file + */ + +static int +weechat_lua_api_upgrade_new (lua_State *L) +{ + const char *filename; + char *result; + int n, write; + + /* make C compiler happy */ + (void) L; + + if (!lua_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_new"); + LUA_RETURN_EMPTY; + } + + filename = NULL; + write = 0; + + n = lua_gettop (lua_current_interpreter); + + if (n < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + LUA_RETURN_EMPTY; + } + + filename = lua_tostring (lua_current_interpreter, -2); + write = lua_tonumber (lua_current_interpreter, -1); + + result = script_ptr2str (weechat_upgrade_new (filename, write)); + + LUA_RETURN_STRING_FREE(result); +} + +/* + * weechat_lua_api_upgrade_write_object: write object in upgrade file + */ + +static int +weechat_lua_api_upgrade_write_object (lua_State *L) +{ + const char *upgrade_file, *infolist; + int n, object_id, rc; + + /* make C compiler happy */ + (void) L; + + if (!lua_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_write_object"); + LUA_RETURN_INT(0); + } + + upgrade_file = NULL; + object_id = 0; + infolist = NULL; + + n = lua_gettop (lua_current_interpreter); + + if (n < 3) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + LUA_RETURN_INT(0); + } + + upgrade_file = lua_tostring (lua_current_interpreter, -3); + object_id = lua_tonumber (lua_current_interpreter, -2); + infolist = lua_tostring (lua_current_interpreter, -1); + + rc = weechat_upgrade_write_object (script_str2ptr (upgrade_file), + object_id, + script_str2ptr (infolist)); + + LUA_RETURN_INT(rc); +} + +/* + * weechat_lua_api_upgrade_read_cb: callback for reading object in upgrade file + */ + +int +weechat_lua_api_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) +{ + struct t_script_callback *script_callback; + char *lua_argv[4], str_object_id[32]; + int *rc, ret; + + script_callback = (struct t_script_callback *)data; + + if (script_callback && script_callback->function && script_callback->function[0]) + { + snprintf (str_object_id, sizeof (str_object_id), "%d", object_id); + + lua_argv[0] = script_ptr2str (upgrade_file); + lua_argv[1] = str_object_id; + lua_argv[2] = script_ptr2str (infolist); + lua_argv[3] = NULL; + + rc = (int *) weechat_lua_exec (script_callback->script, + WEECHAT_SCRIPT_EXEC_INT, + script_callback->function, + lua_argv); + + if (!rc) + ret = WEECHAT_RC_ERROR; + else + { + ret = *rc; + free (rc); + } + if (lua_argv[0]) + free (lua_argv[0]); + if (lua_argv[2]) + free (lua_argv[2]); + + return ret; + } + + return WEECHAT_RC_ERROR; +} + +/* + * weechat_lua_api_upgrade_read: read upgrade file + */ + +static int +weechat_lua_api_upgrade_read (lua_State *L) +{ + const char *upgrade_file, *function_read; + int n, rc; + + /* make C compiler happy */ + (void) L; + + if (!lua_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_read"); + LUA_RETURN_EMPTY; + } + + upgrade_file = NULL; + function_read = NULL; + + n = lua_gettop (lua_current_interpreter); + + if (n < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_read"); + LUA_RETURN_EMPTY; + } + + upgrade_file = lua_tostring (lua_current_interpreter, -2); + function_read = lua_tostring (lua_current_interpreter, -1); + + rc = script_api_upgrade_read (weechat_lua_plugin, + lua_current_script, + script_str2ptr (upgrade_file), + &weechat_lua_api_upgrade_read_cb, + function_read); + + LUA_RETURN_INT(rc); +} + +/* + * weechat_lua_api_upgrade_close: close upgrade file + */ + +static int +weechat_lua_api_upgrade_close (lua_State *L) +{ + const char *upgrade_file; + int n; + + /* make C compiler happy */ + (void) L; + + if (!lua_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_close"); + LUA_RETURN_ERROR; + } + + upgrade_file = NULL; + + n = lua_gettop (lua_current_interpreter); + + if (n < 1) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_close"); + LUA_RETURN_INT(0); + } + + upgrade_file = lua_tostring (lua_current_interpreter, -1); + + weechat_upgrade_close (script_str2ptr (upgrade_file)); + + LUA_RETURN_OK; +} + +/* * Lua constant as functions */ @@ -6639,6 +6846,10 @@ const struct luaL_reg weechat_lua_api_funcs[] = { { "infolist_pointer", &weechat_lua_api_infolist_pointer }, { "infolist_time", &weechat_lua_api_infolist_time }, { "infolist_free", &weechat_lua_api_infolist_free }, + { "upgrade_new", &weechat_lua_api_upgrade_new }, + { "upgrade_write_object", &weechat_lua_api_upgrade_write_object }, + { "upgrade_read", &weechat_lua_api_upgrade_read }, + { "upgrade_close", &weechat_lua_api_upgrade_close }, /* define constants as function which returns values */ diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c index 33cfe9c41..1c4f08e90 100644 --- a/src/plugins/scripts/perl/weechat-perl-api.c +++ b/src/plugins/scripts/perl/weechat-perl-api.c @@ -5134,6 +5134,186 @@ static XS (XS_weechat_api_infolist_free) } /* + * weechat::upgrade_new: create an upgrade file + */ + +static XS (XS_weechat_api_upgrade_new) +{ + char *result, *filename; + dXSARGS; + + /* make C compiler happy */ + (void) cv; + + if (!perl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_new"); + PERL_RETURN_EMPTY; + } + + if (items < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + PERL_RETURN_EMPTY; + } + + filename = SvPV (ST (0), PL_na); + result = script_ptr2str (weechat_upgrade_new (filename, + SvIV (ST (1)))); /* write */ + + PERL_RETURN_STRING_FREE(result); +} + +/* + * weechat::upgrade_write_object: write object in upgrade file + */ + +static XS (XS_weechat_api_upgrade_write_object) +{ + char *upgrade_file, *infolist; + int rc; + dXSARGS; + + /* make C compiler happy */ + (void) cv; + + if (!perl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_write_object"); + PERL_RETURN_INT(0); + } + + if (items < 3) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + PERL_RETURN_INT(0); + } + + upgrade_file = SvPV (ST (0), PL_na); + infolist = SvPV (ST (2), PL_na); + rc = weechat_upgrade_write_object (script_str2ptr (upgrade_file), + SvIV (ST (1)), /* object_id */ + script_str2ptr (infolist)); + + PERL_RETURN_INT(rc); +} + +/* + * weechat_perl_api_upgrade_read_cb: callback for reading object in upgrade file + */ + +int +weechat_perl_api_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) +{ + struct t_script_callback *script_callback; + char *perl_argv[4], str_object_id[32]; + int *rc, ret; + + script_callback = (struct t_script_callback *)data; + + if (script_callback && script_callback->function && script_callback->function[0]) + { + snprintf (str_object_id, sizeof (str_object_id), "%d", object_id); + + perl_argv[0] = script_ptr2str (upgrade_file); + perl_argv[1] = str_object_id; + perl_argv[2] = script_ptr2str (infolist); + perl_argv[3] = NULL; + + rc = (int *) weechat_perl_exec (script_callback->script, + WEECHAT_SCRIPT_EXEC_INT, + script_callback->function, + perl_argv); + + if (!rc) + ret = WEECHAT_RC_ERROR; + else + { + ret = *rc; + free (rc); + } + if (perl_argv[0]) + free (perl_argv[0]); + if (perl_argv[2]) + free (perl_argv[2]); + + return ret; + } + + return WEECHAT_RC_ERROR; +} + +/* + * weechat::config_upgrade_read: read upgrade file + */ + +static XS (XS_weechat_api_upgrade_read) +{ + char *upgrade_file, *function_read; + int rc; + dXSARGS; + + /* make C compiler happy */ + (void) cv; + + if (!perl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_read"); + PERL_RETURN_INT(0); + } + + if (items < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_read"); + PERL_RETURN_INT(0); + } + + upgrade_file = SvPV (ST (0), PL_na); + function_read = SvPV (ST (1), PL_na); + rc = script_api_upgrade_read (weechat_perl_plugin, + perl_current_script, + script_str2ptr (upgrade_file), + &weechat_perl_api_upgrade_read_cb, + function_read); + + PERL_RETURN_INT(rc); +} + +/* + * weechat::upgrade_close: close upgrade file + */ + +static XS (XS_weechat_api_upgrade_close) +{ + char *upgrade_file; + dXSARGS; + + /* make C compiler happy */ + (void) cv; + + if (!perl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_close"); + PERL_RETURN_ERROR; + } + + if (items < 1) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_close"); + PERL_RETURN_ERROR; + } + + upgrade_file = SvPV (ST (0), PL_na); + + weechat_upgrade_close (script_str2ptr (upgrade_file)); + + PERL_RETURN_OK; +} + +/* * weechat_perl_api_init: initialize subroutines */ @@ -5271,6 +5451,10 @@ weechat_perl_api_init (pTHX) newXS ("weechat::infolist_pointer", XS_weechat_api_infolist_pointer, "weechat"); newXS ("weechat::infolist_time", XS_weechat_api_infolist_time, "weechat"); newXS ("weechat::infolist_free", XS_weechat_api_infolist_free, "weechat"); + newXS ("weechat::upgrade_new", XS_weechat_api_upgrade_new, "weechat"); + newXS ("weechat::upgrade_write_object", XS_weechat_api_upgrade_write_object, "weechat"); + newXS ("weechat::upgrade_read", XS_weechat_api_upgrade_read, "weechat"); + newXS ("weechat::upgrade_close", XS_weechat_api_upgrade_close, "weechat"); /* interface constants */ stash = gv_stashpv ("weechat", TRUE); diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c index eba98086c..265304ef5 100644 --- a/src/plugins/scripts/python/weechat-python-api.c +++ b/src/plugins/scripts/python/weechat-python-api.c @@ -5463,6 +5463,192 @@ weechat_python_api_infolist_free (PyObject *self, PyObject *args) } /* + * weechat_python_api_upgrade_new: create an upgrade file + */ + +static PyObject * +weechat_python_api_upgrade_new (PyObject *self, PyObject *args) +{ + char *filename, *result; + int write; + PyObject *object; + + /* make C compiler happy */ + (void) self; + + if (!python_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_new"); + PYTHON_RETURN_EMPTY; + } + + filename = NULL; + write = 0; + + if (!PyArg_ParseTuple (args, "si", &filename, &write)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + PYTHON_RETURN_EMPTY; + } + + result = script_ptr2str (weechat_upgrade_new (filename, write)); + + PYTHON_RETURN_STRING_FREE(result); +} + +/* + * weechat_python_api_upgrade_write_object: write object in upgrade file + */ + +static PyObject * +weechat_python_api_upgrade_write_object (PyObject *self, PyObject *args) +{ + char *upgrade_file, *infolist; + int object_id, rc; + + /* make C compiler happy */ + (void) self; + + if (!python_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_write_object"); + PYTHON_RETURN_INT(0); + } + + upgrade_file = NULL; + object_id = 0; + infolist = NULL; + + if (!PyArg_ParseTuple (args, "sis", &upgrade_file, &object_id, &infolist)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + PYTHON_RETURN_INT(0); + } + + rc = weechat_upgrade_write_object (script_str2ptr (upgrade_file), + object_id, + script_str2ptr (infolist)); + + PYTHON_RETURN_INT(rc); +} + +/* + * weechat_python_api_upgrade_read_cb: callback for reading object in upgrade file + */ + +int +weechat_python_api_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) +{ + struct t_script_callback *script_callback; + char *python_argv[4], str_object_id[32]; + int *rc, ret; + + script_callback = (struct t_script_callback *)data; + + if (script_callback && script_callback->function && script_callback->function[0]) + { + snprintf (str_object_id, sizeof (str_object_id), "%d", object_id); + + python_argv[0] = script_ptr2str (upgrade_file); + python_argv[1] = str_object_id; + python_argv[2] = script_ptr2str (infolist); + python_argv[3] = NULL; + + rc = (int *) weechat_python_exec (script_callback->script, + WEECHAT_SCRIPT_EXEC_INT, + script_callback->function, + python_argv); + + if (!rc) + ret = WEECHAT_RC_ERROR; + else + { + ret = *rc; + free (rc); + } + if (python_argv[0]) + free (python_argv[0]); + if (python_argv[2]) + free (python_argv[2]); + + return ret; + } + + return WEECHAT_RC_ERROR; +} + +/* + * weechat_python_api_upgrade_read: read upgrade file + */ + +static PyObject * +weechat_python_api_upgrade_read (PyObject *self, PyObject *args) +{ + char *upgrade_file, *function_read; + int rc; + + /* make C compiler happy */ + (void) self; + + if (!python_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_read"); + PYTHON_RETURN_INT(0); + } + + upgrade_file = NULL; + function_read = NULL; + + if (!PyArg_ParseTuple (args, "ss", &upgrade_file, &function_read)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_read"); + PYTHON_RETURN_INT(0); + } + + rc = script_api_upgrade_read (weechat_python_plugin, + python_current_script, + script_str2ptr (upgrade_file), + &weechat_python_api_upgrade_read_cb, + function_read); + + PYTHON_RETURN_INT(rc); +} + +/* + * weechat_python_api_upgrade_close: close upgrade file + */ + +static PyObject * +weechat_python_api_upgrade_close (PyObject *self, PyObject *args) +{ + char *upgrade_file; + + /* make C compiler happy */ + (void) self; + + if (!python_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_close"); + PYTHON_RETURN_ERROR; + } + + upgrade_file = NULL; + + if (!PyArg_ParseTuple (args, "s", &upgrade_file)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_close"); + PYTHON_RETURN_ERROR; + } + + weechat_upgrade_close (script_str2ptr (upgrade_file)); + + PYTHON_RETURN_OK; +} + +/* * Python subroutines */ @@ -5594,5 +5780,9 @@ PyMethodDef weechat_python_funcs[] = { "infolist_pointer", &weechat_python_api_infolist_pointer, METH_VARARGS, "" }, { "infolist_time", &weechat_python_api_infolist_time, METH_VARARGS, "" }, { "infolist_free", &weechat_python_api_infolist_free, METH_VARARGS, "" }, + { "upgrade_new", &weechat_python_api_upgrade_new, METH_VARARGS, "" }, + { "upgrade_write_object", &weechat_python_api_upgrade_write_object, METH_VARARGS, "" }, + { "upgrade_read", &weechat_python_api_upgrade_read, METH_VARARGS, "" }, + { "upgrade_close", &weechat_python_api_upgrade_close, METH_VARARGS, "" }, { NULL, NULL, 0, NULL } }; diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c index 0b884aa90..8c795e3cb 100644 --- a/src/plugins/scripts/ruby/weechat-ruby-api.c +++ b/src/plugins/scripts/ruby/weechat-ruby-api.c @@ -6215,6 +6215,213 @@ weechat_ruby_api_infolist_free (VALUE class, VALUE infolist) } /* + * weechat_ruby_api_upgrade_new: create an upgrade file + */ + +static VALUE +weechat_ruby_api_upgrade_new (VALUE class, VALUE filename, VALUE write) +{ + char *c_filename, *result; + int c_write; + VALUE return_value; + + /* make C compiler happy */ + (void) class; + + if (!ruby_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_new"); + RUBY_RETURN_EMPTY; + } + + c_filename = NULL; + c_write = 0; + + if (NIL_P (filename) || NIL_P (write)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + RUBY_RETURN_EMPTY; + } + + Check_Type (filename, T_STRING); + Check_Type (write, T_FIXNUM); + + c_filename = STR2CSTR (filename); + c_write = FIX2INT (write); + + result = script_ptr2str (weechat_upgrade_new (c_filename, + c_write)); + + RUBY_RETURN_STRING_FREE(result); +} + +/* + * weechat_ruby_api_upgrade_write_object: write object in upgrade file + */ + +static VALUE +weechat_ruby_api_upgrade_write_object (VALUE class, VALUE upgrade_file, + VALUE object_id, VALUE infolist) +{ + char *c_upgrade_file, *c_infolist; + int c_object_id, rc; + + /* make C compiler happy */ + (void) class; + + if (!ruby_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_write_object"); + RUBY_RETURN_INT(0); + } + + if (NIL_P (upgrade_file) || NIL_P (object_id) || NIL_P (infolist)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + RUBY_RETURN_INT(0); + } + + Check_Type (upgrade_file, T_STRING); + Check_Type (object_id, T_FIXNUM); + Check_Type (infolist, T_STRING); + + c_upgrade_file = STR2CSTR (upgrade_file); + c_object_id = FIX2INT (object_id); + c_infolist = STR2CSTR (infolist); + + rc = weechat_upgrade_write_object (script_str2ptr (c_upgrade_file), + c_object_id, + script_str2ptr (c_infolist)); + + RUBY_RETURN_INT(rc); +} + +/* + * weechat_ruby_api_upgrade_read_cb: callback for reading object in upgrade file + */ + +int +weechat_ruby_api_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) +{ + struct t_script_callback *script_callback; + char *ruby_argv[4], str_object_id[32]; + int *rc, ret; + + script_callback = (struct t_script_callback *)data; + + if (script_callback && script_callback->function && script_callback->function[0]) + { + snprintf (str_object_id, sizeof (str_object_id), "%d", object_id); + + ruby_argv[0] = script_ptr2str (upgrade_file); + ruby_argv[1] = str_object_id; + ruby_argv[2] = script_ptr2str (infolist); + ruby_argv[3] = NULL; + + rc = (int *) weechat_ruby_exec (script_callback->script, + WEECHAT_SCRIPT_EXEC_INT, + script_callback->function, + ruby_argv); + + if (!rc) + ret = WEECHAT_RC_ERROR; + else + { + ret = *rc; + free (rc); + } + if (ruby_argv[0]) + free (ruby_argv[0]); + if (ruby_argv[2]) + free (ruby_argv[2]); + + return ret; + } + + return WEECHAT_RC_ERROR; +} + +/* + * weechat_ruby_api_upgrade_read: read upgrade file + */ + +static VALUE +weechat_ruby_api_upgrade_read (VALUE class, VALUE upgrade_file, + VALUE function_read) +{ + char *c_upgrade_file, *c_function_read; + int rc; + + /* make C compiler happy */ + (void) class; + + if (!ruby_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_read"); + RUBY_RETURN_INT(0); + } + + c_upgrade_file = NULL; + c_function_read = NULL; + + if (NIL_P (upgrade_file) || NIL_P (function_read)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_read"); + RUBY_RETURN_INT(0); + } + + Check_Type (upgrade_file, T_STRING); + Check_Type (function_read, T_STRING); + + c_upgrade_file = STR2CSTR (upgrade_file); + c_function_read = STR2CSTR (function_read); + + rc = script_api_upgrade_read (weechat_ruby_plugin, + ruby_current_script, + script_str2ptr (c_upgrade_file), + &weechat_ruby_api_upgrade_read_cb, + c_function_read); + + RUBY_RETURN_INT(rc); +} + +/* + * weechat_ruby_api_upgrade_close: close upgrade file + */ + +static VALUE +weechat_ruby_api_upgrade_close (VALUE class, VALUE upgrade_file) +{ + char *c_upgrade_file; + + /* make C compiler happy */ + (void) class; + + if (!ruby_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_close"); + RUBY_RETURN_ERROR; + } + + if (NIL_P (upgrade_file)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_close"); + RUBY_RETURN_ERROR; + } + + Check_Type (upgrade_file, T_STRING); + + c_upgrade_file = STR2CSTR (upgrade_file); + + weechat_upgrade_close (script_str2ptr (c_upgrade_file)); + + RUBY_RETURN_OK; +} + +/* * weechat_ruby_api_init: init Ruby API: add variables and functions */ @@ -6389,4 +6596,8 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) rb_define_module_function (ruby_mWeechat, "infolist_pointer", &weechat_ruby_api_infolist_pointer, 2); rb_define_module_function (ruby_mWeechat, "infolist_time", &weechat_ruby_api_infolist_time, 2); rb_define_module_function (ruby_mWeechat, "infolist_free", &weechat_ruby_api_infolist_free, 1); + rb_define_module_function (ruby_mWeechat, "upgrade_new", &weechat_ruby_api_upgrade_new, 2); + rb_define_module_function (ruby_mWeechat, "upgrade_write_object", &weechat_ruby_api_upgrade_write_object, 3); + rb_define_module_function (ruby_mWeechat, "upgrade_read", &weechat_ruby_api_upgrade_read, 2); + rb_define_module_function (ruby_mWeechat, "upgrade_close", &weechat_ruby_api_upgrade_close, 1); } diff --git a/src/plugins/scripts/script-api.c b/src/plugins/scripts/script-api.c index 994db733b..e43cc50f0 100644 --- a/src/plugins/scripts/script-api.c +++ b/src/plugins/scripts/script-api.c @@ -105,15 +105,15 @@ script_api_config_new_section (struct t_weechat_plugin *weechat_plugin, struct t_config_section *section, const char *option_name, const char *value), - char *function_read, + const char *function_read, void (*callback_write)(void *data, struct t_config_file *config_file, const char *section_name), - char *function_write, + const char *function_write, void (*callback_write_default)(void *data, struct t_config_file *config_file, const char *section_name), - char *function_write_default, + const char *function_write_default, int (*callback_create_option)(void *data, struct t_config_file *config_file, struct t_config_section *section, @@ -1521,3 +1521,42 @@ script_api_config_unset_plugin (struct t_weechat_plugin *weechat_plugin, return return_code; } + +/* + * script_api_upgrade_read: read upgrade file + * return 1 if ok, 0 if error + */ + +int +script_api_upgrade_read (struct t_weechat_plugin *weechat_plugin, + struct t_plugin_script *script, + struct t_upgrade_file *upgrade_file, + int (*callback_read)(void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist), + const char *function_read) +{ + struct t_script_callback *script_callback; + int rc; + + if (!function_read || !function_read[0]) + return 0; + + script_callback = script_callback_alloc (); + if (!script_callback) + return 0; + + script_callback->script = script; + script_callback->function = strdup (function_read); + script_callback->upgrade_file = upgrade_file; + script_callback_add (script, script_callback); + + rc = weechat_upgrade_read (upgrade_file, + callback_read, + script_callback); + + script_callback_remove (script, script_callback); + + return rc; +} diff --git a/src/plugins/scripts/script-api.h b/src/plugins/scripts/script-api.h index 6375e4ded..37e3c6ca3 100644 --- a/src/plugins/scripts/script-api.h +++ b/src/plugins/scripts/script-api.h @@ -254,5 +254,13 @@ extern int script_api_config_set_plugin (struct t_weechat_plugin *weechat_plugin extern int script_api_config_unset_plugin (struct t_weechat_plugin *weechat_plugin, struct t_plugin_script *script, const char *option); +extern int script_api_upgrade_read (struct t_weechat_plugin *weechat_plugin, + struct t_plugin_script *script, + struct t_upgrade_file *upgrade_file, + int (*callback_read)(void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist), + const char *function_read); #endif /* script-api.h */ diff --git a/src/plugins/scripts/script-callback.c b/src/plugins/scripts/script-callback.c index 2adeacb46..6fd7134f3 100644 --- a/src/plugins/scripts/script-callback.c +++ b/src/plugins/scripts/script-callback.c @@ -47,6 +47,7 @@ script_callback_alloc () new_script_callback->hook = NULL; new_script_callback->buffer = NULL; new_script_callback->bar_item = NULL; + new_script_callback->upgrade_file = NULL; return new_script_callback; } @@ -133,6 +134,7 @@ script_callback_print_log (struct t_weechat_plugin *weechat_plugin, weechat_log_printf (" hook. . . . . . . . : 0x%lx", script_callback->hook); weechat_log_printf (" buffer. . . . . . . : 0x%lx", script_callback->buffer); weechat_log_printf (" bar_item. . . . . . : 0x%lx", script_callback->bar_item); + weechat_log_printf (" upgrade_file. . . . : 0x%lx", script_callback->upgrade_file); weechat_log_printf (" prev_callback . . . : 0x%lx", script_callback->prev_callback); weechat_log_printf (" next_callback . . . : 0x%lx", script_callback->next_callback); } diff --git a/src/plugins/scripts/script-callback.h b/src/plugins/scripts/script-callback.h index 2e7013d94..a37beec19 100644 --- a/src/plugins/scripts/script-callback.h +++ b/src/plugins/scripts/script-callback.h @@ -29,6 +29,7 @@ struct t_script_callback struct t_hook *hook; /* not NULL for hook */ struct t_gui_buffer *buffer; /* not NULL for buffer */ struct t_gui_bar_item *bar_item; /* not NULL for bar item */ + struct t_upgrade_file *upgrade_file; /* not NULL for upgrade file */ struct t_script_callback *prev_callback; /* link to next callback */ struct t_script_callback *next_callback; /* link to previous callback */ }; diff --git a/src/plugins/scripts/tcl/weechat-tcl-api.c b/src/plugins/scripts/tcl/weechat-tcl-api.c index 7ef405f74..56efc436a 100644 --- a/src/plugins/scripts/tcl/weechat-tcl-api.c +++ b/src/plugins/scripts/tcl/weechat-tcl-api.c @@ -5324,7 +5324,7 @@ weechat_tcl_api_infolist_new_var_integer (ClientData clientData, Tcl_Interp *int if (Tcl_GetIntFromObj (interp, objv[3], &value) != TCL_OK) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolits_new_var_integer"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_new_var_integer"); TCL_RETURN_EMPTY; } @@ -5433,7 +5433,7 @@ weechat_tcl_api_infolist_new_var_time (ClientData clientData, Tcl_Interp *interp if (Tcl_GetIntFromObj (interp, objv[3], &value) != TCL_OK) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolits_new_var_time"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_new_var_time"); TCL_RETURN_EMPTY; } @@ -5754,7 +5754,208 @@ weechat_tcl_api_infolist_free (ClientData clientData, Tcl_Interp *interp, TCL_RETURN_OK; } +/* + * weechat_tcl_api_upgrade_new: create an upgrade file + */ + +static int +weechat_tcl_api_upgrade_new (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj *CONST objv[]) +{ + Tcl_Obj* objp; + char *result, *filename; + int i, write; + + /* make C compiler happy */ + (void) clientData; + + if (!tcl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_new"); + TCL_RETURN_EMPTY; + } + + if (objc < 3) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + TCL_RETURN_EMPTY; + } + + if (Tcl_GetIntFromObj (interp, objv[2], &write) != TCL_OK) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_new"); + TCL_RETURN_EMPTY; + } + + filename = Tcl_GetStringFromObj (objv[1], &i); + result = script_ptr2str (weechat_upgrade_new (filename, write)); + + TCL_RETURN_STRING_FREE(result); +} + +/* + * weechat_tcl_api_upgrade_write_object: write object in upgrade file + */ + +static int +weechat_tcl_api_upgrade_write_object (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj *CONST objv[]) +{ + Tcl_Obj *objp; + char *upgrade_file, *infolist; + int rc, i, object_id; + + /* make C compiler happy */ + (void) clientData; + + if (!tcl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_write_object"); + TCL_RETURN_INT(0); + } + + if (objc < 4) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + TCL_RETURN_INT(0); + } + + if (Tcl_GetIntFromObj (interp, objv[2], &object_id) != TCL_OK) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_write_object"); + TCL_RETURN_EMPTY; + } + + upgrade_file = Tcl_GetStringFromObj (objv[1], &i); + infolist = Tcl_GetStringFromObj (objv[3], &i); + + rc = weechat_upgrade_write_object (script_str2ptr (upgrade_file), + object_id, + script_str2ptr (infolist)); + + TCL_RETURN_INT(rc); +} + +/* + * weechat_tcl_api_upgrade_read_cb: callback for reading an object in upgrade file + */ +int +weechat_tcl_api_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist) +{ + struct t_script_callback *script_callback; + char *tcl_argv[4], str_object_id[32]; + int *rc, ret; + + script_callback = (struct t_script_callback *)data; + + if (script_callback && script_callback->function && script_callback->function[0]) + { + snprintf (str_object_id, sizeof (str_object_id), "%d", object_id); + + tcl_argv[0] = script_ptr2str (upgrade_file); + tcl_argv[1] = str_object_id; + tcl_argv[2] = script_ptr2str (infolist); + tcl_argv[3] = NULL; + + rc = (int *) weechat_tcl_exec (script_callback->script, + WEECHAT_SCRIPT_EXEC_INT, + script_callback->function, + tcl_argv); + + if (!rc) + ret = WEECHAT_RC_ERROR; + else + { + ret = *rc; + free (rc); + } + if (tcl_argv[0]) + free (tcl_argv[0]); + if (tcl_argv[2]) + free (tcl_argv[2]); + + return ret; + } + + return WEECHAT_RC_ERROR; +} + +/* + * weechat_tcl_api_upgrade_read: read upgrade file + */ + +static int +weechat_tcl_api_upgrade_read (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj *CONST objv[]) +{ + Tcl_Obj* objp; + char *upgrade_file, *function_read; + int i, rc; + + /* make C compiler happy */ + (void) clientData; + + if (!tcl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_read"); + TCL_RETURN_EMPTY; + } + + if (objc < 3) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_read"); + TCL_RETURN_EMPTY; + } + + upgrade_file = Tcl_GetStringFromObj (objv[1], &i); + function_read = Tcl_GetStringFromObj (objv[2], &i); + + rc = script_api_upgrade_read (weechat_tcl_plugin, + tcl_current_script, + script_str2ptr (upgrade_file), + &weechat_tcl_api_upgrade_read_cb, + function_read); + + TCL_RETURN_INT(rc); +} + +/* + * weechat_tcl_api_upgrade_close: close upgrade file + */ + +static int +weechat_tcl_api_upgrade_close (ClientData clientData, Tcl_Interp *interp, + int objc, Tcl_Obj *CONST objv[]) +{ + Tcl_Obj *objp; + char *upgrade_file; + int i; + + /* make C compiler happy */ + (void) clientData; + + if (!tcl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("upgrade_close"); + TCL_RETURN_ERROR; + } + + if (objc < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("upgrade_close"); + TCL_RETURN_INT(0); + } + + upgrade_file = Tcl_GetStringFromObj (objv[1], &i); + + weechat_upgrade_close (script_str2ptr (upgrade_file)); + + TCL_RETURN_OK; +} /* * weechat_tcl_api_init: initialize subroutines @@ -6110,4 +6311,12 @@ void weechat_tcl_api_init (Tcl_Interp *interp) { weechat_tcl_api_infolist_time, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); Tcl_CreateObjCommand (interp,"weechat::infolist_free", weechat_tcl_api_infolist_free, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); + Tcl_CreateObjCommand (interp,"weechat::upgrade_new", + weechat_tcl_api_upgrade_new, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); + Tcl_CreateObjCommand (interp,"weechat::upgrade_write_object", + weechat_tcl_api_upgrade_write_object, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); + Tcl_CreateObjCommand (interp,"weechat::upgrade_read", + weechat_tcl_api_upgrade_read, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); + Tcl_CreateObjCommand (interp,"weechat::upgrade_close", + weechat_tcl_api_upgrade_close, (ClientData)NULL, (Tcl_CmdDeleteProc*)NULL); } diff --git a/src/plugins/weechat-plugin.h b/src/plugins/weechat-plugin.h index d5d4ac4e9..a5bc6ff72 100644 --- a/src/plugins/weechat-plugin.h +++ b/src/plugins/weechat-plugin.h @@ -588,14 +588,17 @@ struct t_weechat_plugin void (*infolist_free) (struct t_infolist *infolist); /* upgrade */ - struct t_upgrade_file *(*upgrade_create) (const char *filename, - int write); + struct t_upgrade_file *(*upgrade_new) (const char *filename, + int write); int (*upgrade_write_object) (struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist); int (*upgrade_read) (struct t_upgrade_file *upgrade_file, - int (*callback_read)(int object_id, - struct t_infolist *infolist)); + int (*callback_read)(void *data, + struct t_upgrade_file *upgrade_file, + int object_id, + struct t_infolist *infolist), + void *callback_read_data); void (*upgrade_close) (struct t_upgrade_file *upgrade_file); /* WeeChat developers: ALWAYS add new functions at the end */ @@ -1120,14 +1123,16 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin); weechat_plugin->infolist_free(__list) /* upgrade */ -#define weechat_upgrade_create(__filename, __write) \ - weechat_plugin->upgrade_create(__filename, __write) +#define weechat_upgrade_new(__filename, __write) \ + weechat_plugin->upgrade_new(__filename, __write) #define weechat_upgrade_write_object(__upgrade_file, __object_id, \ __infolist) \ weechat_plugin->upgrade_write_object(__upgrade_file, __object_id, \ __infolist) -#define weechat_upgrade_read(__upgrade_file, __callback) \ - weechat_plugin->upgrade_read(__upgrade_file, __callback) +#define weechat_upgrade_read(__upgrade_file, __callback_read, \ + __callback_read_data) \ + weechat_plugin->upgrade_read(__upgrade_file, __callback_read, \ + __callback_read_data) #define weechat_upgrade_close(__upgrade_file) \ weechat_plugin->upgrade_close(__upgrade_file) diff --git a/src/plugins/xfer/xfer-upgrade.c b/src/plugins/xfer/xfer-upgrade.c index 36e4cb145..1e156baa9 100644 --- a/src/plugins/xfer/xfer-upgrade.c +++ b/src/plugins/xfer/xfer-upgrade.c @@ -51,7 +51,7 @@ xfer_upgrade_save () int rc; struct t_upgrade_file *upgrade_file; - upgrade_file = weechat_upgrade_create (XFER_UPGRADE_FILENAME, 1); + upgrade_file = weechat_upgrade_new (XFER_UPGRADE_FILENAME, 1); if (!upgrade_file) return 0; @@ -93,12 +93,17 @@ xfer_upgrade_set_buffer_callbacks () */ int -xfer_upgrade_read_cb (int object_id, +xfer_upgrade_read_cb (void *data, + struct t_upgrade_file *upgrade_file, + int object_id, struct t_infolist *infolist) { /* TODO: write xfer read cb */ + (void) data; + (void) upgrade_file; (void) object_id; (void) infolist; + return WEECHAT_RC_OK; } @@ -115,8 +120,8 @@ xfer_upgrade_load () xfer_upgrade_set_buffer_callbacks (); - upgrade_file = weechat_upgrade_create (XFER_UPGRADE_FILENAME, 0); - rc = weechat_upgrade_read (upgrade_file, &xfer_upgrade_read_cb); + upgrade_file = weechat_upgrade_new (XFER_UPGRADE_FILENAME, 0); + rc = weechat_upgrade_read (upgrade_file, &xfer_upgrade_read_cb, NULL); return rc; } |