1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 13:26:38 +02:00

Add isupport value in IRC servers (content of IRC message 005), with new infos: irc_server_isupport and irc_server_isupport_value

This commit is contained in:
Sebastien Helleu
2010-05-22 10:51:43 +02:00
parent 6253e3ac37
commit 2dee40dd1a
18 changed files with 260 additions and 14 deletions
+3 -1
View File
@@ -1,7 +1,7 @@
WeeChat ChangeLog
=================
FlashCode <flashcode@flashtux.org>
v0.3.3-dev, 2010-05-21
v0.3.3-dev, 2010-05-22
Version 0.3.3 (under dev!)
@@ -13,6 +13,8 @@ Version 0.3.3 (under dev!)
process)
* api: add function "string_expand_home", fix bug with replacement of home in
paths
* irc: add isupport value in servers (content of IRC message 005), with new
infos: irc_server_isupport and irc_server_isupport_value
* irc: add message in private buffer when nick is back on server after a /quit
* irc: add new options irc.network.autoreconnect_delay_growing and
irc.network.autoreconnect_delay_max (task #10338)
+4
View File
@@ -16,6 +16,10 @@
| irc | irc_nick_from_host | get nick from IRC host | IRC host (like `:nick!name@server.com`)
| irc | irc_server_isupport | 1 if server supports this feature (from IRC message 005) | server,feature
| irc | irc_server_isupport_value | value of feature, if supported by server (from IRC message 005) | server,feature
| weechat | charset_internal | WeeChat internal charset | -
| weechat | charset_terminal | terminal charset | -
+4
View File
@@ -16,6 +16,10 @@
| irc | irc_nick_from_host | retourne le pseudo à partir d'un host IRC | host IRC (comme `:pseudo!nom@serveur.com`)
| irc | irc_server_isupport | 1 si le serveur supporte cette fonctionnalité (du message IRC 005) | serveur,fonctionnalité
| irc | irc_server_isupport_value | valeur de la fonctionnalité, si supportée par le serveur (du message IRC 005) | serveur,fonctionnalité
| weechat | charset_internal | charset interne à WeeChat | -
| weechat | charset_terminal | charset du terminal | -
+4
View File
@@ -16,6 +16,10 @@
| irc | irc_nick_from_host | ottiene nick dall'host IRC | host IRC (come `:nick!nome@server.com`)
| irc | irc_server_isupport | 1 if server supports this feature (from IRC message 005) | server,feature
| irc | irc_server_isupport_value | value of feature, if supported by server (from IRC message 005) | server,feature
| weechat | charset_internal | set caratteri interno di WeeChat | -
| weechat | charset_terminal | set caratteri terminale | -
+11 -1
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:20+0200\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4686,6 +4686,16 @@ msgstr "získat ukazatel bufferu pro IRC server/kanál/přezdívku"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "server,kanál,přezdívka (kanál a přezdívka jsou volitelné)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "jméno serveru"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr "seznam IRC serverů"
+11 -1
View File
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:20+0200\n"
"Last-Translator: Nils G <weechatter@arcor.de>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4863,6 +4863,16 @@ msgstr "hole Buffer Pointer für einen IRC Server/Channel/Nick"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "server,channel,nick (Channel und Nicks sind optional)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "Servername"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr "Liste der IRC-Server"
+11 -1
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:31+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4755,6 +4755,16 @@ msgstr "devuelve el puntero del buffer de un servidor/canal/apodo IRC"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "servidor,canal,apodo (canal y apodo es opcional)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "nombre del servidor"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr "lista de servidores IRC"
+12 -2
View File
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"PO-Revision-Date: 2010-05-21 18:08+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-22 09:53+0200\n"
"Last-Translator: FlashCode <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: French\n"
@@ -4801,6 +4801,16 @@ msgstr "retourne le pointeur vers le tampon pour un serveur/canal/pseudo IRC"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "serveur,canal,pseudo (canal et pseudo sont optionnels)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr "1 si le serveur supporte cette fonctionnalité (du message IRC 005)"
msgid "server,feature"
msgstr "serveur,fonctionnalité"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
"valeur de la fonctionnalité, si supportée par le serveur (du message IRC 005)"
msgid "list of IRC servers"
msgstr "liste des serveurs IRC"
+11 -1
View File
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:20+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4508,6 +4508,16 @@ msgstr "szobák listája ahová be akarunk lépni csatlakozás után"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr ""
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "cél: szerver neve"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "list of IRC servers"
msgstr "IRC szerver portja"
+11 -1
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Weechat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:26+0200\n"
"Last-Translator: Marco Paolone <marcopaolone@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4762,6 +4762,16 @@ msgstr "ottiene puntatore al buffer per un server/canale/nick IRC"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "server,canale,nick (canale e nick sono opzionali)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "nome server"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr "elenco di server IRC"
+11 -1
View File
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:22+0200\n"
"Last-Translator: Krzysztof Koroscik <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4735,6 +4735,16 @@ msgstr "pobiera wskaźnik dla serwera/kanału/nicku IRC"
msgid "server,channel,nick (channel and nicks are optional)"
msgstr "serwer,kanał,nick (kanał oraz nick są opcjonalne)"
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "nazwa srwera"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr "lista serwerów IRC"
+11 -1
View File
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: 2010-05-20 12:22+0200\n"
"Last-Translator: Pavel Shevchuk <stlwrt@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -4509,6 +4509,16 @@ msgstr "Список каналов, на которые заходить при
msgid "server,channel,nick (channel and nicks are optional)"
msgstr ""
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "server,feature"
msgstr "цель: название сервера"
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
#, fuzzy
msgid "list of IRC servers"
msgstr "порт IRC сервера"
+10 -1
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2010-05-21 18:07+0200\n"
"POT-Creation-Date: 2010-05-22 09:52+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -3859,6 +3859,15 @@ msgstr ""
msgid "server,channel,nick (channel and nicks are optional)"
msgstr ""
msgid "1 if server supports this feature (from IRC message 005)"
msgstr ""
msgid "server,feature"
msgstr ""
msgid "value of feature, if supported by server (from IRC message 005)"
msgstr ""
msgid "list of IRC servers"
msgstr ""
+47 -1
View File
@@ -67,7 +67,7 @@ irc_info_get_info_cb (void *data, const char *info_name,
const char *arguments)
{
char *pos_comma, *pos_comma2, *server, *channel, *host;
const char *nick;
const char *nick, *isupport_value;
static char str_true[2] = "1";
struct t_irc_server *ptr_server;
struct t_irc_channel *ptr_channel;
@@ -180,6 +180,46 @@ irc_info_get_info_cb (void *data, const char *info_name,
}
}
}
else if (weechat_strcasecmp (info_name, "irc_server_isupport") == 0)
{
isupport_value = NULL;
pos_comma = strchr (arguments, ',');
if (pos_comma)
{
server = weechat_strndup (arguments, pos_comma - arguments);
if (server)
{
ptr_server = irc_server_search (server);
if (ptr_server)
{
isupport_value = irc_server_get_isupport_value (ptr_server,
pos_comma + 1);
}
}
}
if (isupport_value)
return str_true;
return NULL;
}
else if (weechat_strcasecmp (info_name, "irc_server_isupport_value") == 0)
{
isupport_value = NULL;
pos_comma = strchr (arguments, ',');
if (pos_comma)
{
server = weechat_strndup (arguments, pos_comma - arguments);
if (server)
{
ptr_server = irc_server_search (server);
if (ptr_server)
{
isupport_value = irc_server_get_isupport_value (ptr_server,
pos_comma + 1);
}
}
}
return isupport_value;
}
return NULL;
}
@@ -422,6 +462,12 @@ irc_info_init ()
weechat_hook_info ("irc_buffer", N_("get buffer pointer for an IRC server/channel/nick"),
N_("server,channel,nick (channel and nicks are optional)"),
&irc_info_get_info_cb, NULL);
weechat_hook_info ("irc_server_isupport", N_("1 if server supports this feature (from IRC message 005)"),
N_("server,feature"),
&irc_info_get_info_cb, NULL);
weechat_hook_info ("irc_server_isupport_value", N_("value of feature, if supported by server (from IRC message 005)"),
N_("server,feature"),
&irc_info_get_info_cb, NULL);
/* infolist hooks */
weechat_hook_infolist ("irc_server", N_("list of IRC servers"),
+31 -2
View File
@@ -1868,7 +1868,8 @@ IRC_PROTOCOL_CALLBACK(001)
IRC_PROTOCOL_CALLBACK(005)
{
char *pos, *pos2;
char *pos, *pos2, *pos_start;
int length_isupport, length;
/*
* 005 message looks like:
@@ -1883,7 +1884,8 @@ IRC_PROTOCOL_CALLBACK(005)
irc_protocol_cb_numeric (server,
nick, address, host, command,
ignored, argc, argv, argv_eol);
/* save prefix */
pos = strstr (argv_eol[3], "PREFIX=");
if (pos)
{
@@ -1898,6 +1900,33 @@ IRC_PROTOCOL_CALLBACK(005)
pos2[0] = ' ';
}
/* save whole message (concatenate to existing isupport, if any) */
pos_start = NULL;
pos = strstr (argv_eol[3], " :");
length = (pos) ? pos - argv_eol[3] : (int)strlen (argv_eol[3]);
if (server->isupport)
{
length_isupport = strlen (server->isupport);
server->isupport = realloc (server->isupport,
length_isupport + /* existing */
1 + length + 1); /* new */
if (server->isupport)
pos_start = server->isupport + length_isupport;
}
else
{
server->isupport = malloc (1 + length + 1);
if (server->isupport)
pos_start = server->isupport;
}
if (pos_start)
{
pos_start[0] = ' ';
memcpy (pos_start + 1, argv_eol[3], length);
pos_start[length + 1] = '\0';
}
return WEECHAT_RC_OK;
}
+62
View File
@@ -297,6 +297,57 @@ irc_server_get_nick_index (struct t_irc_server *server)
return -1;
}
/*
* irc_server_get_isupport_value: return value of an item in "isupport" (copy
* of IRC message 005)
* if featureis found but has no value, empty
* string is returned
* if feature is not found, NULL is returned
*/
const char *
irc_server_get_isupport_value (struct t_irc_server *server, const char *feature)
{
char feature2[64], *pos_feature, *pos_equal, *pos_space;
int length;
static char value[256];
if (!server || !server->isupport || !feature)
return NULL;
/* search feature with value */
snprintf (feature2, sizeof (feature2), " %s=", feature);
pos_feature = strstr (server->isupport, feature2);
if (pos_feature)
{
/* feature found with value, return value */
pos_feature++;
pos_equal = strchr (pos_feature, '=');
pos_space = strchr (pos_feature, ' ');
if (pos_space)
length = pos_space - pos_equal - 1;
else
length = strlen (pos_equal) + 1;
if (length > (int)sizeof (value) - 1)
length = (int)sizeof (value) - 1;
memcpy (value, pos_equal + 1, length);
value[length] = '\0';
return value;
}
/* search feature without value */
feature2[strlen (feature2) - 1] = ' ';
pos_feature = strstr (server->isupport, feature2);
if (pos_feature)
{
value[0] = '\0';
return value;
}
/* feature not found in isupport */
return NULL;
}
/*
* irc_server_alloc: allocate a new server and add it to the servers queue
*/
@@ -355,6 +406,7 @@ irc_server_alloc (const char *name)
new_server->nick_first_tried = 0;
new_server->nick = NULL;
new_server->nick_modes = NULL;
new_server->isupport = NULL;
new_server->prefix = NULL;
new_server->reconnect_delay = 0;
new_server->reconnect_start = 0;
@@ -754,6 +806,8 @@ irc_server_free_data (struct t_irc_server *server)
free (server->nick);
if (server->nick_modes)
free (server->nick_modes);
if (server->isupport)
free (server->isupport);
if (server->prefix)
free (server->prefix);
if (server->away_message)
@@ -2965,6 +3019,11 @@ irc_server_disconnect (struct t_irc_server *server, int reconnect)
server->nick_modes = NULL;
weechat_bar_item_update ("input_prompt");
}
if (server->isupport)
{
free (server->isupport);
server->isupport = NULL;
}
if (server->prefix)
{
free (server->prefix);
@@ -3553,6 +3612,8 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "nick_modes", server->nick_modes))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "isupport", server->isupport))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "prefix", server->prefix))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_delay", server->reconnect_delay))
@@ -3791,6 +3852,7 @@ irc_server_print_log ()
weechat_log_printf (" nick_first_tried . . : %d", ptr_server->nick_first_tried);
weechat_log_printf (" nick . . . . . . . . : '%s'", ptr_server->nick);
weechat_log_printf (" nick_modes . . . . . : '%s'", ptr_server->nick_modes);
weechat_log_printf (" isupport . . . . . . : '%s'", ptr_server->isupport);
weechat_log_printf (" prefix . . . . . . . : '%s'", ptr_server->prefix);
weechat_log_printf (" reconnect_delay. . . : %d", ptr_server->reconnect_delay);
weechat_log_printf (" reconnect_start. . . : %ld", ptr_server->reconnect_start);
+3
View File
@@ -137,6 +137,7 @@ struct t_irc_server
/* when (re-)connecting to server */
char *nick; /* current nickname */
char *nick_modes; /* nick modes */
char *isupport; /* copy of message 005 (ISUPPORT) */
char *prefix; /* nick prefix allowed (from msg 005) */
int reconnect_delay; /* current reconnect delay (growing) */
time_t reconnect_start; /* this time + delay = reconnect time */
@@ -190,6 +191,8 @@ extern void irc_server_set_addresses (struct t_irc_server *server,
extern void irc_server_set_nicks (struct t_irc_server *server, const char *nicks);
extern void irc_server_set_nick (struct t_irc_server *server, const char *nick);
extern int irc_server_get_nick_index (struct t_irc_server *server);
extern const char *irc_server_get_isupport_value (struct t_irc_server *server,
const char *feature);
extern struct t_irc_server *irc_server_alloc (const char *name);
extern int irc_server_alloc_with_url (const char *irc_url);
extern void irc_server_apply_command_line_options (struct t_irc_server *server,
+3
View File
@@ -253,6 +253,9 @@ irc_upgrade_read_cb (void *data,
str = weechat_infolist_string (infolist, "nick_modes");
if (str)
irc_upgrade_current_server->nick_modes = strdup (str);
str = weechat_infolist_string (infolist, "isupport");
if (str)
irc_upgrade_current_server->isupport = strdup (str);
str = weechat_infolist_string (infolist, "prefix");
if (str)
irc_upgrade_current_server->prefix = strdup (str);