mcabber/src/commands.c
changeset 1603 54029aba9452
parent 1602 f4a2c6f767d1
child 1607 14690e624e9d
equal deleted inserted replaced
1602:f4a2c6f767d1 1603:54029aba9452
  2815 
  2815 
  2816 static void room_bookmark(gpointer bud, char *arg)
  2816 static void room_bookmark(gpointer bud, char *arg)
  2817 {
  2817 {
  2818   const char *roomid;
  2818   const char *roomid;
  2819   const char *name = NULL, *nick = NULL;
  2819   const char *name = NULL, *nick = NULL;
       
  2820   char *tmpnick = NULL;
  2820   enum room_autowhois autowhois = 0;
  2821   enum room_autowhois autowhois = 0;
  2821   enum room_printstatus printstatus = 0;
  2822   enum room_printstatus printstatus = 0;
  2822   enum { bm_add = 0, bm_del = 1 } action = 0;
  2823   enum { bm_add = 0, bm_del = 1 } action = 0;
  2823   int autojoin = 0;
  2824   int autojoin = 0;
       
  2825   int nick_set = 0;
  2824 
  2826 
  2825   if (arg && *arg) {
  2827   if (arg && *arg) {
  2826     // /room bookmark [add|del] [[+|-]autojoin]
  2828     // /room bookmark [add|del] [[+|-]autojoin] [-|nick]
  2827     char **paramlst;
  2829     char **paramlst;
  2828     char **pp;
  2830     char **pp;
  2829 
  2831 
  2830     paramlst = split_arg(arg, 2, 0); // At most 2 parameters
  2832     paramlst = split_arg(arg, 3, 0); // At most 3 parameters
  2831     for (pp = paramlst; *pp; pp++) {
  2833     for (pp = paramlst; *pp; pp++) {
  2832       if (!strcasecmp(*pp, "add"))
  2834       if (!strcasecmp(*pp, "add"))
  2833         action = bm_add;
  2835         action = bm_add;
  2834       else if (!strcasecmp(*pp, "del"))
  2836       else if (!strcasecmp(*pp, "del"))
  2835         action = bm_del;
  2837         action = bm_del;
  2836       else if (!strcasecmp(*pp, "-autojoin"))
  2838       else if (!strcasecmp(*pp, "-autojoin"))
  2837         autojoin = 0;
  2839         autojoin = 0;
  2838       else if (!strcasecmp(*pp, "+autojoin") || !strcasecmp(*pp, "autojoin"))
  2840       else if (!strcasecmp(*pp, "+autojoin") || !strcasecmp(*pp, "autojoin"))
  2839         autojoin = 1;
  2841         autojoin = 1;
       
  2842       else if (!strcmp(*pp, "-"))
       
  2843         nick_set = 1;
       
  2844       else {
       
  2845         nick_set = 1;
       
  2846         nick = tmpnick = to_utf8 (*pp);
       
  2847       }
  2840     }
  2848     }
  2841     free_arg_lst(paramlst);
  2849     free_arg_lst(paramlst);
  2842   }
  2850   }
  2843 
  2851 
  2844   roomid = buddy_getjid(bud);
  2852   roomid = buddy_getjid(bud);
  2845 
  2853 
  2846   if (action == bm_add) {
  2854   if (action == bm_add) {
  2847     name = buddy_getname(bud);
  2855     name = buddy_getname(bud);
  2848     nick = buddy_getnickname(bud);
  2856     if (!nick_set)
       
  2857       nick = buddy_getnickname(bud);
  2849     printstatus = buddy_getprintstatus(bud);
  2858     printstatus = buddy_getprintstatus(bud);
  2850     autowhois   = buddy_getautowhois(bud);
  2859     autowhois   = buddy_getautowhois(bud);
  2851   }
  2860   }
  2852 
  2861 
  2853   xmpp_set_storage_bookmark(roomid, name, nick, NULL, autojoin,
  2862   xmpp_set_storage_bookmark(roomid, name, nick, NULL, autojoin,
  2854                             printstatus, autowhois);
  2863                             printstatus, autowhois);
       
  2864   g_free (tmpnick);
  2855 }
  2865 }
  2856 
  2866 
  2857 static void display_all_bookmarks(void)
  2867 static void display_all_bookmarks(void)
  2858 {
  2868 {
  2859   GSList *bm, *bmp;
  2869   GSList *bm, *bmp;