diff options
author | James Booth <boothj5@gmail.com> | 2018-02-05 21:40:32 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2018-02-05 21:40:32 +0000 |
commit | cba17faf3dd9cb845a8f5734a213a7c708e8a05f (patch) | |
tree | 63d551c2c92768096a3064b8096d7efcc7688624 /src/xmpp | |
parent | e6d9a243cd2e2a1e1f3a0f89744b5d2d2d0e51e6 (diff) | |
download | profani-tty-cba17faf3dd9cb845a8f5734a213a7c708e8a05f.tar.gz |
Add /rooms service autocompletion
Diffstat (limited to 'src/xmpp')
-rw-r--r-- | src/xmpp/bookmark.c | 12 | ||||
-rw-r--r-- | src/xmpp/muc.c | 27 | ||||
-rw-r--r-- | src/xmpp/muc.h | 5 |
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); |