diff options
author | Emmanuel Bouthenot <kolter@openics.org> | 2007-02-28 15:07:24 +0000 |
---|---|---|
committer | Emmanuel Bouthenot <kolter@openics.org> | 2007-02-28 15:07:24 +0000 |
commit | 2ca6c6a3f14ce256c9a8ffa16a158c96c6ed666f (patch) | |
tree | 8bee8c49dcb804a9edb1229759e9486c9f43b802 | |
parent | bug fix and code cleanup in plugins/scripts (diff) | |
download | weechat-2ca6c6a3f14ce256c9a8ffa16a158c96c6ed666f.tar.xz weechat-2ca6c6a3f14ce256c9a8ffa16a158c96c6ed666f.zip |
fix some memory leaks in python plugin/script
-rw-r--r-- | src/plugins/scripts/python/weechat-python.c | 555 | ||||
-rw-r--r-- | weechat/src/plugins/scripts/python/weechat-python.c | 555 |
2 files changed, 814 insertions, 296 deletions
diff --git a/src/plugins/scripts/python/weechat-python.c b/src/plugins/scripts/python/weechat-python.c index 96806e18c..3506580e8 100644 --- a/src/plugins/scripts/python/weechat-python.c +++ b/src/plugins/scripts/python/weechat-python.c @@ -1104,7 +1104,7 @@ static PyObject * weechat_python_get_dcc_info (PyObject *self, PyObject *args) { t_plugin_dcc_info *dcc_info, *ptr_dcc; - PyObject *dcc_list, *dcc_list_member; + PyObject *dcc_list, *dcc_list_member, *key, *value; char timebuffer1[64]; char timebuffer2[64]; struct in_addr in; @@ -1145,39 +1145,101 @@ weechat_python_get_dcc_info (PyObject *self, PyObject *args) if (dcc_list_member) { + key = Py_BuildValue("s", "server"); + value = Py_BuildValue("s", ptr_dcc->server); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "server"), - Py_BuildValue("s", ptr_dcc->server)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "channel"), - Py_BuildValue("s", ptr_dcc->channel)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_dcc->type)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "status"), - Py_BuildValue("i", ptr_dcc->status)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_time"), - Py_BuildValue("s", timebuffer1)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_transfer"), - Py_BuildValue("s", timebuffer2)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "address"), - Py_BuildValue("s", inet_ntoa(in))); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "port"), - Py_BuildValue("i", ptr_dcc->port)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_dcc->nick)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "remote_file"), - Py_BuildValue("s", ptr_dcc->filename)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "local_file"), - Py_BuildValue("s", ptr_dcc->local_filename)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "filename_suffix"), - Py_BuildValue("i", ptr_dcc->filename_suffix)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "size"), - Py_BuildValue("k", ptr_dcc->size)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "pos"), - Py_BuildValue("k", ptr_dcc->pos)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_resume"), - Py_BuildValue("k", ptr_dcc->start_resume)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "cps"), - Py_BuildValue("k", ptr_dcc->bytes_per_sec)); + key = Py_BuildValue("s", "channel"); + value = Py_BuildValue("s", ptr_dcc->channel); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_dcc->type); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "status"); + value = Py_BuildValue("i", ptr_dcc->status); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_time"); + value = Py_BuildValue("s", timebuffer1); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_transfer"); + value = Py_BuildValue("s", timebuffer2); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "address"); + value = Py_BuildValue("s", inet_ntoa(in)); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "port"); + value = Py_BuildValue("i", ptr_dcc->port); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_dcc->nick); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "remote_file"); + value = Py_BuildValue("s", ptr_dcc->filename); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "local_file"); + value = Py_BuildValue("s", ptr_dcc->local_filename); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "filename_suffix"); + value = Py_BuildValue("i", ptr_dcc->filename_suffix); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "size"); + value = Py_BuildValue("k", ptr_dcc->size); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "pos"); + value = Py_BuildValue("k", ptr_dcc->pos); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_resume"); + value = Py_BuildValue("k", ptr_dcc->start_resume); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "cps"); + value = Py_BuildValue("k", ptr_dcc->bytes_per_sec); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); PyList_Append(dcc_list, dcc_list_member); Py_DECREF (dcc_list_member); @@ -1377,7 +1439,7 @@ static PyObject * weechat_python_get_server_info (PyObject *self, PyObject *args) { t_plugin_server_info *server_info, *ptr_server; - PyObject *server_hash, *server_hash_member; + PyObject *server_hash, *server_hash_member, *key, *value; char timebuffer[64]; /* make C compiler happy */ @@ -1413,62 +1475,163 @@ weechat_python_get_server_info (PyObject *self, PyObject *args) if (server_hash_member) { - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoconnect"), - Py_BuildValue("i", ptr_server->autoconnect)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoreconnect"), - Py_BuildValue("i", ptr_server->autoreconnect)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoreconnect_delay"), - Py_BuildValue("i", ptr_server->autoreconnect_delay)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command_line"), - Py_BuildValue("i", ptr_server->command_line)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "address"), - Py_BuildValue("s", ptr_server->address)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "port"), - Py_BuildValue("i", ptr_server->port)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ipv6"), - Py_BuildValue("i", ptr_server->ipv6)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ssl"), - Py_BuildValue("i", ptr_server->ssl)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "password"), - Py_BuildValue("s", ptr_server->password)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick1"), - Py_BuildValue("s", ptr_server->nick1)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick2"), - Py_BuildValue("s", ptr_server->nick2)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick3"), - Py_BuildValue("s", ptr_server->nick3)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "username"), - Py_BuildValue("s", ptr_server->username)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "realname"), - Py_BuildValue("s", ptr_server->realname)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command"), - Py_BuildValue("s", ptr_server->command)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command_delay"), - Py_BuildValue("i", ptr_server->command_delay)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autojoin"), - Py_BuildValue("s", ptr_server->autojoin)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autorejoin"), - Py_BuildValue("i", ptr_server->autorejoin)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "notify_levels"), - Py_BuildValue("s", ptr_server->notify_levels)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "is_connected"), - Py_BuildValue("i", ptr_server->is_connected)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ssl_connected"), - Py_BuildValue("i", ptr_server->ssl_connected)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_server->nick)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick_modes"), - Py_BuildValue("s", ptr_server->nick_modes)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "away_time"), - Py_BuildValue("s", timebuffer)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "lag"), - Py_BuildValue("i", ptr_server->lag)); + key = Py_BuildValue("s", "autoconnect"); + value = Py_BuildValue("i", ptr_server->autoconnect); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autoreconnect"); + value = Py_BuildValue("i", ptr_server->autoreconnect); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autoreconnect_delay"); + value = Py_BuildValue("i", ptr_server->autoreconnect_delay); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command_line"); + value = Py_BuildValue("i", ptr_server->command_line); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "address"); + value = Py_BuildValue("s", ptr_server->address); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "port"); + value = Py_BuildValue("i", ptr_server->port); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ipv6"); + value = Py_BuildValue("i", ptr_server->ipv6); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ssl"); + value = Py_BuildValue("i", ptr_server->ssl); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "password"); + value = Py_BuildValue("s", ptr_server->password); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick1"); + value = Py_BuildValue("s", ptr_server->nick1); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick2"); + value = Py_BuildValue("s", ptr_server->nick2); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick3"); + value = Py_BuildValue("s", ptr_server->nick3); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "username"); + value = Py_BuildValue("s", ptr_server->username); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "realname"); + value = Py_BuildValue("s", ptr_server->realname); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command"); + value = Py_BuildValue("s", ptr_server->command); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command_delay"); + value = Py_BuildValue("i", ptr_server->command_delay); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autojoin"); + Py_BuildValue("s", ptr_server->autojoin); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autorejoin"); + value = Py_BuildValue("i", ptr_server->autorejoin); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "notify_levels"); + value = Py_BuildValue("s", ptr_server->notify_levels); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "is_connected"); + value = Py_BuildValue("i", ptr_server->is_connected); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ssl_connected"); + value = Py_BuildValue("i", ptr_server->ssl_connected); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_server->nick); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick_modes"); + value = Py_BuildValue("s", ptr_server->nick_modes); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "away_time"); + value = Py_BuildValue("s", timebuffer); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "lag"); + value = Py_BuildValue("i", ptr_server->lag); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(server_hash, Py_BuildValue("s", ptr_server->name), server_hash_member); + key = Py_BuildValue("s", ptr_server->name); + PyDict_SetItem(server_hash, key, server_hash_member); + Py_DECREF (key); Py_DECREF (server_hash_member); } } - + python_plugin->free_server_info(python_plugin, server_info); return server_hash; @@ -1482,7 +1645,7 @@ static PyObject * weechat_python_get_channel_info (PyObject *self, PyObject *args) { t_plugin_channel_info *channel_info, *ptr_channel; - PyObject *channel_hash, *channel_hash_member; + PyObject *channel_hash, *channel_hash_member, *key, *value; char *server; /* make C compiler happy */ @@ -1523,24 +1686,49 @@ weechat_python_get_channel_info (PyObject *self, PyObject *args) channel_hash_member = PyDict_New(); if (channel_hash_member) - { - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_channel->type)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "topic"), - Py_BuildValue("s", ptr_channel->topic)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "modes"), - Py_BuildValue("s", ptr_channel->modes)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "limit"), - Py_BuildValue("i", ptr_channel->limit)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "key"), - Py_BuildValue("s", ptr_channel->key)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "nicks_count"), - Py_BuildValue("i", ptr_channel->nicks_count)); + { + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_channel->type); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "topic"); + value = Py_BuildValue("s", ptr_channel->topic); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "modes"); + value = Py_BuildValue("s", ptr_channel->modes); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "limit"); + value = Py_BuildValue("i", ptr_channel->limit); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "key"); + value = Py_BuildValue("s", ptr_channel->key); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nicks_count"); + value = Py_BuildValue("i", ptr_channel->nicks_count); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(channel_hash, Py_BuildValue("s", ptr_channel->name), channel_hash_member); + key = Py_BuildValue("s", ptr_channel->name); + PyDict_SetItem(channel_hash, key, channel_hash_member); + Py_DECREF (key); Py_DECREF (channel_hash_member); } - } + } python_plugin->free_channel_info(python_plugin, channel_info); @@ -1555,7 +1743,7 @@ static PyObject * weechat_python_get_nick_info (PyObject *self, PyObject *args) { t_plugin_nick_info *nick_info, *ptr_nick; - PyObject *nick_hash, *nick_hash_member; + PyObject *nick_hash, *nick_hash_member, *key, *value; char *server, *channel; /* make C compiler happy */ @@ -1598,12 +1786,21 @@ weechat_python_get_nick_info (PyObject *self, PyObject *args) if (nick_hash_member) { - PyDict_SetItem(nick_hash_member, Py_BuildValue("s", "flags"), - Py_BuildValue("i", ptr_nick->flags)); - PyDict_SetItem(nick_hash_member, Py_BuildValue("s", "host"), - Py_BuildValue("s", ptr_nick->host ? ptr_nick->host : "")); + key = Py_BuildValue("s", "flags"); + value = Py_BuildValue("i", ptr_nick->flags); + PyDict_SetItem(nick_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "host"); + value = Py_BuildValue("s", ptr_nick->host ? ptr_nick->host : ""); + PyDict_SetItem(nick_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(nick_hash, Py_BuildValue("s", ptr_nick->nick), nick_hash_member); + key = Py_BuildValue("s", ptr_nick->nick); + PyDict_SetItem(nick_hash, key, nick_hash_member); + Py_DECREF (key); Py_DECREF (nick_hash_member); } } @@ -1658,7 +1855,7 @@ static PyObject * weechat_python_get_window_info (PyObject *self, PyObject *args) { t_plugin_window_info *window_info, *ptr_window; - PyObject *window_list, *window_list_member; + PyObject *window_list, *window_list_member, *key, *value; /* make C compiler happy */ (void) self; @@ -1689,20 +1886,47 @@ weechat_python_get_window_info (PyObject *self, PyObject *args) if (window_list_member) { - PyDict_SetItem(window_list_member, Py_BuildValue("s", "num_buffer"), - Py_BuildValue("i", ptr_window->num_buffer)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_x"), - Py_BuildValue("i", ptr_window->win_x)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_y"), - Py_BuildValue("i", ptr_window->win_y)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_width"), - Py_BuildValue("i", ptr_window->win_width)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_height"), - Py_BuildValue("i", ptr_window->win_height)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_width_pct"), - Py_BuildValue("i", ptr_window->win_width_pct)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_height_pct"), - Py_BuildValue("i", ptr_window->win_height_pct)); + key = Py_BuildValue("s", "num_buffer"); + value = Py_BuildValue("i", ptr_window->num_buffer); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_x"); + value = Py_BuildValue("i", ptr_window->win_x); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_y"); + value = Py_BuildValue("i", ptr_window->win_y); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_width"); + value = Py_BuildValue("i", ptr_window->win_width); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_height"); + value = Py_BuildValue("i", ptr_window->win_height); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_width_pct"); + value = Py_BuildValue("i", ptr_window->win_width_pct); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_height_pct"); + value = Py_BuildValue("i", ptr_window->win_height_pct); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); PyList_Append(window_list, window_list_member); Py_DECREF (window_list_member); @@ -1722,7 +1946,7 @@ static PyObject * weechat_python_get_buffer_info (PyObject *self, PyObject *args) { t_plugin_buffer_info *buffer_info, *ptr_buffer; - PyObject *buffer_hash, *buffer_hash_member; + PyObject *buffer_hash, *buffer_hash_member, *key, *value; /* make C compiler happy */ (void) self; @@ -1747,32 +1971,56 @@ weechat_python_get_buffer_info (PyObject *self, PyObject *args) buffer_info = python_plugin->get_buffer_info (python_plugin); if (!buffer_info) return buffer_hash; - + for(ptr_buffer = buffer_info; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { buffer_hash_member = PyDict_New(); if (buffer_hash_member) { - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_buffer->type)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "num_displayed"), - Py_BuildValue("i", ptr_buffer->num_displayed)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "server"), - Py_BuildValue("s", ptr_buffer->server_name == NULL ? "" : ptr_buffer->server_name)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "channel"), - Py_BuildValue("s", ptr_buffer->channel_name == NULL ? "" : ptr_buffer->channel_name)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "notify_level"), - Py_BuildValue("i", ptr_buffer->notify_level)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "log_filename"), - Py_BuildValue("s", ptr_buffer->log_filename == NULL ? "" : ptr_buffer->log_filename)); + + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_buffer->type); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "num_displayed"); + value = Py_BuildValue("i", ptr_buffer->num_displayed); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "server"); + value = Py_BuildValue("s", ptr_buffer->server_name == NULL ? "" : ptr_buffer->server_name); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "channel"); + value = Py_BuildValue("s", ptr_buffer->channel_name == NULL ? "" : ptr_buffer->channel_name); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(buffer_hash, - Py_BuildValue("i", ptr_buffer->number), buffer_hash_member); + key = Py_BuildValue("s", "notify_level"); + value = Py_BuildValue("i", ptr_buffer->notify_level); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "log_filename"); + value = Py_BuildValue("s", ptr_buffer->log_filename == NULL ? "" : ptr_buffer->log_filename); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("i", ptr_buffer->number); + PyDict_SetItem(buffer_hash, key, buffer_hash_member); + Py_DECREF (key); Py_DECREF (buffer_hash_member); } } - python_plugin->free_buffer_info(python_plugin, buffer_info); return buffer_hash; @@ -1786,7 +2034,7 @@ static PyObject * weechat_python_get_buffer_data (PyObject *self, PyObject *args) { t_plugin_buffer_line *buffer_data, *ptr_data; - PyObject *data_list, *data_list_member; + PyObject *data_list, *data_list_member, *key, *value; char *server, *channel; char timebuffer[64]; @@ -1831,14 +2079,25 @@ weechat_python_get_buffer_data (PyObject *self, PyObject *args) { strftime(timebuffer, sizeof(timebuffer), "%F %T", localtime(&ptr_data->date)); - - PyDict_SetItem(data_list_member, Py_BuildValue("s", "date"), - Py_BuildValue("s", timebuffer)); - PyDict_SetItem(data_list_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_data->nick == NULL ? "" : ptr_data->nick)); - PyDict_SetItem(data_list_member, Py_BuildValue("s", "data"), - Py_BuildValue("s", ptr_data->data == NULL ? "" : ptr_data->data)); + key = Py_BuildValue("s", "date"); + value = Py_BuildValue("s", timebuffer); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_data->nick == NULL ? "" : ptr_data->nick); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "data"); + value = Py_BuildValue("s", ptr_data->data == NULL ? "" : ptr_data->data); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + PyList_Append(data_list, data_list_member); Py_DECREF (data_list_member); } diff --git a/weechat/src/plugins/scripts/python/weechat-python.c b/weechat/src/plugins/scripts/python/weechat-python.c index 96806e18c..3506580e8 100644 --- a/weechat/src/plugins/scripts/python/weechat-python.c +++ b/weechat/src/plugins/scripts/python/weechat-python.c @@ -1104,7 +1104,7 @@ static PyObject * weechat_python_get_dcc_info (PyObject *self, PyObject *args) { t_plugin_dcc_info *dcc_info, *ptr_dcc; - PyObject *dcc_list, *dcc_list_member; + PyObject *dcc_list, *dcc_list_member, *key, *value; char timebuffer1[64]; char timebuffer2[64]; struct in_addr in; @@ -1145,39 +1145,101 @@ weechat_python_get_dcc_info (PyObject *self, PyObject *args) if (dcc_list_member) { + key = Py_BuildValue("s", "server"); + value = Py_BuildValue("s", ptr_dcc->server); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "server"), - Py_BuildValue("s", ptr_dcc->server)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "channel"), - Py_BuildValue("s", ptr_dcc->channel)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_dcc->type)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "status"), - Py_BuildValue("i", ptr_dcc->status)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_time"), - Py_BuildValue("s", timebuffer1)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_transfer"), - Py_BuildValue("s", timebuffer2)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "address"), - Py_BuildValue("s", inet_ntoa(in))); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "port"), - Py_BuildValue("i", ptr_dcc->port)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_dcc->nick)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "remote_file"), - Py_BuildValue("s", ptr_dcc->filename)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "local_file"), - Py_BuildValue("s", ptr_dcc->local_filename)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "filename_suffix"), - Py_BuildValue("i", ptr_dcc->filename_suffix)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "size"), - Py_BuildValue("k", ptr_dcc->size)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "pos"), - Py_BuildValue("k", ptr_dcc->pos)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "start_resume"), - Py_BuildValue("k", ptr_dcc->start_resume)); - PyDict_SetItem(dcc_list_member, Py_BuildValue("s", "cps"), - Py_BuildValue("k", ptr_dcc->bytes_per_sec)); + key = Py_BuildValue("s", "channel"); + value = Py_BuildValue("s", ptr_dcc->channel); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_dcc->type); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "status"); + value = Py_BuildValue("i", ptr_dcc->status); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_time"); + value = Py_BuildValue("s", timebuffer1); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_transfer"); + value = Py_BuildValue("s", timebuffer2); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "address"); + value = Py_BuildValue("s", inet_ntoa(in)); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "port"); + value = Py_BuildValue("i", ptr_dcc->port); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_dcc->nick); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "remote_file"); + value = Py_BuildValue("s", ptr_dcc->filename); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "local_file"); + value = Py_BuildValue("s", ptr_dcc->local_filename); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "filename_suffix"); + value = Py_BuildValue("i", ptr_dcc->filename_suffix); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "size"); + value = Py_BuildValue("k", ptr_dcc->size); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "pos"); + value = Py_BuildValue("k", ptr_dcc->pos); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "start_resume"); + value = Py_BuildValue("k", ptr_dcc->start_resume); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "cps"); + value = Py_BuildValue("k", ptr_dcc->bytes_per_sec); + PyDict_SetItem(dcc_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); PyList_Append(dcc_list, dcc_list_member); Py_DECREF (dcc_list_member); @@ -1377,7 +1439,7 @@ static PyObject * weechat_python_get_server_info (PyObject *self, PyObject *args) { t_plugin_server_info *server_info, *ptr_server; - PyObject *server_hash, *server_hash_member; + PyObject *server_hash, *server_hash_member, *key, *value; char timebuffer[64]; /* make C compiler happy */ @@ -1413,62 +1475,163 @@ weechat_python_get_server_info (PyObject *self, PyObject *args) if (server_hash_member) { - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoconnect"), - Py_BuildValue("i", ptr_server->autoconnect)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoreconnect"), - Py_BuildValue("i", ptr_server->autoreconnect)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autoreconnect_delay"), - Py_BuildValue("i", ptr_server->autoreconnect_delay)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command_line"), - Py_BuildValue("i", ptr_server->command_line)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "address"), - Py_BuildValue("s", ptr_server->address)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "port"), - Py_BuildValue("i", ptr_server->port)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ipv6"), - Py_BuildValue("i", ptr_server->ipv6)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ssl"), - Py_BuildValue("i", ptr_server->ssl)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "password"), - Py_BuildValue("s", ptr_server->password)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick1"), - Py_BuildValue("s", ptr_server->nick1)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick2"), - Py_BuildValue("s", ptr_server->nick2)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick3"), - Py_BuildValue("s", ptr_server->nick3)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "username"), - Py_BuildValue("s", ptr_server->username)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "realname"), - Py_BuildValue("s", ptr_server->realname)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command"), - Py_BuildValue("s", ptr_server->command)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "command_delay"), - Py_BuildValue("i", ptr_server->command_delay)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autojoin"), - Py_BuildValue("s", ptr_server->autojoin)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "autorejoin"), - Py_BuildValue("i", ptr_server->autorejoin)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "notify_levels"), - Py_BuildValue("s", ptr_server->notify_levels)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "is_connected"), - Py_BuildValue("i", ptr_server->is_connected)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "ssl_connected"), - Py_BuildValue("i", ptr_server->ssl_connected)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_server->nick)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "nick_modes"), - Py_BuildValue("s", ptr_server->nick_modes)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "away_time"), - Py_BuildValue("s", timebuffer)); - PyDict_SetItem(server_hash_member, Py_BuildValue("s", "lag"), - Py_BuildValue("i", ptr_server->lag)); + key = Py_BuildValue("s", "autoconnect"); + value = Py_BuildValue("i", ptr_server->autoconnect); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autoreconnect"); + value = Py_BuildValue("i", ptr_server->autoreconnect); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autoreconnect_delay"); + value = Py_BuildValue("i", ptr_server->autoreconnect_delay); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command_line"); + value = Py_BuildValue("i", ptr_server->command_line); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "address"); + value = Py_BuildValue("s", ptr_server->address); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "port"); + value = Py_BuildValue("i", ptr_server->port); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ipv6"); + value = Py_BuildValue("i", ptr_server->ipv6); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ssl"); + value = Py_BuildValue("i", ptr_server->ssl); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "password"); + value = Py_BuildValue("s", ptr_server->password); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick1"); + value = Py_BuildValue("s", ptr_server->nick1); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick2"); + value = Py_BuildValue("s", ptr_server->nick2); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick3"); + value = Py_BuildValue("s", ptr_server->nick3); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "username"); + value = Py_BuildValue("s", ptr_server->username); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "realname"); + value = Py_BuildValue("s", ptr_server->realname); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command"); + value = Py_BuildValue("s", ptr_server->command); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "command_delay"); + value = Py_BuildValue("i", ptr_server->command_delay); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autojoin"); + Py_BuildValue("s", ptr_server->autojoin); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "autorejoin"); + value = Py_BuildValue("i", ptr_server->autorejoin); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "notify_levels"); + value = Py_BuildValue("s", ptr_server->notify_levels); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "is_connected"); + value = Py_BuildValue("i", ptr_server->is_connected); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "ssl_connected"); + value = Py_BuildValue("i", ptr_server->ssl_connected); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_server->nick); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick_modes"); + value = Py_BuildValue("s", ptr_server->nick_modes); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "away_time"); + value = Py_BuildValue("s", timebuffer); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "lag"); + value = Py_BuildValue("i", ptr_server->lag); + PyDict_SetItem(server_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(server_hash, Py_BuildValue("s", ptr_server->name), server_hash_member); + key = Py_BuildValue("s", ptr_server->name); + PyDict_SetItem(server_hash, key, server_hash_member); + Py_DECREF (key); Py_DECREF (server_hash_member); } } - + python_plugin->free_server_info(python_plugin, server_info); return server_hash; @@ -1482,7 +1645,7 @@ static PyObject * weechat_python_get_channel_info (PyObject *self, PyObject *args) { t_plugin_channel_info *channel_info, *ptr_channel; - PyObject *channel_hash, *channel_hash_member; + PyObject *channel_hash, *channel_hash_member, *key, *value; char *server; /* make C compiler happy */ @@ -1523,24 +1686,49 @@ weechat_python_get_channel_info (PyObject *self, PyObject *args) channel_hash_member = PyDict_New(); if (channel_hash_member) - { - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_channel->type)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "topic"), - Py_BuildValue("s", ptr_channel->topic)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "modes"), - Py_BuildValue("s", ptr_channel->modes)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "limit"), - Py_BuildValue("i", ptr_channel->limit)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "key"), - Py_BuildValue("s", ptr_channel->key)); - PyDict_SetItem(channel_hash_member, Py_BuildValue("s", "nicks_count"), - Py_BuildValue("i", ptr_channel->nicks_count)); + { + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_channel->type); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "topic"); + value = Py_BuildValue("s", ptr_channel->topic); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "modes"); + value = Py_BuildValue("s", ptr_channel->modes); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "limit"); + value = Py_BuildValue("i", ptr_channel->limit); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "key"); + value = Py_BuildValue("s", ptr_channel->key); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nicks_count"); + value = Py_BuildValue("i", ptr_channel->nicks_count); + PyDict_SetItem(channel_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(channel_hash, Py_BuildValue("s", ptr_channel->name), channel_hash_member); + key = Py_BuildValue("s", ptr_channel->name); + PyDict_SetItem(channel_hash, key, channel_hash_member); + Py_DECREF (key); Py_DECREF (channel_hash_member); } - } + } python_plugin->free_channel_info(python_plugin, channel_info); @@ -1555,7 +1743,7 @@ static PyObject * weechat_python_get_nick_info (PyObject *self, PyObject *args) { t_plugin_nick_info *nick_info, *ptr_nick; - PyObject *nick_hash, *nick_hash_member; + PyObject *nick_hash, *nick_hash_member, *key, *value; char *server, *channel; /* make C compiler happy */ @@ -1598,12 +1786,21 @@ weechat_python_get_nick_info (PyObject *self, PyObject *args) if (nick_hash_member) { - PyDict_SetItem(nick_hash_member, Py_BuildValue("s", "flags"), - Py_BuildValue("i", ptr_nick->flags)); - PyDict_SetItem(nick_hash_member, Py_BuildValue("s", "host"), - Py_BuildValue("s", ptr_nick->host ? ptr_nick->host : "")); + key = Py_BuildValue("s", "flags"); + value = Py_BuildValue("i", ptr_nick->flags); + PyDict_SetItem(nick_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "host"); + value = Py_BuildValue("s", ptr_nick->host ? ptr_nick->host : ""); + PyDict_SetItem(nick_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(nick_hash, Py_BuildValue("s", ptr_nick->nick), nick_hash_member); + key = Py_BuildValue("s", ptr_nick->nick); + PyDict_SetItem(nick_hash, key, nick_hash_member); + Py_DECREF (key); Py_DECREF (nick_hash_member); } } @@ -1658,7 +1855,7 @@ static PyObject * weechat_python_get_window_info (PyObject *self, PyObject *args) { t_plugin_window_info *window_info, *ptr_window; - PyObject *window_list, *window_list_member; + PyObject *window_list, *window_list_member, *key, *value; /* make C compiler happy */ (void) self; @@ -1689,20 +1886,47 @@ weechat_python_get_window_info (PyObject *self, PyObject *args) if (window_list_member) { - PyDict_SetItem(window_list_member, Py_BuildValue("s", "num_buffer"), - Py_BuildValue("i", ptr_window->num_buffer)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_x"), - Py_BuildValue("i", ptr_window->win_x)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_y"), - Py_BuildValue("i", ptr_window->win_y)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_width"), - Py_BuildValue("i", ptr_window->win_width)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_height"), - Py_BuildValue("i", ptr_window->win_height)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_width_pct"), - Py_BuildValue("i", ptr_window->win_width_pct)); - PyDict_SetItem(window_list_member, Py_BuildValue("s", "win_height_pct"), - Py_BuildValue("i", ptr_window->win_height_pct)); + key = Py_BuildValue("s", "num_buffer"); + value = Py_BuildValue("i", ptr_window->num_buffer); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_x"); + value = Py_BuildValue("i", ptr_window->win_x); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_y"); + value = Py_BuildValue("i", ptr_window->win_y); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_width"); + value = Py_BuildValue("i", ptr_window->win_width); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_height"); + value = Py_BuildValue("i", ptr_window->win_height); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_width_pct"); + value = Py_BuildValue("i", ptr_window->win_width_pct); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "win_height_pct"); + value = Py_BuildValue("i", ptr_window->win_height_pct); + PyDict_SetItem(window_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); PyList_Append(window_list, window_list_member); Py_DECREF (window_list_member); @@ -1722,7 +1946,7 @@ static PyObject * weechat_python_get_buffer_info (PyObject *self, PyObject *args) { t_plugin_buffer_info *buffer_info, *ptr_buffer; - PyObject *buffer_hash, *buffer_hash_member; + PyObject *buffer_hash, *buffer_hash_member, *key, *value; /* make C compiler happy */ (void) self; @@ -1747,32 +1971,56 @@ weechat_python_get_buffer_info (PyObject *self, PyObject *args) buffer_info = python_plugin->get_buffer_info (python_plugin); if (!buffer_info) return buffer_hash; - + for(ptr_buffer = buffer_info; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer) { buffer_hash_member = PyDict_New(); if (buffer_hash_member) { - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "type"), - Py_BuildValue("i", ptr_buffer->type)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "num_displayed"), - Py_BuildValue("i", ptr_buffer->num_displayed)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "server"), - Py_BuildValue("s", ptr_buffer->server_name == NULL ? "" : ptr_buffer->server_name)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "channel"), - Py_BuildValue("s", ptr_buffer->channel_name == NULL ? "" : ptr_buffer->channel_name)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "notify_level"), - Py_BuildValue("i", ptr_buffer->notify_level)); - PyDict_SetItem(buffer_hash_member, Py_BuildValue("s", "log_filename"), - Py_BuildValue("s", ptr_buffer->log_filename == NULL ? "" : ptr_buffer->log_filename)); + + key = Py_BuildValue("s", "type"); + value = Py_BuildValue("i", ptr_buffer->type); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "num_displayed"); + value = Py_BuildValue("i", ptr_buffer->num_displayed); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "server"); + value = Py_BuildValue("s", ptr_buffer->server_name == NULL ? "" : ptr_buffer->server_name); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "channel"); + value = Py_BuildValue("s", ptr_buffer->channel_name == NULL ? "" : ptr_buffer->channel_name); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); - PyDict_SetItem(buffer_hash, - Py_BuildValue("i", ptr_buffer->number), buffer_hash_member); + key = Py_BuildValue("s", "notify_level"); + value = Py_BuildValue("i", ptr_buffer->notify_level); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "log_filename"); + value = Py_BuildValue("s", ptr_buffer->log_filename == NULL ? "" : ptr_buffer->log_filename); + PyDict_SetItem(buffer_hash_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("i", ptr_buffer->number); + PyDict_SetItem(buffer_hash, key, buffer_hash_member); + Py_DECREF (key); Py_DECREF (buffer_hash_member); } } - python_plugin->free_buffer_info(python_plugin, buffer_info); return buffer_hash; @@ -1786,7 +2034,7 @@ static PyObject * weechat_python_get_buffer_data (PyObject *self, PyObject *args) { t_plugin_buffer_line *buffer_data, *ptr_data; - PyObject *data_list, *data_list_member; + PyObject *data_list, *data_list_member, *key, *value; char *server, *channel; char timebuffer[64]; @@ -1831,14 +2079,25 @@ weechat_python_get_buffer_data (PyObject *self, PyObject *args) { strftime(timebuffer, sizeof(timebuffer), "%F %T", localtime(&ptr_data->date)); - - PyDict_SetItem(data_list_member, Py_BuildValue("s", "date"), - Py_BuildValue("s", timebuffer)); - PyDict_SetItem(data_list_member, Py_BuildValue("s", "nick"), - Py_BuildValue("s", ptr_data->nick == NULL ? "" : ptr_data->nick)); - PyDict_SetItem(data_list_member, Py_BuildValue("s", "data"), - Py_BuildValue("s", ptr_data->data == NULL ? "" : ptr_data->data)); + key = Py_BuildValue("s", "date"); + value = Py_BuildValue("s", timebuffer); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "nick"); + value = Py_BuildValue("s", ptr_data->nick == NULL ? "" : ptr_data->nick); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + + key = Py_BuildValue("s", "data"); + value = Py_BuildValue("s", ptr_data->data == NULL ? "" : ptr_data->data); + PyDict_SetItem(data_list_member, key, value); + Py_DECREF (key); + Py_DECREF (value); + PyList_Append(data_list, data_list_member); Py_DECREF (data_list_member); } |