void ui_print_system_msg_from_recipient(const char * const from, const char *message) { int num = 0; char from_cpy[strlen(from) + 1]; char *bare_jid; if (from == NULL || message == NULL) return; strcpy(from_cpy, from); bare_jid = strtok(from_cpy, "/"); ProfWin *window = wins_get_by_recipient(bare_jid); if (window == NULL) { window = wins_new(bare_jid, WIN_CHAT); if (window != NULL) { num = wins_get_num(window); status_bar_active(num); } else { num = 0; window = wins_get_console(); status_bar_active(1); } } win_print_time(window, '-'); wprintw(window->win, "*%s %s\n", bare_jid, message); // this is the current window if (wins_is_current(window)) { wins_refresh_current(); } }
void ui_handle_room_config_submit_result(const char *const roomjid) { if (roomjid) { ProfWin *form_window = NULL; ProfWin *muc_window = (ProfWin*)wins_get_muc(roomjid); GString *form_recipient = g_string_new(roomjid); g_string_append(form_recipient, " config"); form_window = (ProfWin*) wins_get_muc_conf(form_recipient->str); g_string_free(form_recipient, TRUE); if (form_window) { int num = wins_get_num(form_window); wins_close_by_num(num); } if (muc_window) { ui_focus_win((ProfWin*)muc_window); win_println(muc_window, THEME_ROOMINFO, '!', "Room configuration successful"); } else { ProfWin *console = wins_get_console(); ui_focus_win(console); cons_show("Room configuration successful: %s", roomjid); } } else { cons_show("Room configuration successful"); } }
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_hide_roster(void) { ProfWin *window = wins_get_console(); if (window && win_has_active_subwin(window)) { wins_hide_subwin(window); } }
void ui_show_roster(void) { ProfWin *window = wins_get_console(); if (window && !win_has_active_subwin(window)) { wins_show_subwin(window); rosterwin_roster(); } }
void rosterwin_roster(void) { ProfWin *console = wins_get_console(); if (console) { ProfLayoutSplit *layout = (ProfLayoutSplit*)console->layout; assert(layout->memcheck == LAYOUT_SPLIT_MEMCHECK); char *by = prefs_get_string(PREF_ROSTER_BY); if (g_strcmp0(by, "presence") == 0) { werase(layout->subwin); _rosterwin_contacts_by_presence(layout, "chat", " -Available for chat"); _rosterwin_contacts_by_presence(layout, "online", " -Online"); _rosterwin_contacts_by_presence(layout, "away", " -Away"); _rosterwin_contacts_by_presence(layout, "xa", " -Extended Away"); _rosterwin_contacts_by_presence(layout, "dnd", " -Do not disturb"); if (prefs_get_boolean(PREF_ROSTER_OFFLINE)) { _rosterwin_contacts_by_presence(layout, "offline", " -Offline"); } } else if (g_strcmp0(by, "group") == 0) { werase(layout->subwin); GSList *groups = roster_get_groups(); GSList *curr_group = groups; while (curr_group) { _rosterwin_contacts_by_group(layout, curr_group->data); curr_group = g_slist_next(curr_group); } g_slist_free_full(groups, free); _rosterwin_contacts_by_no_group(layout); } else { GSList *contacts = roster_get_contacts(); if (contacts) { werase(layout->subwin); wattron(layout->subwin, theme_attrs(THEME_ROSTER_HEADER)); win_printline_nowrap(layout->subwin, " -Roster"); wattroff(layout->subwin, theme_attrs(THEME_ROSTER_HEADER)); GSList *curr_contact = contacts; while (curr_contact) { PContact contact = curr_contact->data; _rosterwin_contact(layout, contact); curr_contact = g_slist_next(curr_contact); } } g_slist_free(contacts); } free(by); } }
void ui_show_software_version(const char *const jid, const char *const presence, const char *const name, const char *const version, const char *const os) { Jid *jidp = jid_create(jid); ProfWin *window = NULL; ProfWin *chatwin = (ProfWin*)wins_get_chat(jidp->barejid); ProfWin *mucwin = (ProfWin*)wins_get_muc(jidp->barejid); ProfWin *privwin = (ProfWin*)wins_get_private(jidp->fulljid); ProfWin *console = wins_get_console(); jid_destroy(jidp); if (chatwin) { if (wins_is_current(chatwin)) { window = chatwin; } else { window = console; } } else if (privwin) { if (wins_is_current(privwin)) { window = privwin; } else { window = console; } } else if (mucwin) { if (wins_is_current(mucwin)) { window = mucwin; } else { window = console; } } else { window = console; } if (name || version || os) { win_println(window, THEME_DEFAULT, '-', ""); theme_item_t presence_colour = theme_main_presence_attrs(presence); win_print(window, presence_colour, '-', "%s", jid); win_appendln(window, THEME_DEFAULT, ":"); } if (name) { win_println(window, THEME_DEFAULT, '-', "Name : %s", name); } if (version) { win_println(window, THEME_DEFAULT, '-', "Version : %s", version); } if (os) { win_println(window, THEME_DEFAULT, '-', "OS : %s", os); } }
int api_cons_show_themed(const char *const group, const char *const key, const char *const def, const char *const message) { if (message == NULL) { log_warning("%s", "prof_cons_show_themed failed, message is NULL"); return 0; } char *parsed = str_replace(message, "\r\n", "\n"); theme_item_t themeitem = plugin_themes_get(group, key, def); ProfWin *console = wins_get_console(); win_println(console, themeitem, '-', "%s", parsed); free(parsed); return 1; }
void ui_handle_software_version_error(const char *const roomjid, const char *const message) { GString *message_str = g_string_new(""); ProfWin *window = wins_get_console(); g_string_printf(message_str, "Could not get software version"); if (message) { g_string_append(message_str, ": "); g_string_append(message_str, message); } win_println(window, THEME_ERROR, '-', "%s", message_str->str); g_string_free(message_str, TRUE); }
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_contact_offline(const char * const from, const char * const show, const char * const status) { Jid *jidp = jid_create(from); PContact contact = roster_get_contact(jidp->barejid); GString *display_str = g_string_new(""); // use nickname if exists if (p_contact_name(contact) != NULL) { g_string_append(display_str, p_contact_name(contact)); } else { g_string_append(display_str, jidp->barejid); } // add resource if not default provided by profanity if (strcmp(jidp->resourcepart, "__prof_default") != 0) { g_string_append(display_str, " ("); g_string_append(display_str, jidp->resourcepart); g_string_append(display_str, ")"); } ProfWin *console = wins_get_console(); _show_status_string(console, display_str->str, show, status, NULL, "--", "offline"); ProfWin *window = wins_get_by_recipient(jidp->barejid); if (window != NULL) { _show_status_string(window, display_str->str, show, status, NULL, "--", "offline"); } jid_destroy(jidp); g_string_free(display_str, TRUE); if (wins_is_current(console)) { wins_refresh_current(); } else if ((window != NULL) && (wins_is_current(window))) { wins_refresh_current(); } }
void ui_contact_online(const char * const barejid, const char * const resource, const char * const show, const char * const status, GDateTime *last_activity) { Jid *jid = jid_create_from_bare_and_resource(barejid, resource); PContact contact = roster_get_contact(barejid); GString *display_str = g_string_new(""); // use nickname if exists if (p_contact_name(contact) != NULL) { g_string_append(display_str, p_contact_name(contact)); } else { g_string_append(display_str, barejid); } // add resource if not default provided by profanity if (strcmp(jid->resourcepart, "__prof_default") != 0) { g_string_append(display_str, " ("); g_string_append(display_str, jid->resourcepart); g_string_append(display_str, ")"); } ProfWin *console = wins_get_console(); _show_status_string(console, display_str->str, show, status, last_activity, "++", "online"); ProfWin *window = wins_get_by_recipient(barejid); if (window != NULL) { _show_status_string(window, display_str->str, show, status, last_activity, "++", "online"); } jid_destroy(jid); g_string_free(display_str, TRUE); if (wins_is_current(console)) { wins_refresh_current(); } else if ((window != NULL) && (wins_is_current(window))) { wins_refresh_current(); } }
void ui_print_system_msg_from_recipient(const char *const barejid, const char *message) { if (barejid == NULL || message == NULL) return; ProfWin *window = (ProfWin*)wins_get_chat(barejid); if (window == NULL) { int num = 0; window = wins_new_chat(barejid); if (window) { num = wins_get_num(window); status_bar_active(num); } else { num = 0; window = wins_get_console(); status_bar_active(1); } } win_println(window, THEME_DEFAULT, '-', "*%s %s", barejid, message); }
void ui_handle_room_configuration_form_error(const char *const roomjid, const char *const message) { ProfWin *window = NULL; GString *message_str = g_string_new(""); if (roomjid) { window = (ProfWin*)wins_get_muc(roomjid); g_string_printf(message_str, "Could not get room configuration for %s", roomjid); } else { window = wins_get_console(); g_string_printf(message_str, "Could not get room configuration"); } if (message) { g_string_append(message_str, ": "); g_string_append(message_str, message); } win_println(window, THEME_ERROR, '-', "%s", message_str->str); g_string_free(message_str, TRUE); }
void ui_handle_room_config_submit_result_error(const char *const roomjid, const char *const message) { ProfWin *console = wins_get_console(); if (roomjid) { ProfWin *muc_window = NULL; ProfWin *form_window = NULL; muc_window = (ProfWin*)wins_get_muc(roomjid); GString *form_recipient = g_string_new(roomjid); g_string_append(form_recipient, " config"); form_window = (ProfWin*) wins_get_muc_conf(form_recipient->str); g_string_free(form_recipient, TRUE); if (form_window) { if (message) { win_println(form_window, THEME_ERROR, '!', "Configuration error: %s", message); } else { win_println(form_window, THEME_ERROR, '!', "Configuration error"); } } else if (muc_window) { if (message) { win_println(muc_window, THEME_ERROR, '!', "Configuration error: %s", message); } else { win_println(muc_window, THEME_ERROR, '!', "Configuration error"); } } else { if (message) { win_println(console, THEME_ERROR, '!', "Configuration error for %s: %s", roomjid, message); } else { win_println(console, THEME_ERROR, '!', "Configuration error for %s", roomjid); } } } else { win_println(console, THEME_ERROR, '!', "Configuration error"); } }
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); }