1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Rejoin private rooms after reconnecting

This commit is contained in:
James Booth 2014-04-23 22:19:14 +01:00
parent 4384a1f468
commit c7b3ff02ff
3 changed files with 34 additions and 1 deletions

View File

@ -297,6 +297,26 @@ muc_get_room_nick(const char * const room)
} }
} }
/*
* Return password for the specified room
* The password is owned by the chat room and should not be modified or freed
*/
char *
muc_get_room_password(const char * const room)
{
if (rooms != NULL) {
ChatRoom *chat_room = g_hash_table_lookup(rooms, room);
if (chat_room != NULL) {
return chat_room->password;
} else {
return NULL;
}
} else {
return NULL;
}
}
/* /*
* Returns TRUE if the specified nick exists in the room's roster * Returns TRUE if the specified nick exists in the room's roster
*/ */

View File

@ -37,7 +37,8 @@ void muc_leave_room(const char * const room);
gboolean muc_room_is_active(const char * const room); gboolean muc_room_is_active(const char * const room);
gboolean muc_room_is_autojoin(const char * const room); gboolean muc_room_is_autojoin(const char * const room);
GList* muc_get_active_room_list(void); GList* muc_get_active_room_list(void);
char * muc_get_room_nick(const char * const room); char* muc_get_room_nick(const char * const room);
char* muc_get_room_password(const char * const room);
void muc_set_room_pending_nick_change(const char * const room, const char * const new_nick); void muc_set_room_pending_nick_change(const char * const room, const char * const new_nick);
gboolean muc_is_room_pending_nick_change(const char * const room); gboolean muc_is_room_pending_nick_change(const char * const room);

View File

@ -94,6 +94,18 @@ handle_login_account_success(char *account_name)
ui_handle_login_account_success(account); ui_handle_login_account_success(account);
// attempt to rejoin rooms with passwords
GList *curr = muc_get_active_room_list();
while (curr != NULL) {
char *password = muc_get_room_password(curr->data);
if (password != NULL) {
char *nick = muc_get_room_nick(curr->data);
presence_join_room(curr->data, nick, password);
}
curr = g_list_next(curr);
}
g_list_free(curr);
log_info("%s logged in successfully", account->jid); log_info("%s logged in successfully", account->jid);
account_free(account); account_free(account);
} }