Display more information in /room bookmark (autojoin, nick...)
With this patch /room bookmark adds a '*' prefix when autojoin is
set in the bookmark list. It also displays the nick and the room
name contained in the bookmarks.
--- a/mcabber/src/commands.c Wed Oct 01 20:36:22 2008 +0200
+++ b/mcabber/src/commands.c Thu Oct 02 20:00:11 2008 +0200
@@ -2810,6 +2810,7 @@
{
GSList *bm, *bmp;
GString *sbuf;
+ struct bookmark *bm_elt;
bm = jb_get_all_storage_bookmarks();
@@ -2822,7 +2823,17 @@
0, HBB_PREFIX_INFO, 0);
for (bmp = bm; bmp; bmp = g_slist_next(bmp)) {
- g_string_printf(sbuf, "<%s>", (char*)bmp->data);
+ bm_elt = bmp->data;
+ g_string_printf(sbuf, "%c <%s>",
+ (bm_elt->autojoin ? '*' : ' '), bm_elt->roomjid);
+ if (bm_elt->nick)
+ g_string_append_printf(sbuf, " (%s)", bm_elt->nick);
+ if (bm_elt->name)
+ g_string_append_printf(sbuf, " %s", bm_elt->name);
+ g_free(bm_elt->roomjid);
+ g_free(bm_elt->name);
+ g_free(bm_elt->nick);
+ g_free(bm_elt);
scr_WriteIncomingMessage(NULL, sbuf->str,
0, HBB_PREFIX_INFO | HBB_PREFIX_CONT, 0);
}
--- a/mcabber/src/jabglue.c Wed Oct 01 20:36:22 2008 +0200
+++ b/mcabber/src/jabglue.c Thu Oct 02 20:00:11 2008 +0200
@@ -1428,7 +1428,7 @@
// jb_get_all_storage_bookmarks()
// Return a GSList with all storage bookmarks.
-// The caller should g_free the list (not the MUC jids).
+// The caller should g_free the list and its contents.
GSList *jb_get_all_storage_bookmarks(void)
{
xmlnode x;
@@ -1444,10 +1444,23 @@
const char *p = xmlnode_get_name(x);
// If the node is a conference item, let's add the note to our list.
if (p && !strcmp(p, "conference")) {
+ struct bookmark *bm_elt;
+ const char *autojoin, *name, *nick;
const char *fjid = xmlnode_get_attrib(x, "jid");
if (!fjid)
continue;
- sl_bookmarks = g_slist_append(sl_bookmarks, (char*)fjid);
+ bm_elt = g_new0(struct bookmark, 1);
+ bm_elt->roomjid = g_strdup(fjid);
+ autojoin = xmlnode_get_attrib(x, "autojoin");
+ nick = xmlnode_get_attrib(x, "nick");
+ name = xmlnode_get_attrib(x, "name");
+ if (autojoin && !strcmp(autojoin, "1"))
+ bm_elt->autojoin = 1;
+ if (nick)
+ bm_elt->nick = g_strdup(nick);
+ if (name)
+ bm_elt->name = g_strdup(name);
+ sl_bookmarks = g_slist_append(sl_bookmarks, bm_elt);
}
}
return sl_bookmarks;
--- a/mcabber/src/jabglue.h Wed Oct 01 20:36:22 2008 +0200
+++ b/mcabber/src/jabglue.h Thu Oct 02 20:00:11 2008 +0200
@@ -42,6 +42,15 @@
gchar *text;
};
+struct bookmark {
+ gchar *roomjid;
+ gchar *name;
+ gchar *nick;
+ guint autojoin;
+ /* enum room_printstatus pstatus; */
+ /* enum room_autowhois awhois; */
+};
+
char *jidtodisp(const char *fjid);
char *compose_jid(const char *username, const char *servername,
const char *resource);