From 47a1a62009d411002d4e3b1d6eefd55ba2fe1011 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 28 Aug 2016 22:42:09 +0100 Subject: Add sv_ev_bookmark_autojoin --- src/event/server_events.c | 22 ++++++++++++++++++++++ src/event/server_events.h | 1 + src/xmpp/bookmark.c | 17 +---------------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 1b935c6a..d271ec55 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -1079,3 +1079,25 @@ sv_ev_lastactivity_response(const char *const from, const int seconds, const cha g_free(date_fmt); jid_destroy(jidp); } + +void +sv_ev_bookmark_autojoin(Bookmark *bookmark) +{ + char *nick = NULL; + if (bookmark->nick) { + nick = strdup(bookmark->nick); + } else { + char *account_name = session_get_account_name(); + ProfAccount *account = accounts_get_account(account_name); + nick = strdup(account->muc_nick); + account_free(account); + } + + log_debug("Autojoin %s with nick=%s", bookmark->barejid, nick); + if (!muc_active(bookmark->barejid)) { + presence_join_room(bookmark->barejid, nick, bookmark->password); + muc_join(bookmark->barejid, nick, bookmark->password, TRUE); + } + + free(nick); +} diff --git a/src/event/server_events.h b/src/event/server_events.h index 7f60c3a5..cc67952f 100644 --- a/src/event/server_events.h +++ b/src/event/server_events.h @@ -87,5 +87,6 @@ void sv_ev_roster_update(const char *const barejid, const char *const name, void sv_ev_roster_received(void); int sv_ev_certfail(const char *const errormsg, TLSCertificate *cert); void sv_ev_lastactivity_response(const char *const from, const int seconds, const char *const msg); +void sv_ev_bookmark_autojoin(Bookmark *bookmark); #endif diff --git a/src/xmpp/bookmark.c b/src/xmpp/bookmark.c index 88b452f2..d4371dc5 100644 --- a/src/xmpp/bookmark.c +++ b/src/xmpp/bookmark.c @@ -294,22 +294,7 @@ _bookmark_result_id_handler(xmpp_stanza_t *const stanza, void *const userdata) g_hash_table_insert(bookmarks, strdup(barejid), bookmark); if (autojoin_val) { - Jid *room_jid; - - char *account_name = session_get_account_name(); - ProfAccount *account = accounts_get_account(account_name); - if (nick == NULL) { - nick = account->muc_nick; - } - - log_debug("Autojoin %s with nick=%s", barejid, nick); - room_jid = jid_create_from_bare_and_resource(barejid, nick); - if (!muc_active(room_jid->barejid)) { - presence_join_room(barejid, nick, password); - muc_join(barejid, nick, password, TRUE); - } - jid_destroy(room_jid); - account_free(account); + sv_ev_bookmark_autojoin(bookmark); } child = xmpp_stanza_get_next(child); -- cgit 1.4.1-2-gfad0