diff mcabber/src/commands.c @ 1603:54029aba9452

Allow specifying nickname for bookmark
author Myhailo Danylenko <isbear@ukrpost.net>
date Mon, 15 Jun 2009 10:59:31 +0200
parents f4a2c6f767d1
children 14690e624e9d
line wrap: on
line diff
--- a/mcabber/src/commands.c	Wed Sep 24 11:41:29 2008 +0200
+++ b/mcabber/src/commands.c	Mon Jun 15 10:59:31 2009 +0200
@@ -2817,17 +2817,19 @@
 {
   const char *roomid;
   const char *name = NULL, *nick = NULL;
+  char *tmpnick = NULL;
   enum room_autowhois autowhois = 0;
   enum room_printstatus printstatus = 0;
   enum { bm_add = 0, bm_del = 1 } action = 0;
   int autojoin = 0;
+  int nick_set = 0;
 
   if (arg && *arg) {
-    // /room bookmark [add|del] [[+|-]autojoin]
+    // /room bookmark [add|del] [[+|-]autojoin] [-|nick]
     char **paramlst;
     char **pp;
 
-    paramlst = split_arg(arg, 2, 0); // At most 2 parameters
+    paramlst = split_arg(arg, 3, 0); // At most 3 parameters
     for (pp = paramlst; *pp; pp++) {
       if (!strcasecmp(*pp, "add"))
         action = bm_add;
@@ -2837,6 +2839,12 @@
         autojoin = 0;
       else if (!strcasecmp(*pp, "+autojoin") || !strcasecmp(*pp, "autojoin"))
         autojoin = 1;
+      else if (!strcmp(*pp, "-"))
+        nick_set = 1;
+      else {
+        nick_set = 1;
+        nick = tmpnick = to_utf8 (*pp);
+      }
     }
     free_arg_lst(paramlst);
   }
@@ -2845,13 +2853,15 @@
 
   if (action == bm_add) {
     name = buddy_getname(bud);
-    nick = buddy_getnickname(bud);
+    if (!nick_set)
+      nick = buddy_getnickname(bud);
     printstatus = buddy_getprintstatus(bud);
     autowhois   = buddy_getautowhois(bud);
   }
 
   xmpp_set_storage_bookmark(roomid, name, nick, NULL, autojoin,
                             printstatus, autowhois);
+  g_free (tmpnick);
 }
 
 static void display_all_bookmarks(void)