about summary refs log tree commit diff stats
path: root/src/xmpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp')
-rw-r--r--src/xmpp/bookmark.c12
-rw-r--r--src/xmpp/muc.c27
-rw-r--r--src/xmpp/muc.h5
3 files changed, 44 insertions, 0 deletions
diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c
index accc8a5c..65009224 100644
--- a/src/xmpp/bookmark.c
+++ b/src/xmpp/bookmark.c
@@ -98,6 +98,12 @@ bookmark_add(const char *jid, const char *nick, const char *password, const char
 {
     assert(jid != NULL);
 
+    Jid *jidp = jid_create(jid);
+    if (jidp->domainpart) {
+        muc_confserver_add(jidp->domainpart);
+    }
+    jid_destroy(jidp);
+
     if (g_hash_table_contains(bookmarks, jid)) {
         return FALSE;
     }
@@ -297,6 +303,12 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata)
             sv_ev_bookmark_autojoin(bookmark);
         }
 
+        Jid *jidp = jid_create(barejid);
+        if (jidp->domainpart) {
+            muc_confserver_add(jidp->domainpart);
+        }
+        jid_destroy(jidp);
+
         child = xmpp_stanza_get_next(child);
     }
 
diff --git a/src/xmpp/muc.c b/src/xmpp/muc.c
index 3a6372d7..43e2bdbf 100644
--- a/src/xmpp/muc.c
+++ b/src/xmpp/muc.c
@@ -69,6 +69,7 @@ typedef struct _muc_room_t {
 GHashTable *rooms = NULL;
 GHashTable *invite_passwords = NULL;
 Autocomplete invite_ac;
+Autocomplete confservers_ac;
 
 static void _free_room(ChatRoom *room);
 static gint _compare_occupants(Occupant *a, Occupant *b);
@@ -84,6 +85,7 @@ void
 muc_init(void)
 {
     invite_ac = autocomplete_new();
+    confservers_ac = autocomplete_new();
     rooms = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)_free_room);
     invite_passwords = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
 }
@@ -92,6 +94,7 @@ void
 muc_close(void)
 {
     autocomplete_free(invite_ac);
+    autocomplete_free(confservers_ac);
     g_hash_table_destroy(rooms);
     g_hash_table_destroy(invite_passwords);
     rooms = NULL;
@@ -99,6 +102,12 @@ muc_close(void)
 }
 
 void
+muc_confserver_add(const char *const server)
+{
+    autocomplete_add(confservers_ac, server);
+}
+
+void
 muc_invites_add(const char *const room, const char *const password)
 {
     autocomplete_add(invite_ac, room);
@@ -156,12 +165,24 @@ muc_invites_reset_ac(void)
     autocomplete_reset(invite_ac);
 }
 
+void
+muc_confserver_reset_ac(void)
+{
+    autocomplete_reset(confservers_ac);
+}
+
 char*
 muc_invites_find(const char *const search_str, gboolean previous)
 {
     return autocomplete_complete(invite_ac, search_str, TRUE, previous);
 }
 
+char*
+muc_confserver_find(const char *const search_str, gboolean previous)
+{
+    return autocomplete_complete(confservers_ac, search_str, TRUE, previous);
+}
+
 void
 muc_invites_clear(void)
 {
@@ -172,6 +193,12 @@ muc_invites_clear(void)
 }
 
 void
+muc_confserver_clear(void)
+{
+    autocomplete_clear(confservers_ac);
+}
+
+void
 muc_join(const char *const room, const char *const nick, const char *const password, gboolean autojoin)
 {
     ChatRoom *new_room = malloc(sizeof(ChatRoom));
diff --git a/src/xmpp/muc.h b/src/xmpp/muc.h
index 5303eaa9..e50e2a87 100644
--- a/src/xmpp/muc.h
+++ b/src/xmpp/muc.h
@@ -117,6 +117,11 @@ GSList* muc_occupants_by_affiliation(const char *const room, muc_affiliation_t a
 void muc_occupant_nick_change_start(const char *const room, const char *const new_nick, const char *const old_nick);
 char* muc_roster_nick_change_complete(const char *const room, const char *const nick);
 
+void muc_confserver_add(const char *const server);
+void muc_confserver_reset_ac(void);
+char* muc_confserver_find(const char *const search_str, gboolean previous);
+void muc_confserver_clear(void);
+
 void muc_invites_add(const char *const room, const char *const password);
 void muc_invites_remove(const char *const room);
 gint muc_invites_count(void);