summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/irc/irc-info.c64
-rw-r--r--src/plugins/relay/relay-client-irc.c25
2 files changed, 67 insertions, 22 deletions
diff --git a/src/plugins/irc/irc-info.c b/src/plugins/irc/irc-info.c
index 0026954c0..9efe59419 100644
--- a/src/plugins/irc/irc-info.c
+++ b/src/plugins/irc/irc-info.c
@@ -324,39 +324,65 @@ irc_info_get_infolist_cb (void *data, const char *infolist_name,
{
if (arguments && arguments[0])
{
- ptr_server = irc_server_search (arguments);
- if (ptr_server)
+ ptr_server = NULL;
+ ptr_channel = NULL;
+ argv = weechat_string_split (arguments, ",", 0, 0, &argc);
+ if (argv)
{
- if (pointer && !irc_channel_valid (ptr_server, pointer))
- return NULL;
-
- ptr_infolist = weechat_infolist_new ();
- if (ptr_infolist)
+ if (argc >= 1)
{
- if (pointer)
+ ptr_server = irc_server_search (argv[0]);
+ if (!ptr_server)
+ {
+ weechat_string_free_split (argv);
+ return NULL;
+ }
+ if (!pointer && (argc >= 2))
{
- /* build list with only one channel */
- if (!irc_channel_add_to_infolist (ptr_infolist, pointer))
+ pointer = irc_channel_search (ptr_server, argv[1]);
+ if (!pointer)
{
- weechat_infolist_free (ptr_infolist);
+ weechat_string_free_split (argv);
return NULL;
}
- return ptr_infolist;
}
- else
+ }
+ weechat_string_free_split (argv);
+ if (ptr_server)
+ {
+ if (pointer && !irc_channel_valid (ptr_server, pointer))
+ return NULL;
+
+ ptr_infolist = weechat_infolist_new ();
+ if (ptr_infolist)
{
- /* build list with all channels of server */
- for (ptr_channel = ptr_server->channels; ptr_channel;
- ptr_channel = ptr_channel->next_channel)
+ if (pointer)
{
+ /* build list with only one channel */
if (!irc_channel_add_to_infolist (ptr_infolist,
- ptr_channel))
+ pointer))
{
weechat_infolist_free (ptr_infolist);
return NULL;
}
+ return ptr_infolist;
+ }
+ else
+ {
+ /* build list with all channels of server */
+ for (ptr_channel = ptr_server->channels;
+ ptr_channel;
+ ptr_channel = ptr_channel->next_channel)
+ {
+ if (!irc_channel_add_to_infolist (ptr_infolist,
+ ptr_channel))
+ {
+ weechat_infolist_free (ptr_infolist);
+ return NULL;
+ }
+ }
+ return ptr_infolist;
}
- return ptr_infolist;
}
}
}
@@ -539,7 +565,7 @@ irc_info_init ()
weechat_hook_infolist ("irc_channel",
N_("list of channels for an IRC server"),
N_("channel pointer (optional)"),
- N_("server name"),
+ N_("server,channel (channel is optional)"),
&irc_info_get_infolist_cb, NULL);
weechat_hook_infolist ("irc_nick",
N_("list of nicks for an IRC channel"),
diff --git a/src/plugins/relay/relay-client-irc.c b/src/plugins/relay/relay-client-irc.c
index 1a36ef3a2..2cb5e058d 100644
--- a/src/plugins/relay/relay-client-irc.c
+++ b/src/plugins/relay/relay-client-irc.c
@@ -444,10 +444,10 @@ relay_client_irc_send_join (struct t_relay_client *client,
const char *channel)
{
char *infolist_name, *nicks;
- const char *nick, *prefix;
+ const char *nick, *prefix, *topic;
char *host;
int length, length_nicks;
- struct t_infolist *infolist_nick, *infolist_nicks;
+ struct t_infolist *infolist_nick, *infolist_channel, *infolist_nicks;
length = strlen (client->protocol_args) + 1 + strlen (channel) + 1
+ strlen (RELAY_IRC_DATA(client, nick)) + 1;
@@ -481,7 +481,26 @@ relay_client_irc_send_join (struct t_relay_client *client,
snprintf (infolist_name, length, "%s,%s",
client->protocol_args,
channel);
- infolist_nicks = weechat_infolist_get ("irc_nick", NULL, infolist_name);
+ infolist_channel = weechat_infolist_get ("irc_channel", NULL,
+ infolist_name);
+ if (infolist_channel)
+ {
+ if (weechat_infolist_next (infolist_channel))
+ {
+ topic = weechat_infolist_string (infolist_channel, "topic");
+ if (topic && topic[0])
+ {
+ relay_client_irc_sendf (client,
+ ":%s 332 %s %s :%s",
+ RELAY_IRC_DATA(client, address),
+ RELAY_IRC_DATA(client, nick),
+ channel, topic);
+ }
+ }
+ weechat_infolist_free (infolist_channel);
+ }
+ infolist_nicks = weechat_infolist_get ("irc_nick", NULL,
+ infolist_name);
if (infolist_nicks)
{
length_nicks = 0;