void ui_room_banned(const char *const roomjid, const char *const actor, const char *const reason) { ProfWin *window = (ProfWin*)wins_get_muc(roomjid); if (window == NULL) { log_error("Received ban, but no window open for %s.", roomjid); } else { int num = wins_get_num(window); ui_close_win(num); GString *message = g_string_new("Banned from "); g_string_append(message, roomjid); if (actor) { g_string_append(message, " by "); g_string_append(message, actor); } if (reason) { g_string_append(message, ", reason: "); g_string_append(message, reason); } ProfWin *console = wins_get_console(); win_println(console, THEME_TYPING, '!', "<- %s", message->str); g_string_free(message, TRUE); } GList *privwins = wins_get_private_chats(roomjid); GList *curr = privwins; while (curr) { ProfPrivateWin *privwin = curr->data; privwin_room_banned(privwin, actor, reason); curr = g_list_next(curr); } g_list_free(privwins); }
void ui_leave_room(const char *const roomjid) { ProfWin *window = (ProfWin*)wins_get_muc(roomjid); if (window) { int num = wins_get_num(window); ui_close_win(num); } GList *privwins = wins_get_private_chats(roomjid); GList *curr = privwins; while (curr) { ProfPrivateWin *privwin = curr->data; privwin_room_left(privwin); curr = g_list_next(curr); } g_list_free(privwins); }
void ui_room_join(const char *const roomjid, gboolean focus) { ProfWin *window = (ProfWin*)wins_get_muc(roomjid); if (!window) { window = wins_new_muc(roomjid); } char *nick = muc_nick(roomjid); win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "-> You have joined the room as %s", nick); if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { char *role = muc_role_str(roomjid); char *affiliation = muc_affiliation_str(roomjid); if (role) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", role: %s", role); } if (affiliation) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", affiliation: %s", affiliation); } } win_print(window, '!', 0, NULL, NO_DATE, THEME_ROOMINFO, "", ""); if (focus) { ui_focus_win(window); } else { int num = wins_get_num(window); status_bar_active(num); ProfWin *console = wins_get_console(); char *nick = muc_nick(roomjid); win_vprint(console, '!', 0, NULL, 0, THEME_TYPING, "", "-> Autojoined %s as %s (%d).", roomjid, nick, num); } GList *privwins = wins_get_private_chats(roomjid); GList *curr = privwins; while (curr) { ProfPrivateWin *privwin = curr->data; privwin_room_joined(privwin); curr = g_list_next(curr); } g_list_free(privwins); }
void ui_room_destroy(const char *const roomjid) { ProfWin *window = (ProfWin*)wins_get_muc(roomjid); if (window == NULL) { log_error("Received room destroy result, but no window open for %s.", roomjid); } else { int num = wins_get_num(window); ui_close_win(num); cons_show("Room destroyed: %s", roomjid); } GList *privwins = wins_get_private_chats(roomjid); GList *curr = privwins; while (curr) { ProfPrivateWin *privwin = curr->data; privwin_room_destroyed(privwin); curr = g_list_next(curr); } g_list_free(privwins); }
void ui_room_destroyed(const char *const roomjid, const char *const reason, const char *const new_jid, const char *const password) { ProfWin *window = (ProfWin*)wins_get_muc(roomjid); if (window == NULL) { log_error("Received room destroy, but no window open for %s.", roomjid); } else { int num = wins_get_num(window); ui_close_win(num); ProfWin *console = wins_get_console(); if (reason) { win_println(console, THEME_TYPING, '!', "<- Room destroyed: %s, reason: %s", roomjid, reason); } else { win_println(console, THEME_TYPING, '!', "<- Room destroyed: %s", roomjid); } if (new_jid) { if (password) { win_println(console, THEME_TYPING, '!', "Replacement room: %s, password: %s", new_jid, password); } else { win_println(console, THEME_TYPING, '!', "Replacement room: %s", new_jid); } } } GList *privwins = wins_get_private_chats(roomjid); GList *curr = privwins; while (curr) { ProfPrivateWin *privwin = curr->data; privwin_room_destroyed(privwin); curr = g_list_next(curr); } g_list_free(privwins); }