changeset 1009:c112423ac012

Add /room bookmark
author Mikael Berthe <mikael@lilotux.net>
date Sun, 12 Nov 2006 10:51:43 +0100
parents bbf53cd43fbb
children 54405d09b15a
files mcabber/src/commands.c mcabber/src/jabglue.h
diffstat 2 files changed, 43 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/commands.c	Sun Nov 12 10:45:13 2006 +0100
+++ b/mcabber/src/commands.c	Sun Nov 12 10:51:43 2006 +0100
@@ -190,6 +190,7 @@
   // Room category
   compl_add_category_word(COMPL_ROOM, "affil");
   compl_add_category_word(COMPL_ROOM, "ban");
+  compl_add_category_word(COMPL_ROOM, "bookmark");
   compl_add_category_word(COMPL_ROOM, "destroy");
   compl_add_category_word(COMPL_ROOM, "invite");
   compl_add_category_word(COMPL_ROOM, "join");
@@ -2018,6 +2019,42 @@
   free_arg_lst(paramlst);
 }
 
+static void room_bookmark(gpointer bud, char *arg)
+{
+  const char *roomid;
+  const char *name = NULL, *nick = NULL;
+  enum { bm_add = 0, bm_del = 1 } action = 0;
+  int autojoin = 0;
+
+  if (arg && *arg) {
+    // /room bookmark [add|del] [[+|-]autojoin]
+    char **paramlst;
+    char **pp;
+
+    paramlst = split_arg(arg, 2, 0); // At most 2 parameters
+    for (pp = paramlst; *pp; pp++) {
+      if (!strcasecmp(*pp, "add"))
+        action = bm_add;
+      else if (!strcasecmp(*pp, "del"))
+        action = bm_del;
+      else if (!strcasecmp(*pp, "-autojoin"))
+        autojoin = 0;
+      else if (!strcasecmp(*pp, "+autojoin") || !strcasecmp(*pp, "autojoin"))
+        autojoin = 1;
+    }
+    free_arg_lst(paramlst);
+  }
+
+  roomid = buddy_getjid(bud);
+
+  if (action == bm_add) {
+    name = buddy_getname(bud);
+    nick = buddy_getnickname(bud);
+  }
+
+  jb_set_storage_bookmark(roomid, name, nick, NULL, autojoin);
+}
+
 static void do_room(char *arg)
 {
   char **paramlst;
@@ -2094,6 +2131,9 @@
   } else if (!strcasecmp(subcmd, "whois"))  {
     if ((arg = check_room_subcommand(arg, TRUE, bud)) != NULL)
       room_whois(bud, arg, TRUE);
+  } else if (!strcasecmp(subcmd, "bookmark"))  {
+    if ((arg = check_room_subcommand(arg, FALSE, bud)) != NULL)
+      room_bookmark(bud, arg);
   } else {
     scr_LogPrint(LPRINT_NORMAL, "Unrecognized parameter!");
   }
--- a/mcabber/src/jabglue.h	Sun Nov 12 10:45:13 2006 +0100
+++ b/mcabber/src/jabglue.h	Sun Nov 12 10:51:43 2006 +0100
@@ -65,6 +65,9 @@
                        struct role_affil ra, const char *reason);
 void jb_iqs_display_list(void);
 void jb_request(const char *jid, enum iqreq_type reqtype);
+void jb_set_storage_bookmark(const char *roomid, const char *name,
+                             const char *nick, const char *passwd,
+                             int autojoin);
 
 #endif /* __JABGLUE_H__ */