Mercurial > ~mikael > mcabber > hg
diff mcabber/src/commands.c @ 480:882e1acae422
Add /say_to command
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Tue, 04 Oct 2005 19:47:50 +0200 |
parents | fa49ac0bb8f3 |
children | 00e2d3821a5b |
line wrap: on
line diff
--- a/mcabber/src/commands.c Mon Oct 03 23:59:56 2005 +0200 +++ b/mcabber/src/commands.c Tue Oct 04 19:47:50 2005 +0200 @@ -40,6 +40,7 @@ static void do_group(char *arg); static void do_say(char *arg); static void do_msay(char *arg); +static void do_say_to(char *arg); static void do_buffer(char *arg); static void do_clear(char *arg); static void do_info(char *arg); @@ -101,6 +102,7 @@ cmd_add("roster", "Manipulate the roster/buddylist", COMPL_ROSTER, 0, &do_roster); cmd_add("say", "Say something to the selected buddy", 0, 0, &do_say); + cmd_add("say_to", "Say something to a specific buddy", 0, 0, &do_say_to); //cmd_add("search"); //cmd_add("send_auth"); cmd_add("set", "Set/query an option value", 0, 0, &do_set); @@ -652,6 +654,54 @@ scr_set_multimode(FALSE); } +static void do_say_to(char *arg) +{ + char *jid, *msg; + char *bare_jid, *p; + + if (!jb_getonline()) { + scr_LogPrint(LPRINT_NORMAL, "You are not connected"); + return; + } + + msg = strchr(arg, ' '); + if (!msg) { + scr_LogPrint(LPRINT_NORMAL, "Missing parameter"); + return; + } + + jid = g_strndup(arg, msg - arg); + + if (check_jid_syntax(jid)) { + scr_LogPrint(LPRINT_NORMAL, "<%s> is not a valid Jabber id", jid); + g_free(jid); + return; + } + + while (*msg == ' ') msg++; + if (!*msg) { + scr_LogPrint(LPRINT_NORMAL, "Wrong or missing parameter"); + g_free(jid); + return; + } + + // We must use the bare jid in hk_message_out() + p = strchr(jid, '/'); + if (p) bare_jid = g_strndup(jid, p - jid); + else bare_jid = jid; + + // Jump to window, create one if needed + scr_RosterJumpJid(bare_jid); + + // local part (UI, logging, etc.) + hk_message_out(bare_jid, 0, msg); + + // Network part + jb_send_msg(jid, msg, ROSTER_TYPE_USER, NULL); + g_free(jid); + if (p) g_free(bare_jid); +} + static void do_buffer(char *arg) { int search_dir = 0;