void ui_switch_win(const int i) { ui_current_page_off(); ProfWin *new_current = wins_get_by_num(i); if (new_current != NULL) { wins_set_current_by_num(i); ui_current_page_off(); new_current->unread = 0; if (i == 1) { title_bar_title(); status_bar_active(1); } else { PContact contact = roster_get_contact(new_current->from); if (contact != NULL) { if (p_contact_name(contact) != NULL) { title_bar_set_recipient(p_contact_name(contact)); } else { title_bar_set_recipient(new_current->from); } } else { title_bar_set_recipient(new_current->from); } title_bar_draw();; status_bar_active(i); } wins_refresh_current(); } }
void handle_subscription(const char *from, jabber_subscr_t type) { switch (type) { case PRESENCE_SUBSCRIBE: /* TODO: auto-subscribe if needed */ cons_show("Received authorization request from %s", from); log_info("Received authorization request from %s", from); ui_print_system_msg_from_recipient(from, "Authorization request, type '/sub allow' to accept or '/sub deny' to reject"); ui_current_page_off(); if (prefs_get_boolean(PREF_NOTIFY_SUB)) { notify_subscription(from); } break; case PRESENCE_SUBSCRIBED: cons_show("Subscription received from %s", from); log_info("Subscription received from %s", from); ui_print_system_msg_from_recipient(from, "Subscribed"); ui_current_page_off(); break; case PRESENCE_UNSUBSCRIBED: cons_show("%s deleted subscription", from); log_info("%s deleted subscription", from); ui_print_system_msg_from_recipient(from, "Unsubscribed"); ui_current_page_off(); break; default: /* unknown type */ break; } }
void handle_incoming_message(char *from, char *message, gboolean priv) { #ifdef HAVE_LIBOTR gboolean was_decrypted = FALSE; char *newmessage; if (!priv) { newmessage = otr_decrypt_message(from, message, &was_decrypted); // internal OTR message if (newmessage == NULL) { return; } } else { newmessage = message; } ui_incoming_msg(from, newmessage, NULL, priv); ui_current_page_off(); if (prefs_get_boolean(PREF_CHLOG) && !priv) { Jid *from_jid = jid_create(from); const char *jid = jabber_get_fulljid(); Jid *jidp = jid_create(jid); if (!was_decrypted || (strcmp(prefs_get_string(PREF_OTR_LOG), "on") == 0)) { chat_log_chat(jidp->barejid, from_jid->barejid, newmessage, PROF_IN_LOG, NULL); } else if (strcmp(prefs_get_string(PREF_OTR_LOG), "redact") == 0) { chat_log_chat(jidp->barejid, from_jid->barejid, "[redacted]", PROF_IN_LOG, NULL); } jid_destroy(jidp); jid_destroy(from_jid); } if (!priv) otr_free_message(newmessage); #else ui_incoming_msg(from, message, NULL, priv); ui_current_page_off(); if (prefs_get_boolean(PREF_CHLOG) && !priv) { Jid *from_jid = jid_create(from); const char *jid = jabber_get_fulljid(); Jid *jidp = jid_create(jid); chat_log_chat(jidp->barejid, from_jid->barejid, message, PROF_IN_LOG, NULL); jid_destroy(jidp); jid_destroy(from_jid); } #endif }
void handle_room_nick_change(const char * const room, const char * const nick) { ui_room_nick_change(room, nick); ui_current_page_off(); }
void handle_room_member_nick_change(const char * const room, const char * const old_nick, const char * const nick) { ui_room_member_nick_change(room, old_nick, nick); ui_current_page_off(); }
void handle_group_remove(const char * const contact, const char * const group) { ui_group_removed(contact, group); ui_current_page_off(); }
void handle_failed_login(void) { cons_show_error("Login failed."); log_info("Login failed"); ui_current_page_off(); }
void handle_room_history(const char * const room_jid, const char * const nick, GTimeVal tv_stamp, const char * const message) { ui_room_history(room_jid, nick, tv_stamp, message); ui_current_page_off(); }
void handle_room_broadcast(const char *const room_jid, const char * const message) { ui_room_broadcast(room_jid, message); ui_current_page_off(); }
void handle_software_version_result(const char * const jid, const char * const presence, const char * const name, const char * const version, const char * const os) { cons_show_software_version(jid, presence, name, version, os); ui_current_page_off(); }
/* * Take a line of input and process it, return TRUE if profanity is to * continue, FALSE otherwise */ gboolean process_input(char *inp) { log_debug("Input recieved: %s", inp); gboolean result = FALSE; g_strstrip(inp); // add line to history if something typed if (strlen(inp) > 0) { cmd_history_append(inp); } // just carry on if no input if (strlen(inp) == 0) { result = TRUE; // habdle command if input starts with a '/' } else if (inp[0] == '/') { char *inp_cpy = strdup(inp); char *command = strtok(inp_cpy, " "); result = cmd_execute(command, inp); free(inp_cpy); // call a default handler if input didn't start with '/' } else { result = cmd_execute_default(inp); } inp_win_reset(); roster_reset_search_attempts(); ui_current_page_off(); return result; }
void handle_room_roster_complete(const char * const room) { muc_set_roster_received(room); GList *roster = muc_get_roster(room); ui_room_roster(room, roster, NULL); ui_current_page_off(); }
void handle_room_member_offline(const char * const room, const char * const nick, const char * const show, const char * const status) { muc_remove_from_roster(room, nick); ui_room_member_offline(room, nick); ui_current_page_off(); }
void handle_room_member_online(const char * const room, const char * const nick, const char * const show, const char * const status, const char * const caps_str) { muc_add_to_roster(room, nick, show, status, caps_str); ui_room_member_online(room, nick, show, status); ui_current_page_off(); }
void handle_lost_connection(void) { cons_show_error("Lost connection."); roster_clear(); muc_clear_invites(); chat_sessions_clear(); ui_disconnected(); ui_current_page_off(); }
void handle_room_member_presence(const char * const room, const char * const nick, const char * const show, const char * const status, const char * const caps_str) { gboolean updated = muc_add_to_roster(room, nick, show, status, caps_str); if (updated) { ui_room_member_presence(room, nick, show, status); ui_current_page_off(); } }
void handle_room_message(const char * const room_jid, const char * const nick, const char * const message) { ui_room_message(room_jid, nick, message); ui_current_page_off(); if (prefs_get_boolean(PREF_GRLOG)) { Jid *jid = jid_create(jabber_get_fulljid()); groupchat_log_chat(jid->barejid, room_jid, nick, message); jid_destroy(jid); } }
void handle_room_invite(jabber_invite_t invite_type, const char * const invitor, const char * const room, const char * const reason) { Jid *room_jid = jid_create(room); if (!muc_room_is_active(room_jid) && !muc_invites_include(room)) { cons_show_room_invite(invitor, room, reason); muc_add_invite(room); ui_current_page_off(); } jid_destroy(room_jid); }
void handle_delayed_message(char *from, char *message, GTimeVal tv_stamp, gboolean priv) { ui_incoming_msg(from, message, &tv_stamp, priv); ui_current_page_off(); if (prefs_get_boolean(PREF_CHLOG) && !priv) { Jid *from_jid = jid_create(from); const char *jid = jabber_get_fulljid(); Jid *jidp = jid_create(jid); chat_log_chat(jidp->barejid, from_jid->barejid, message, PROF_IN_LOG, &tv_stamp); jid_destroy(jidp); jid_destroy(from_jid); } }
void handle_contact_online(char *contact, Resource *resource, GDateTime *last_activity) { gboolean updated = roster_update_presence(contact, resource, last_activity); if (updated && prefs_get_boolean(PREF_STATUSES)) { PContact result = roster_get_contact(contact); if (p_contact_subscription(result) != NULL) { if (strcmp(p_contact_subscription(result), "none") != 0) { const char *show = string_from_resource_presence(resource->presence); ui_contact_online(contact, resource->name, show, resource->status, last_activity); ui_current_page_off(); } } } }
void handle_contact_offline(char *contact, char *resource, char *status) { gboolean updated = roster_contact_offline(contact, resource, status); if (resource != NULL && updated && prefs_get_boolean(PREF_STATUSES)) { Jid *jid = jid_create_from_bare_and_resource(contact, resource); PContact result = roster_get_contact(contact); if (p_contact_subscription(result) != NULL) { if (strcmp(p_contact_subscription(result), "none") != 0) { ui_contact_offline(jid->fulljid, "offline", status); ui_current_page_off(); } } jid_destroy(jid); } }
void handle_login_account_success(char *account_name) { ProfAccount *account = accounts_get_account(account_name); #ifdef HAVE_LIBOTR otr_on_connect(account); #endif resource_presence_t resource_presence = accounts_get_login_presence(account->name); contact_presence_t contact_presence = contact_presence_from_resource_presence(resource_presence); cons_show_login_success(account); title_bar_set_presence(contact_presence); log_info("%s logged in successfully", account->jid); ui_current_page_off(); status_bar_print_message(account->jid); status_bar_refresh(); accounts_free_account(account); }
void cons_debug(const char * const msg, ...) { if (strcmp(PACKAGE_STATUS, "development") == 0) { va_list arg; va_start(arg, msg); GString *fmt_msg = g_string_new(NULL); g_string_vprintf(fmt_msg, msg, arg); win_print_time(console, '-'); wprintw(console->win, "%s\n", fmt_msg->str); g_string_free(fmt_msg, TRUE); va_end(arg); ui_console_dirty(); cons_alert(); ui_current_page_off(); ui_refresh(); } }
static void _otr_keygen(ProfAccount *account) { if (data_loaded) { cons_show("OTR key already generated."); return; } jid = strdup(account->jid); log_info("Generating OTR key for %s", jid); jid = strdup(account->jid); gchar *data_home = xdg_get_data_home(); gchar *account_dir = str_replace(jid, "@", "_at_"); GString *basedir = g_string_new(data_home); g_string_append(basedir, "/profanity/otr/"); g_string_append(basedir, account_dir); g_string_append(basedir, "/"); free(account_dir); if (!mkdir_recursive(basedir->str)) { log_error("Could not create %s for account %s.", basedir->str, jid); cons_show_error("Could not create %s for account %s.", basedir->str, jid); g_string_free(basedir, TRUE); return; } gcry_error_t err = 0; GString *keysfilename = g_string_new(basedir->str); g_string_append(keysfilename, "keys.txt"); log_debug("Generating private key file %s for %s", keysfilename->str, jid); cons_show("Generating private key, this may take some time."); cons_show("Moving the mouse randomly around the screen may speed up the process!"); ui_current_page_off(); ui_update_screen(); err = otrl_privkey_generate(user_state, keysfilename->str, account->jid, "xmpp"); if (!err == GPG_ERR_NO_ERROR) { g_string_free(basedir, TRUE); g_string_free(keysfilename, TRUE); log_error("Failed to generate private key"); cons_show_error("Failed to generate private key"); return; } log_info("Private key generated"); cons_show(""); cons_show("Private key generation complete."); GString *fpsfilename = g_string_new(basedir->str); g_string_append(fpsfilename, "fingerprints.txt"); log_debug("Generating fingerprints file %s for %s", fpsfilename->str, jid); err = otrl_privkey_write_fingerprints(user_state, fpsfilename->str); if (!err == GPG_ERR_NO_ERROR) { g_string_free(basedir, TRUE); g_string_free(keysfilename, TRUE); log_error("Failed to create fingerprints file"); cons_show_error("Failed to create fingerprints file"); return; } log_info("Fingerprints file created"); err = otrl_privkey_read(user_state, keysfilename->str); if (!err == GPG_ERR_NO_ERROR) { g_string_free(basedir, TRUE); g_string_free(keysfilename, TRUE); log_error("Failed to load private key"); data_loaded = FALSE; return; } err = otrl_privkey_read_fingerprints(user_state, fpsfilename->str, NULL, NULL); if (!err == GPG_ERR_NO_ERROR) { g_string_free(basedir, TRUE); g_string_free(keysfilename, TRUE); log_error("Failed to load fingerprints"); data_loaded = FALSE; return; } data_loaded = TRUE; g_string_free(basedir, TRUE); g_string_free(keysfilename, TRUE); g_string_free(fpsfilename, TRUE); return; }
void handle_roster_remove(const char * const barejid) { ui_roster_remove(barejid); ui_current_page_off(); }
void handle_disco_info(const char *from, GSList *identities, GSList *features) { cons_show_disco_info(from, identities, features); ui_current_page_off(); }
void handle_gone(const char * const from) { ui_recipient_gone(from); ui_current_page_off(); }
void handle_typing(char *from) { ui_contact_typing(from); ui_current_page_off(); }
void handle_duck_result(const char * const result) { ui_duck_result(result); ui_current_page_off(); }
void handle_roster_add(const char * const barejid, const char * const name) { ui_roster_add(barejid, name); ui_current_page_off(); }