void upgrade_weechat_read_buffer_line (struct t_infolist *infolist) { struct t_gui_line *new_line; if (!upgrade_current_buffer) return; switch (upgrade_current_buffer->type) { case GUI_BUFFER_TYPE_FORMATTED: new_line = gui_line_add (upgrade_current_buffer, infolist_time (infolist, "date"), infolist_time (infolist, "date_printed"), infolist_string (infolist, "tags"), infolist_string (infolist, "prefix"), infolist_string (infolist, "message")); if (new_line) { new_line->data->highlight = infolist_integer (infolist, "highlight"); if (infolist_integer (infolist, "last_read_line")) upgrade_current_buffer->lines->last_read_line = new_line; } break; case GUI_BUFFER_TYPE_FREE: gui_line_add_y (upgrade_current_buffer, infolist_integer (infolist, "y"), infolist_string (infolist, "message")); break; case GUI_BUFFER_NUM_TYPES: break; } }
int upgrade_weechat_read_cb (const void *pointer, void *data, struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist) { /* make C compiler happy */ (void) pointer; (void) data; (void) upgrade_file; infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { switch (object_id) { case UPGRADE_WEECHAT_TYPE_HISTORY: if (upgrade_current_buffer) { gui_history_buffer_add (upgrade_current_buffer, infolist_string (infolist, "text")); } else { gui_history_global_add (infolist_string (infolist, "text")); } break; case UPGRADE_WEECHAT_TYPE_BUFFER: upgrade_weechat_read_buffer (infolist); break; case UPGRADE_WEECHAT_TYPE_BUFFER_LINE: upgrade_weechat_read_buffer_line (infolist); break; case UPGRADE_WEECHAT_TYPE_NICKLIST: upgrade_weechat_read_nicklist (infolist); break; case UPGRADE_WEECHAT_TYPE_MISC: weechat_first_start_time = infolist_time (infolist, "start_time"); weechat_upgrade_count = infolist_integer (infolist, "upgrade_count"); upgrade_set_current_window = infolist_integer (infolist, "current_window_number"); break; case UPGRADE_WEECHAT_TYPE_HOTLIST: upgrade_weechat_read_hotlist (infolist); break; case UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW: gui_layout_window_add (&upgrade_layout->layout_windows, infolist_integer (infolist, "internal_id"), gui_layout_window_search_by_id (upgrade_layout->layout_windows, infolist_integer (infolist, "parent_id")), infolist_integer (infolist, "split_pct"), infolist_integer (infolist, "split_horiz"), infolist_string (infolist, "plugin_name"), infolist_string (infolist, "buffer_name")); break; } } return WEECHAT_RC_OK; }
time_t plugin_api_infolist_time (struct t_infolist *infolist, const char *var) { if (!infolist || !infolist_valid (infolist) || !infolist->ptr_item) return 0; return infolist_time (infolist, var); }
int upgrade_file_write_object (struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist) { int i, argc, length; char **argv; const char *fields; void *buf; /* write all infolist variables */ infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { /* write object start with id */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_START)) { UPGRADE_ERROR(_("write - object type"), "object start"); return 0; } if (!upgrade_file_write_integer (upgrade_file, object_id)) { UPGRADE_ERROR(_("write - object id"), ""); return 0; } fields = infolist_fields (infolist); if (fields) { argv = string_split (fields, ",", 0, 0, &argc); if (argv && (argc > 0)) { for (i = 0; i < argc; i++) { switch (argv[i][0]) { case 'i': /* integer */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_INTEGER)) { UPGRADE_ERROR(_("write - infolist type"), "integer"); return 0; } if (!upgrade_file_write_integer (upgrade_file, infolist_integer (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "integer"); return 0; } break; case 's': /* string */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_STRING)) { UPGRADE_ERROR(_("write - infolist type"), "string"); return 0; } if (!upgrade_file_write_string (upgrade_file, infolist_string (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "string"); return 0; } break; case 'p': /* pointer */ /* pointer in not used in upgrade files, only buffer is */ break; case 'b': /* buffer */ buf = infolist_buffer (infolist, argv[i] + 2, &length); if (buf && (length > 0)) { if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_BUFFER)) { UPGRADE_ERROR(_("write - infolist type"), "buffer"); return 0; } if (!upgrade_file_write_buffer (upgrade_file, buf, length)) { UPGRADE_ERROR(_("write - variable"), "buffer"); return 0; } } break; case 't': /* time */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_TIME)) { UPGRADE_ERROR(_("write - infolist type"), "time"); return 0; } if (!upgrade_file_write_time (upgrade_file, infolist_time (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "time"); return 0; } break; } } } if (argv) string_free_split (argv); } /* write object end */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_END)) return 0; } return 1; }
int 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, *plugin_name; const char *buffer_name; char option_name[64], *option_key, *option_var; struct t_gui_nick_group *ptr_group; struct t_gui_buffer *ptr_buffer; struct t_gui_line *new_line; struct t_gui_hotlist *new_hotlist; struct timeval creation_time; void *buf; int i, size, index, length; /* make C compiler happy */ (void) data; (void) upgrade_file; infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { switch (object_id) { case UPGRADE_WEECHAT_TYPE_HISTORY: if (upgrade_current_buffer) { gui_history_buffer_add (upgrade_current_buffer, infolist_string (infolist, "text")); } else { gui_history_global_add (infolist_string (infolist, "text")); } break; case UPGRADE_WEECHAT_TYPE_BUFFER: plugin_name = infolist_string (infolist, "plugin_name"); name = infolist_string (infolist, "name"); gui_layout_buffer_add (&upgrade_layout_buffers, &last_upgrade_layout_buffer, plugin_name, name, infolist_integer (infolist, "number")); if (gui_buffer_is_main (plugin_name, name)) { /* use WeeChat main buffer */ upgrade_current_buffer = gui_buffers; } else { /* * create buffer if it was created by a plugin (ie not * WeeChat main buffer) */ upgrade_current_buffer = gui_buffer_new ( NULL, infolist_string (infolist, "name"), NULL, NULL, NULL, NULL); if (upgrade_current_buffer) { if (infolist_integer (infolist, "current_buffer")) upgrade_set_current_buffer = upgrade_current_buffer; upgrade_current_buffer->plugin_name_for_upgrade = strdup (infolist_string (infolist, "plugin_name")); gui_buffer_build_full_name (upgrade_current_buffer); upgrade_current_buffer->short_name = (infolist_string (infolist, "short_name")) ? strdup (infolist_string (infolist, "short_name")) : NULL; upgrade_current_buffer->type = infolist_integer (infolist, "type"); upgrade_current_buffer->notify = infolist_integer (infolist, "notify"); upgrade_current_buffer->nicklist_case_sensitive = infolist_integer (infolist, "nicklist_case_sensitive"); upgrade_current_buffer->nicklist_display_groups = infolist_integer (infolist, "nicklist_display_groups"); upgrade_current_buffer->title = (infolist_string (infolist, "title")) ? strdup (infolist_string (infolist, "title")) : NULL; upgrade_current_buffer->lines->first_line_not_read = infolist_integer (infolist, "first_line_not_read"); upgrade_current_buffer->time_for_each_line = infolist_integer (infolist, "time_for_each_line"); upgrade_current_buffer->input = infolist_integer (infolist, "input"); upgrade_current_buffer->input_get_unknown_commands = infolist_integer (infolist, "input_get_unknown_commands"); if (infolist_integer (infolist, "input_buffer_alloc") > 0) { upgrade_current_buffer->input_buffer = malloc (infolist_integer (infolist, "input_buffer_alloc")); if (upgrade_current_buffer->input_buffer) { upgrade_current_buffer->input_buffer_size = infolist_integer (infolist, "input_buffer_size"); upgrade_current_buffer->input_buffer_length = infolist_integer (infolist, "input_buffer_length"); upgrade_current_buffer->input_buffer_pos = infolist_integer (infolist, "input_buffer_pos"); upgrade_current_buffer->input_buffer_1st_display = infolist_integer (infolist, "input_buffer_1st_display"); if (infolist_string (infolist, "input_buffer")) strcpy (upgrade_current_buffer->input_buffer, infolist_string (infolist, "input_buffer")); else upgrade_current_buffer->input_buffer[0] = '\0'; } } upgrade_current_buffer->text_search = infolist_integer (infolist, "text_search"); upgrade_current_buffer->text_search_exact = infolist_integer (infolist, "text_search_exact"); upgrade_current_buffer->text_search_found = infolist_integer (infolist, "text_search_found"); if (infolist_string (infolist, "text_search_input")) upgrade_current_buffer->text_search_input = strdup (infolist_string (infolist, "text_search_input")); gui_buffer_set_highlight_words (upgrade_current_buffer, infolist_string (infolist, "highlight_words")); gui_buffer_set_highlight_regex (upgrade_current_buffer, infolist_string (infolist, "highlight_regex")); gui_buffer_set_highlight_tags (upgrade_current_buffer, infolist_string (infolist, "highlight_tags")); gui_buffer_set_hotlist_max_level_nicks (upgrade_current_buffer, infolist_string (infolist, "hotlist_max_level_nicks")); index = 0; while (1) { snprintf (option_name, sizeof (option_name), "key_%05d", 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", index); gui_buffer_set (upgrade_current_buffer, option_key, infolist_string (infolist, option_name)); free (option_key); } index++; } index = 0; while (1) { snprintf (option_name, sizeof (option_name), "localvar_name_%05d", index); var_name = infolist_string (infolist, option_name); if (!var_name) break; length = 32 + strlen (var_name) + 1; option_var = malloc (length); if (option_var) { snprintf (option_var, length, "localvar_set_%s", var_name); snprintf (option_name, sizeof (option_name), "localvar_value_%05d", index); gui_buffer_set (upgrade_current_buffer, option_var, infolist_string (infolist, option_name)); free (option_var); } index++; } } } break; case UPGRADE_WEECHAT_TYPE_BUFFER_LINE: /* add line to current buffer */ if (upgrade_current_buffer) { switch (upgrade_current_buffer->type) { case GUI_BUFFER_TYPE_FORMATTED: new_line = gui_line_add ( upgrade_current_buffer, infolist_time (infolist, "date"), infolist_time (infolist, "date_printed"), infolist_string (infolist, "tags"), infolist_string (infolist, "prefix"), infolist_string (infolist, "message")); if (new_line) { new_line->data->highlight = infolist_integer (infolist, "highlight"); if (infolist_integer (infolist, "last_read_line")) upgrade_current_buffer->lines->last_read_line = new_line; } break; case GUI_BUFFER_TYPE_FREE: gui_line_add_y ( upgrade_current_buffer, infolist_integer (infolist, "y"), infolist_string (infolist, "message")); break; case GUI_BUFFER_NUM_TYPES: break; } } break; case UPGRADE_WEECHAT_TYPE_NICKLIST: if (upgrade_current_buffer) { upgrade_current_buffer->nicklist = 1; ptr_group = NULL; type = infolist_string (infolist, "type"); if (type) { if (strcmp (type, "group") == 0) { name = infolist_string (infolist, "name"); if (name && (strcmp (name, "root") != 0)) { group_name = infolist_string (infolist, "parent_name"); if (group_name) ptr_group = gui_nicklist_search_group (upgrade_current_buffer, NULL, group_name); gui_nicklist_add_group ( upgrade_current_buffer, ptr_group, name, infolist_string (infolist, "color"), infolist_integer (infolist, "visible")); } } else if (strcmp (type, "nick") == 0) { group_name = infolist_string (infolist, "group_name"); if (group_name) ptr_group = gui_nicklist_search_group (upgrade_current_buffer, NULL, group_name); gui_nicklist_add_nick ( upgrade_current_buffer, ptr_group, infolist_string (infolist, "name"), infolist_string (infolist, "color"), infolist_string (infolist, "prefix"), infolist_string (infolist, "prefix_color"), infolist_integer (infolist, "visible")); } } } break; case UPGRADE_WEECHAT_TYPE_MISC: weechat_first_start_time = infolist_time (infolist, "start_time"); weechat_upgrade_count = infolist_integer (infolist, "upgrade_count"); upgrade_set_current_window = infolist_integer (infolist, "current_window_number"); break; case UPGRADE_WEECHAT_TYPE_HOTLIST: if (!hotlist_reset) { gui_hotlist_clear (); hotlist_reset = 1; } plugin_name = infolist_string (infolist, "plugin_name"); buffer_name = infolist_string (infolist, "buffer_name"); if (plugin_name && buffer_name) { ptr_buffer = gui_buffer_search_by_name (plugin_name, buffer_name); if (ptr_buffer) { buf = infolist_buffer (infolist, "creation_time", &size); if (buf) { memcpy (&creation_time, buf, size); new_hotlist = gui_hotlist_add (ptr_buffer, infolist_integer (infolist, "priority"), &creation_time); if (new_hotlist) { for (i = 0; i < GUI_HOTLIST_NUM_PRIORITIES; i++) { snprintf (option_name, sizeof (option_name), "count_%02d", i); new_hotlist->count[i] = infolist_integer (infolist, option_name); } } } } } break; case UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW: gui_layout_window_add (&upgrade_layout_windows, infolist_integer (infolist, "internal_id"), gui_layout_window_search_by_id (upgrade_layout_windows, infolist_integer (infolist, "parent_id")), infolist_integer (infolist, "split_pct"), infolist_integer (infolist, "split_horiz"), infolist_string (infolist, "plugin_name"), infolist_string (infolist, "buffer_name")); break; } } return WEECHAT_RC_OK; }