about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/command/cmd_ac.c1
-rw-r--r--src/command/cmd_defs.c5
-rw-r--r--src/command/cmd_funcs.c9
-rw-r--r--src/event/server_events.c2
-rw-r--r--src/xmpp/bookmark.c27
-rw-r--r--src/xmpp/xmpp.h4
6 files changed, 33 insertions, 15 deletions
diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c
index 3c9daaee..8c6117b0 100644
--- a/src/command/cmd_ac.c
+++ b/src/command/cmd_ac.c
@@ -615,6 +615,7 @@ cmd_ac_init(void)
     autocomplete_add(bookmark_property_ac, "nick");
     autocomplete_add(bookmark_property_ac, "password");
     autocomplete_add(bookmark_property_ac, "autojoin");
+    autocomplete_add(bookmark_property_ac, "name");
 
 #ifdef HAVE_LIBOTR
     otr_ac = autocomplete_new();
diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c
index 8c67d307..485c8324 100644
--- a/src/command/cmd_defs.c
+++ b/src/command/cmd_defs.c
@@ -802,8 +802,8 @@ static struct cmd_t command_defs[] =
         CMD_SYN(
             "/bookmark",
             "/bookmark list",
-            "/bookmark add [<room>] [nick <nick>] [password <password>] [autojoin on|off]",
-            "/bookmark update <room> [nick <nick>] [password <password>] [autojoin on|off]",
+            "/bookmark add [<room>] [nick <nick>] [password <password>] [name <roomname>] [autojoin on|off]",
+            "/bookmark update <room> [nick <nick>] [password <password>] [name <roomname>] autojoin on|off]",
             "/bookmark remove [<room>]",
             "/bookmark join <room>",
             "/bookmark invites on|off")
@@ -817,6 +817,7 @@ static struct cmd_t command_defs[] =
             { "update <room>", "Update the properties associated with a bookmark." },
             { "nick <nick>", "Nickname used in the chat room." },
             { "password <password>", "Password if required, may be stored in plaintext on your server." },
+            { "name <roomname>", "Optional name for the bookmark. By default localpart of the JID will be used." },
             { "autojoin on|off", "Whether to join the room automatically on login." },
             { "join <room>", "Join room using the properties associated with the bookmark." },
             { "invites on|off", "Whether or not to bookmark accepted room invites, defaults to 'on'."})
diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c
index 758d356f..8e02a822 100644
--- a/src/command/cmd_funcs.c
+++ b/src/command/cmd_funcs.c
@@ -4625,7 +4625,7 @@ cmd_bookmark(ProfWin *window, const char *const command, gchar **args)
         assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK);
         char *nick = muc_nick(mucwin->roomjid);
         char *password = muc_password(mucwin->roomjid);
-        gboolean added = bookmark_add(mucwin->roomjid, nick, password, "on");
+        gboolean added = bookmark_add(mucwin->roomjid, nick, password, "on", NULL);
         if (added) {
             win_println(window, THEME_DEFAULT, "!", "Bookmark added for %s.", mucwin->roomjid);
         } else {
@@ -4710,7 +4710,7 @@ cmd_bookmark(ProfWin *window, const char *const command, gchar **args)
         return TRUE;
     }
 
-    gchar *opt_keys[] = { "autojoin", "nick", "password", NULL };
+    gchar *opt_keys[] = { "autojoin", "nick", "password", "name", NULL };
     gboolean parsed;
 
     GHashTable *options = parse_options(&args[2], opt_keys, &parsed);
@@ -4733,9 +4733,10 @@ cmd_bookmark(ProfWin *window, const char *const command, gchar **args)
 
     char *nick = g_hash_table_lookup(options, "nick");
     char *password = g_hash_table_lookup(options, "password");
