1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-24 11:56:38 +02:00
Files
weechat/src/plugins/irc/irc-upgrade.c
T
2017-06-17 20:10:45 +03:00

770 lines
36 KiB
C

/*
* irc-upgrade.c - save/restore IRC plugin data when upgrading WeeChat
*
* Copyright (C) 2003-2017 Sébastien Helleu <flashcode@flashtux.org>
*
* This file is part of WeeChat, the extensible chat client.
*
* WeeChat is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* WeeChat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with WeeChat. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "../weechat-plugin.h"
#include "irc.h"
#include "irc-upgrade.h"
#include "irc-buffer.h"
#include "irc-channel.h"
#include "irc-config.h"
#include "irc-input.h"
#include "irc-nick.h"
#include "irc-notify.h"
#include "irc-raw.h"
#include "irc-redirect.h"
#include "irc-server.h"
struct t_irc_server *irc_upgrade_current_server = NULL;
struct t_irc_channel *irc_upgrade_current_channel = NULL;
/*
* Saves servers/channels/nicks info to irc upgrade file.
*
* Returns:
* 1: OK
* 0: error
*/
int
irc_upgrade_save_all_data (struct t_upgrade_file *upgrade_file)
{
struct t_infolist *infolist;
struct t_irc_server *ptr_server;
struct t_irc_channel *ptr_channel;
struct t_irc_nick *ptr_nick;
struct t_irc_redirect *ptr_redirect;
struct t_irc_redirect_pattern *ptr_redirect_pattern;
struct t_irc_notify *ptr_notify;
struct t_irc_raw_message *ptr_raw_message;
int rc;
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
/* save server */
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_server_add_to_infolist (infolist, ptr_server))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_SERVER,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
/* save server channels and nicks */
for (ptr_channel = ptr_server->channels; ptr_channel;
ptr_channel = ptr_channel->next_channel)
{
/* save channel */
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_channel_add_to_infolist (infolist, ptr_channel))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_CHANNEL,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
for (ptr_nick = ptr_channel->nicks; ptr_nick;
ptr_nick = ptr_nick->next_nick)
{
/* save nick */
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_nick_add_to_infolist (infolist, ptr_nick))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_NICK,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
}
}
/* save server redirects */
for (ptr_redirect = ptr_server->redirects; ptr_redirect;
ptr_redirect = ptr_redirect->next_redirect)
{
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_redirect_add_to_infolist (infolist, ptr_redirect))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_REDIRECT,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
}
/* save server notify list */
for (ptr_notify = ptr_server->notify_list; ptr_notify;
ptr_notify = ptr_notify->next_notify)
{
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_notify_add_to_infolist (infolist, ptr_notify))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_NOTIFY,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
}
}
/* save raw messages */
for (ptr_raw_message = irc_raw_messages; ptr_raw_message;
ptr_raw_message = ptr_raw_message->next_message)
{
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_raw_add_to_infolist (infolist, ptr_raw_message))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_RAW_MESSAGE,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
}
/* save redirect patterns */
for (ptr_redirect_pattern = irc_redirect_patterns; ptr_redirect_pattern;
ptr_redirect_pattern = ptr_redirect_pattern->next_redirect)
{
/* save only temporary patterns (created by other plugins/scripts) */
if (ptr_redirect_pattern->temp_pattern)
{
infolist = weechat_infolist_new ();
if (!infolist)
return 0;
if (!irc_redirect_pattern_add_to_infolist (infolist, ptr_redirect_pattern))
{
weechat_infolist_free (infolist);
return 0;
}
rc = weechat_upgrade_write_object (upgrade_file,
IRC_UPGRADE_TYPE_REDIRECT_PATTERN,
infolist);
weechat_infolist_free (infolist);
if (!rc)
return 0;
}
}
return 1;
}
/*
* Saves irc upgrade file.
*
* Returns:
* 1: OK
* 0: error
*/
int
irc_upgrade_save ()
{
int rc;
struct t_upgrade_file *upgrade_file;
upgrade_file = weechat_upgrade_new (IRC_UPGRADE_FILENAME,
NULL, NULL, NULL);
if (!upgrade_file)
return 0;
rc = irc_upgrade_save_all_data (upgrade_file);
weechat_upgrade_close (upgrade_file);
return rc;
}
/*
* Restores buffers callbacks (input and close) for buffers created by irc
* plugin.
*/
void
irc_upgrade_set_buffer_callbacks ()
{
struct t_infolist *infolist;
struct t_gui_buffer *ptr_buffer;
struct t_irc_server *ptr_server;
const char *type;
infolist = weechat_infolist_get ("buffer", NULL, NULL);
if (infolist)
{
while (weechat_infolist_next (infolist))
{
if (weechat_infolist_pointer (infolist, "plugin") == weechat_irc_plugin)
{
ptr_buffer = weechat_infolist_pointer (infolist, "pointer");
weechat_buffer_set_pointer (ptr_buffer, "close_callback", &irc_buffer_close_cb);
weechat_buffer_set_pointer (ptr_buffer, "input_callback", &irc_input_data_cb);
type = weechat_buffer_get_string (ptr_buffer, "localvar_type");
if (type && (strcmp (type, "channel") == 0))
{
ptr_server = irc_server_search (
weechat_buffer_get_string (ptr_buffer,
"localvar_server"));
weechat_buffer_set_pointer (ptr_buffer, "nickcmp_callback",
&irc_buffer_nickcmp_cb);
if (ptr_server)
{
weechat_buffer_set_pointer (ptr_buffer,
"nickcmp_callback_pointer",
ptr_server);
}
}
if (strcmp (weechat_infolist_string (infolist, "name"),
IRC_RAW_BUFFER_NAME) == 0)
{
irc_raw_buffer = ptr_buffer;
}
}
}
weechat_infolist_free (infolist);
}
}
/*
* Reads callback for irc upgrade.
*/
int
irc_upgrade_read_cb (const void *pointer, void *data,
struct t_upgrade_file *upgrade_file,
int object_id,
struct t_infolist *infolist)
{
int flags, sock, size, i, index, nicks_count, num_items;
long number;
time_t join_time;
char *buf, option_name[64], **nicks, *nick_join, *pos, *error;
char **items;
const char *buffer_name, *str, *nick;
struct t_irc_nick *ptr_nick;
struct t_irc_redirect *ptr_redirect;
struct t_irc_notify *ptr_notify;
struct t_gui_buffer *ptr_buffer;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) upgrade_file;
weechat_infolist_reset_item_cursor (infolist);
while (weechat_infolist_next (infolist))
{
switch (object_id)
{
case IRC_UPGRADE_TYPE_SERVER:
irc_upgrade_current_server = irc_server_search (weechat_infolist_string (infolist, "name"));
if (irc_upgrade_current_server)
{
irc_upgrade_current_server->temp_server =
weechat_infolist_integer (infolist, "temp_server");
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;
}
irc_upgrade_current_server->index_current_address =
weechat_infolist_integer (infolist, "index_current_address");
str = weechat_infolist_string (infolist, "current_address");
if (str)
{
irc_upgrade_current_server->current_address = strdup (str);
irc_upgrade_current_server->current_port = weechat_infolist_integer (infolist, "current_port");
}
else
{
if (irc_upgrade_current_server->index_current_address < irc_upgrade_current_server->addresses_count)
{
irc_upgrade_current_server->current_address =
strdup (irc_upgrade_current_server->addresses_array[irc_upgrade_current_server->index_current_address]);
irc_upgrade_current_server->current_port =
irc_upgrade_current_server->ports_array[irc_upgrade_current_server->index_current_address];
}
}
str = weechat_infolist_string (infolist, "current_ip");
if (str)
irc_upgrade_current_server->current_ip = strdup (str);
sock = weechat_infolist_integer (infolist, "sock");
if (sock >= 0)
{
irc_upgrade_current_server->sock = sock;
irc_upgrade_current_server->hook_fd = weechat_hook_fd (
irc_upgrade_current_server->sock,
1, 0, 0,
&irc_server_recv_cb,
irc_upgrade_current_server,
NULL);
}
irc_upgrade_current_server->is_connected = weechat_infolist_integer (infolist, "is_connected");
irc_upgrade_current_server->ssl_connected = weechat_infolist_integer (infolist, "ssl_connected");
irc_upgrade_current_server->disconnected = weechat_infolist_integer (infolist, "disconnected");
str = weechat_infolist_string (infolist, "unterminated_message");
if (str)
irc_upgrade_current_server->unterminated_message = strdup (str);
str = weechat_infolist_string (infolist, "nick");
if (str)
irc_server_set_nick (irc_upgrade_current_server, str);
str = weechat_infolist_string (infolist, "nick_modes");
if (str)
irc_upgrade_current_server->nick_modes = strdup (str);
/* "cap_ls" and "cap_list" replace "cap_away_notify" and "cap_account_notify" in WeeChat x.y.z */
if (weechat_infolist_integer (infolist, "cap_away_notify"))
{
weechat_hashtable_set (irc_upgrade_current_server->cap_ls, "away-notify", NULL);
weechat_hashtable_set (irc_upgrade_current_server->cap_list, "away-notify", NULL);
}
if (weechat_infolist_integer (infolist, "cap_account_notify"))
{
weechat_hashtable_set (irc_upgrade_current_server->cap_ls, "account-notify", NULL);
weechat_hashtable_set (irc_upgrade_current_server->cap_list, "account-notify", NULL);
}
if (weechat_infolist_integer (infolist, "cap_extended_join"))
{
weechat_hashtable_set (irc_upgrade_current_server->cap_ls, "extended-join", NULL);
weechat_hashtable_set (irc_upgrade_current_server->cap_list, "extended-join", NULL);
}
weechat_hashtable_add_from_infolist (
irc_upgrade_current_server->cap_ls, infolist, "cap_ls");
weechat_hashtable_add_from_infolist (
irc_upgrade_current_server->cap_list, infolist, "cap_list");
str = weechat_infolist_string (infolist, "isupport");
if (str)
irc_upgrade_current_server->isupport = strdup (str);
/*
* "prefix" is not any more in this infolist (since
* WeeChat 0.3.4), but we read it to keep compatibility
* with old WeeChat versions, on /upgrade)
*/
str = weechat_infolist_string (infolist, "prefix");
if (str)
irc_server_set_prefix_modes_chars (irc_upgrade_current_server, str);
/* "prefix_modes" is new in WeeChat 0.3.4 */
str = weechat_infolist_string (infolist, "prefix_modes");
if (str)
{
if (irc_upgrade_current_server->prefix_modes)
free (irc_upgrade_current_server->prefix_modes);
irc_upgrade_current_server->prefix_modes = strdup (str);
}
/* "prefix_chars" is new in WeeChat 0.3.4 */
str = weechat_infolist_string (infolist, "prefix_chars");
if (str)
{
if (irc_upgrade_current_server->prefix_chars)
free (irc_upgrade_current_server->prefix_chars);
irc_upgrade_current_server->prefix_chars = strdup (str);
}
irc_upgrade_current_server->nick_max_length = weechat_infolist_integer (infolist, "nick_max_length");
irc_upgrade_current_server->casemapping = weechat_infolist_integer (infolist, "casemapping");
str = weechat_infolist_string (infolist, "chantypes");
if (str)
irc_upgrade_current_server->chantypes = strdup (str);
str = weechat_infolist_string (infolist, "chanmodes");
if (str)
irc_upgrade_current_server->chanmodes = strdup (str);
else
{
str = irc_server_get_isupport_value (irc_upgrade_current_server,
"CHANMODES");
if (str)
irc_upgrade_current_server->chanmodes = strdup (str);
}
/* "monitor" is new in WeeChat 0.4.3 */
if (weechat_infolist_search_var (infolist, "monitor"))
{
irc_upgrade_current_server->monitor = weechat_infolist_integer (infolist, "monitor");
}
else
{
/* WeeChat <= 0.4.2 */
str = irc_server_get_isupport_value (irc_upgrade_current_server,
"MONITOR");
if (str)
{
error = NULL;
number = strtol (str, &error, 10);
if (error && !error[0])
irc_upgrade_current_server->monitor = (int)number;
}
}
irc_upgrade_current_server->reconnect_delay = weechat_infolist_integer (infolist, "reconnect_delay");
irc_upgrade_current_server->reconnect_start = weechat_infolist_time (infolist, "reconnect_start");
irc_upgrade_current_server->command_time = weechat_infolist_time (infolist, "command_time");
irc_upgrade_current_server->reconnect_join = weechat_infolist_integer (infolist, "reconnect_join");
irc_upgrade_current_server->disable_autojoin = weechat_infolist_integer (infolist, "disable_autojoin");
irc_upgrade_current_server->is_away = weechat_infolist_integer (infolist, "is_away");
str = weechat_infolist_string (infolist, "away_message");
if (str)
irc_upgrade_current_server->away_message = strdup (str);
irc_upgrade_current_server->away_time = weechat_infolist_time (infolist, "away_time");
irc_upgrade_current_server->lag = weechat_infolist_integer (infolist, "lag");
irc_upgrade_current_server->lag_displayed = weechat_infolist_integer (infolist, "lag_displayed");
buf = weechat_infolist_buffer (infolist, "lag_check_time", &size);
if (buf)
memcpy (&(irc_upgrade_current_server->lag_check_time), buf, size);
irc_upgrade_current_server->lag_next_check = weechat_infolist_time (infolist, "lag_next_check");
irc_upgrade_current_server->lag_last_refresh = weechat_infolist_time (infolist, "lag_last_refresh");
irc_upgrade_current_server->last_user_message = weechat_infolist_time (infolist, "last_user_message");
irc_upgrade_current_server->last_away_check = weechat_infolist_time (infolist, "last_away_check");
irc_upgrade_current_server->last_data_purge = weechat_infolist_time (infolist, "last_data_purge");
}
break;
case IRC_UPGRADE_TYPE_CHANNEL:
if (irc_upgrade_current_server)
{
irc_upgrade_current_channel = irc_channel_new (irc_upgrade_current_server,
weechat_infolist_integer (infolist, "type"),
weechat_infolist_string (infolist, "name"),
0, 0);
if (irc_upgrade_current_channel)
{
str = weechat_infolist_string (infolist, "topic");
if (str)
irc_channel_set_topic (irc_upgrade_current_channel, str);
str = weechat_infolist_string (infolist, "modes");
if (str)
irc_upgrade_current_channel->modes = strdup (str);
irc_upgrade_current_channel->limit = weechat_infolist_integer (infolist, "limit");
str = weechat_infolist_string (infolist, "key");
if (str)
irc_upgrade_current_channel->key = strdup (str);
str = weechat_infolist_string (infolist, "join_msg_received");
if (str)
{
items = weechat_string_split (str, ",", 0, 0,
&num_items);
if (items)
{
for (i = 0; i < num_items; i++)
{
weechat_hashtable_set (irc_upgrade_current_channel->join_msg_received,
items[i], "1");
}
weechat_string_free_split (items);
}
}
irc_upgrade_current_channel->checking_whox = weechat_infolist_integer (infolist, "checking_whox");
str = weechat_infolist_string (infolist, "away_message");
if (str)
irc_upgrade_current_channel->away_message = strdup (str);
irc_upgrade_current_channel->has_quit_server = weechat_infolist_integer (infolist, "has_quit_server");
irc_upgrade_current_channel->cycle = weechat_infolist_integer (infolist, "cycle");
irc_upgrade_current_channel->part = weechat_infolist_integer (infolist, "part");
irc_upgrade_current_channel->nick_completion_reset = weechat_infolist_integer (infolist, "nick_completion_reset");
for (i = 0; i < 2; i++)
{
index = 0;
while (1)
{
snprintf (option_name, sizeof (option_name),
"nick_speaking%d_%05d", i, index);
nick = weechat_infolist_string (infolist, option_name);
if (!nick)
break;
irc_channel_nick_speaking_add (irc_upgrade_current_channel,
nick,
i);
index++;
}
}
index = 0;
while (1)
{
snprintf (option_name, sizeof (option_name),
"nick_speaking_time_nick_%05d", index);
nick = weechat_infolist_string (infolist, option_name);
if (!nick)
break;
snprintf (option_name, sizeof (option_name),
"nick_speaking_time_time_%05d", index);
irc_channel_nick_speaking_time_add (irc_upgrade_current_server,
irc_upgrade_current_channel,
nick,
weechat_infolist_time (infolist,
option_name));
index++;
}
str = weechat_infolist_string (infolist, "join_smart_filtered");
if (str)
{
nicks = weechat_string_split (str, ",", 0, 0,
&nicks_count);
if (nicks)
{
for (i = 0; i < nicks_count; i++)
{
pos = strchr (nicks[i], ':');
if (pos)
{
nick_join = weechat_strndup (nicks[i],
pos - nicks[i]);
if (nick_join)
{
error = NULL;
number = strtol (pos + 1, &error, 10);
if (error && !error[0])
{
join_time = (time_t)number;
irc_channel_join_smart_filtered_add (irc_upgrade_current_channel,
nick_join,
join_time);
}
free (nick_join);
}
}
}
weechat_string_free_split (nicks);
}
}
}
}
break;
case IRC_UPGRADE_TYPE_NICK:
if (irc_upgrade_current_server && irc_upgrade_current_channel)
{
ptr_nick = irc_nick_new (irc_upgrade_current_server,
irc_upgrade_current_channel,
weechat_infolist_string (infolist, "name"),
weechat_infolist_string (infolist, "host"),
weechat_infolist_string (infolist, "prefixes"),
weechat_infolist_integer (infolist, "away"),
weechat_infolist_string (infolist, "account"),
weechat_infolist_string (infolist, "realname"));
if (ptr_nick)
{
/*
* "flags" is not any more in this infolist (since
* WeeChat 0.3.4), but we read it to keep compatibility
* with old WeeChat versions, on /upgrade)
* We try to restore prefixes with old flags, but
* this is approximation, it's not sure we will
* restore good prefixes here (a /names on channel
* will fix problem if prefixes are wrong).
* Flags were defined in irc-nick.h:
* #define IRC_NICK_CHANOWNER 1
* #define IRC_NICK_CHANADMIN 2
* #define IRC_NICK_CHANADMIN2 4
* #define IRC_NICK_OP 8
* #define IRC_NICK_HALFOP 16
* #define IRC_NICK_VOICE 32
* #define IRC_NICK_AWAY 64
* #define IRC_NICK_CHANUSER 128
*/
flags = weechat_infolist_integer (infolist, "flags");
if (flags > 0)
{
/* channel owner */
if (flags & 1)
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'q');
}
/* channel admin */
if ((flags & 2) || (flags & 4))
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'a');
}
/* op */
if (flags & 8)
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'o');
}
/* half-op */
if (flags & 16)
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'h');
}
/* voice */
if (flags & 32)
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'v');
}
/* away */
if (flags & 64)
{
irc_nick_set_away (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1);
}
/* channel user */
if (flags & 128)
{
irc_nick_set_mode (irc_upgrade_current_server,
irc_upgrade_current_channel,
ptr_nick, 1, 'u');
}
}
}
}
break;
case IRC_UPGRADE_TYPE_REDIRECT:
if (irc_upgrade_current_server)
{
ptr_redirect = irc_redirect_new_with_commands (
irc_upgrade_current_server,
weechat_infolist_string (infolist, "pattern"),
weechat_infolist_string (infolist, "signal"),
weechat_infolist_integer (infolist, "count"),
weechat_infolist_string (infolist, "string"),
weechat_infolist_integer (infolist, "timeout"),
weechat_infolist_string (infolist, "cmd_start"),
weechat_infolist_string (infolist, "cmd_stop"),
weechat_infolist_string (infolist, "cmd_extra"),
weechat_infolist_string (infolist, "cmd_filter"));
if (ptr_redirect)
{
ptr_redirect->current_count = weechat_infolist_integer (infolist, "current_count");
str = weechat_infolist_string (infolist, "command");
if (str)
ptr_redirect->command = strdup (str);
ptr_redirect->assigned_to_command = weechat_infolist_integer (infolist, "assigned_to_command");
ptr_redirect->start_time = weechat_infolist_time (infolist, "start_time");
ptr_redirect->cmd_start_received = weechat_infolist_integer (infolist, "cmd_start_received");
ptr_redirect->cmd_stop_received = weechat_infolist_integer (infolist, "cmd_stop_received");
str = weechat_infolist_string (infolist, "output");
if (str)
ptr_redirect->output = strdup (str);
ptr_redirect->output_size = weechat_infolist_integer (infolist, "output_size");
}
}
break;
case IRC_UPGRADE_TYPE_REDIRECT_PATTERN:
irc_redirect_pattern_new (
weechat_infolist_string (infolist, "name"),
weechat_infolist_integer (infolist, "temp_pattern"),
weechat_infolist_integer (infolist, "timeout"),
weechat_infolist_string (infolist, "cmd_start"),
weechat_infolist_string (infolist, "cmd_stop"),
weechat_infolist_string (infolist, "cmd_extra"));
break;
case IRC_UPGRADE_TYPE_NOTIFY:
if (irc_upgrade_current_server)
{
ptr_notify = irc_notify_search (irc_upgrade_current_server,
weechat_infolist_string (infolist, "nick"));
if (ptr_notify)
{
ptr_notify->is_on_server = weechat_infolist_integer (infolist, "is_on_server");
str = weechat_infolist_string (infolist, "away_message");
if (str)
ptr_notify->away_message = strdup (str);
}
}
break;
case IRC_UPGRADE_TYPE_RAW_MESSAGE:
irc_raw_message_add_to_list (weechat_infolist_time (infolist, "date"),
weechat_infolist_string (infolist, "prefix"),
weechat_infolist_string (infolist, "message"));
break;
}
}
return WEECHAT_RC_OK;
}
/*
* Loads irc upgrade file.
*
* Returns:
* 1: OK
* 0: error
*/
int
irc_upgrade_load ()
{
int rc;
struct t_upgrade_file *upgrade_file;
irc_upgrade_set_buffer_callbacks ();
upgrade_file = weechat_upgrade_new (IRC_UPGRADE_FILENAME,
&irc_upgrade_read_cb, NULL, NULL);
if (!upgrade_file)
return 0;
rc = weechat_upgrade_read (upgrade_file);
weechat_upgrade_close (upgrade_file);
return rc;
}