1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-12 14:14:48 +02:00

Fix /upgrade when there is one buffer for all IRC servers

This commit is contained in:
Sebastien Helleu
2008-09-24 19:39:17 +02:00
parent 0fd3f8b6eb
commit ace2d20e33
5 changed files with 95 additions and 9 deletions
+30 -2
View File
@@ -23,6 +23,7 @@
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include "weechat.h"
@@ -278,12 +279,13 @@ int
upgrade_weechat_read_cb (int object_id,
struct t_infolist *infolist)
{
char *type, *name, *prefix, *group_name;
char *type, *name, *prefix, *group_name, option_name[32], *key;
char *option_key;
struct t_gui_nick_group *ptr_group;
struct t_gui_buffer *ptr_buffer;
struct timeval creation_time;
void *buf;
int size;
int size, key_index, length;
infolist_reset_item_cursor (infolist);
while (infolist_next (infolist))
@@ -321,6 +323,32 @@ upgrade_weechat_read_cb (int object_id,
infolist_integer (infolist, "nicklist_case_sensitive");
upgrade_current_buffer->nicklist_display_groups =
infolist_integer (infolist, "nicklist_display_groups");
gui_buffer_set_highlight_words (upgrade_current_buffer,
infolist_string (infolist, "highlight_words"));
gui_buffer_set_highlight_tags (upgrade_current_buffer,
infolist_string (infolist, "highlight_tags"));
key_index = 0;
while (1)
{
snprintf (option_name, sizeof (option_name),
"key_%05d", key_index);
key = infolist_string (infolist, option_name);
if (!key)
break;
length = 16 + strlen (key) + 1;
option_key = malloc (length);
if (option_key)
{
snprintf (option_key, length, "key_bind_%s", key);
snprintf (option_name, sizeof (option_name),
"key_command_%05d", key_index);
gui_buffer_set (upgrade_current_buffer,
option_key,
infolist_string (infolist, option_name));
free (option_key);
}
key_index++;
}
}
}
else
+28 -4
View File
@@ -171,6 +171,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
/* highlight */
new_buffer->highlight_words = NULL;
new_buffer->highlight_tags = NULL;
new_buffer->highlight_tags_count = 0;
new_buffer->highlight_tags_array = NULL;
@@ -481,17 +482,24 @@ void
gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer,
const char *new_highlight_tags)
{
if (buffer->highlight_tags)
free (buffer->highlight_tags);
if (buffer->highlight_tags_array)
string_free_exploded (buffer->highlight_tags_array);
if (new_highlight_tags)
{
buffer->highlight_tags_array = string_explode (new_highlight_tags,
",", 0, 0,
&buffer->highlight_tags_count);
buffer->highlight_tags = strdup (new_highlight_tags);
if (buffer->highlight_tags)
{
buffer->highlight_tags_array = string_explode (new_highlight_tags,
",", 0, 0,
&buffer->highlight_tags_count);
}
}
else
{
buffer->highlight_tags = NULL;
buffer->highlight_tags_count = 0;
buffer->highlight_tags_array = NULL;
}
@@ -1148,7 +1156,9 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
struct t_gui_buffer *buffer)
{
struct t_infolist_item *ptr_item;
char *pos_point;
struct t_gui_key *ptr_key;
char *pos_point, option_name[32];
int i;
if (!infolist || !buffer)
return 0;
@@ -1196,6 +1206,20 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_string (ptr_item, "input_string", buffer->input_buffer))
return 0;
if (!infolist_new_var_string (ptr_item, "highlight_words", buffer->highlight_words))
return 0;
if (!infolist_new_var_string (ptr_item, "highlight_tags", buffer->highlight_tags))
return 0;
i = 0;
for (ptr_key = buffer->keys; ptr_key; ptr_key = ptr_key->next_key)
{
snprintf (option_name, sizeof (option_name), "key_%05d", i);
if (!infolist_new_var_string (ptr_item, option_name, ptr_key->key))
return 0;
snprintf (option_name, sizeof (option_name), "key_command_%05d", i);
if (!infolist_new_var_string (ptr_item, option_name, ptr_key->command))
return 0;
}
return 1;
}
+5
View File
@@ -146,6 +146,7 @@ struct t_gui_buffer
/* highlight settings for buffer */
char *highlight_words; /* list of words to highlight */
char *highlight_tags; /* tags to highlight */
int highlight_tags_count; /* number of tags to highlight */
/* (if 0, any tag is highlighted) */
char **highlight_tags_array; /* tags to highlight */
@@ -202,6 +203,10 @@ extern void gui_buffer_set_nicklist (struct t_gui_buffer *buffer,
extern void gui_buffer_set_nicklist_case_sensitive (struct t_gui_buffer * buffer,
int case_sensitive);
extern void gui_buffer_set_nick (struct t_gui_buffer *buffer, const char *new_nick);
extern void gui_buffer_set_highlight_words (struct t_gui_buffer *buffer,
const char *new_highlight_words);
extern void gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer,
const char *new_highlight_tags);
extern void gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
void *value);
extern struct t_gui_buffer *gui_buffer_search_main ();
+11
View File
@@ -2840,6 +2840,17 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
if (!weechat_infolist_new_var_string (ptr_item, "name", server->name))
return 0;
if (!weechat_infolist_new_var_pointer (ptr_item, "buffer", server->buffer))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "buffer_name",
(server->buffer) ?
weechat_buffer_get_string (server->buffer, "name") : ""))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "selected",
(weechat_config_boolean (irc_config_look_one_server_buffer)
&& (irc_current_server != server)) ?
0 : 1))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "autoconnect", server->autoconnect))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "autoreconnect", server->autoreconnect))
+21 -3
View File
@@ -25,6 +25,7 @@
#include "irc.h"
#include "irc-upgrade.h"
#include "irc-buffer.h"
#include "irc-config.h"
#include "irc-input.h"
#include "irc-server.h"
#include "irc-channel.h"
@@ -168,8 +169,9 @@ irc_upgrade_read_cb (int object_id,
struct t_infolist *infolist)
{
int flags, sock, size;
char *str, *buf;
char *str, *buf, *buffer_name;
struct t_irc_nick *ptr_nick;
struct t_gui_buffer *ptr_buffer;
weechat_infolist_reset_item_cursor (infolist);
while (weechat_infolist_next (infolist))
@@ -180,8 +182,24 @@ irc_upgrade_read_cb (int object_id,
irc_upgrade_current_server = irc_server_search (weechat_infolist_string (infolist, "name"));
if (irc_upgrade_current_server)
{
irc_upgrade_current_server->buffer = weechat_buffer_search (IRC_PLUGIN_NAME,
irc_upgrade_current_server->name);
irc_upgrade_current_server->buffer = NULL;
buffer_name = weechat_infolist_string (infolist, "buffer_name");
if (buffer_name && buffer_name[0])
{
ptr_buffer = weechat_buffer_search (IRC_PLUGIN_NAME,
buffer_name);
if (ptr_buffer)
{
irc_upgrade_current_server->buffer = ptr_buffer;
if (weechat_config_boolean (irc_config_look_one_server_buffer)
&& !irc_buffer_servers)
{
irc_buffer_servers = ptr_buffer;
}
if (weechat_infolist_integer (infolist, "selected"))
irc_current_server = irc_upgrade_current_server;
}
}
irc_upgrade_current_server->current_address = weechat_infolist_integer (infolist, "current_address");
sock = weechat_infolist_integer (infolist, "sock");