+    char *name = g_hash_table_lookup(options, "name");
 
     if (strcmp(cmd, "add") == 0) {
-        gboolean added = bookmark_add(jid, nick, password, autojoin);
+        gboolean added = bookmark_add(jid, nick, password, autojoin, name);
         if (added) {
             cons_show("Bookmark added for %s.", jid);
         } else {
@@ -4747,7 +4748,7 @@ cmd_bookmark(ProfWin *window, const char *const command, gchar **args)
     }
 
     if (strcmp(cmd, "update") == 0) {
-        gboolean updated = bookmark_update(jid, nick, password, autojoin);
+        gboolean updated = bookmark_update(jid, nick, password, autojoin, name);
         if (updated) {
             cons_show("Bookmark updated.");
         } else {
diff --git a/src/event/server_events.c b/src/event/server_events.c
index 057af9bf..153618f2 100644
--- a/src/event/server_events.c
+++ b/src/event/server_events.c
@@ -1139,7 +1139,7 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c
 
         if (muc_invites_contain(room)) {
             if (prefs_get_boolean(PREF_BOOKMARK_INVITE) && !bookmark_exists(room)) {
-                bookmark_add(room, nick, muc_invite_password(room), "on");
+                bookmark_add(room, nick, muc_invite_password(room), "on", NULL);
             }
             muc_invites_remove(room);
         }
diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c
index 81d7e19e..e546ef18 100644
--- a/src/xmpp/bookmark.c
+++ b/src/xmpp/bookmark.c
@@ -95,7 +95,7 @@ bookmark_request(void)
 }
 
 gboolean
-bookmark_add(const char *jid, const char *nick, const char *password, const char *autojoin_str)
+bookmark_add(const char *jid, const char *nick, const char *password, const char *autojoin_str, const char *name)
 {
     assert(jid != NULL);
 
@@ -121,6 +121,11 @@ bookmark_add(const char *jid, const char *nick, const char *password, const char
     } else {
         bookmark->password = NULL;
     }
+    if (name) {
+        bookmark->password = strdup(name);
+    } else {
+        bookmark->password = NULL;
+    }
 
     if (g_strcmp0(autojoin_str, "on") == 0) {
         bookmark->autojoin = TRUE;
@@ -137,7 +142,7 @@ bookmark_add(const char *jid, const char *nick, const char *password, const char
 }
 
 gboolean
-bookmark_update(const char *jid, const char *nick, const char *password, const char *autojoin_str)
+bookmark_update(const char *jid, const char *nick, const char *password, const char *autojoin_str, const char *name)
 {
     assert(jid != NULL);
 
@@ -154,6 +159,10 @@ bookmark_update(const char *jid, const char *nick, const char *password, const c
         free(bookmark->password);
         bookmark->password = strdup(password);
     }
+    if (name) {
+        free(bookmark->name);
+        bookmark->name = strdup(name);
+    }
     if (autojoin_str) {
         if (g_strcmp0(autojoin_str, "on") == 0) {
             bookmark->autojoin = TRUE;
@@ -359,11 +368,17 @@ _send_bookmarks(void)
         xmpp_stanza_set_name(conference, STANZA_NAME_CONFERENCE);
         xmpp_stanza_set_attribute(conference, STANZA_ATTR_JID, bookmark->barejid);
 
-        Jid *jidp = jid_create(bookmark->barejid);
-        if (jidp->localpart) {
-            xmpp_stanza_set_attribute(conference, STANZA_ATTR_NAME, jidp->localpart);
+        if (bookmark->name) {
+            // use specified bookmark name
+            xmpp_stanza_set_attribute(conference, STANZA_ATTR_NAME, bookmark->name);
+        } else {
+            // use localpart of JID by if no name is specified
+            Jid *jidp = jid_create(bookmark->barejid);
+            if (jidp->localpart) {
+                xmpp_stanza_set_attribute(conference, STANZA_ATTR_NAME, jidp->localpart);
+            }
+            jid_destroy(jidp);
         }
-        jid_destroy(jidp);
 
         if (bookmark->autojoin) {
             xmpp_stanza_set_attribute(conference, STANZA_ATTR_AUTOJOIN, "true");
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index c06939cb..9254ac6b 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -251,8 +251,8 @@ void caps_add_feature(char *feature);
 void caps_remove_feature(char *feature);
 gboolean caps_jid_has_feature(const char *const jid, const char *const feature);
 
-gboolean bookmark_add(const char *jid, const char *nick, const char *password, const char *autojoin_str);
-gboolean bookmark_update(const char *jid, const char *nick, const char *password, const char *autojoin_str);
+gboolean bookmark_add(const char *jid, const char *nick, const char *password, const char *autojoin_str, const char *name);
+gboolean bookmark_update(const char *jid, const char *nick, const char *password, const char *autojoin_str, const char *name);
 gboolean bookmark_remove(const char *jid);
 gboolean bookmark_join(const char *jid);
 GList* bookmark_get_list(void);