void prof_handle_idle(void) { jabber_conn_status_t status = jabber_get_connection_status(); if (status == JABBER_CONNECTED) { GSList *recipients = ui_get_recipients(); GSList *curr = recipients; while (curr != NULL) { char *recipient = curr->data; if (chat_session_get_recipient_supports(recipient)) { chat_session_no_activity(recipient); if (chat_session_is_gone(recipient) && !chat_session_get_sent(recipient)) { message_send_gone(recipient); } else if (chat_session_is_inactive(recipient) && !chat_session_get_sent(recipient)) { message_send_inactive(recipient); } else if (prefs_get_boolean(PREF_OUTTYPE) && chat_session_is_paused(recipient) && !chat_session_get_sent(recipient)) { message_send_paused(recipient); } } curr = g_slist_next(curr); } if (recipients != NULL) { g_slist_free(recipients); } } }
void message_send(const char * const msg, const char * const recipient) { const char * jid = NULL; if (roster_barejid_from_name(recipient) != NULL) { jid = roster_barejid_from_name(recipient); } else { jid = recipient; } if (prefs_get_boolean(PREF_STATES)) { if (!chat_session_exists(jid)) { chat_session_start(jid, TRUE); } } xmpp_stanza_t *message; xmpp_conn_t * const conn = connection_get_conn(); xmpp_ctx_t * const ctx = connection_get_ctx(); if (prefs_get_boolean(PREF_STATES) && chat_session_get_recipient_supports(jid)) { chat_session_set_active(jid); message = stanza_create_message(ctx, jid, STANZA_TYPE_CHAT, msg, STANZA_NAME_ACTIVE, NULL); } else { message = stanza_create_message(ctx, jid, STANZA_TYPE_CHAT, msg, NULL, NULL); } xmpp_send(conn, message); xmpp_stanza_release(message); }
void prof_handle_activity(void) { win_type_t win_type = ui_current_win_type(); jabber_conn_status_t status = jabber_get_connection_status(); if ((status == JABBER_CONNECTED) && (win_type == WIN_CHAT)) { char *recipient = ui_current_recipient(); if (chat_session_get_recipient_supports(recipient)) { chat_session_set_composing(recipient); if (!chat_session_get_sent(recipient) || chat_session_is_paused(recipient)) { message_send_composing(recipient); } } } }
void ui_prune_wins(void) { jabber_conn_status_t conn_status = jabber_get_connection_status(); gboolean pruned = FALSE; GSList *recipients = wins_get_prune_recipients(); if (recipients != NULL) { pruned = TRUE; } GSList *curr = recipients; while (curr != NULL) { char *recipient = curr->data; if (conn_status == JABBER_CONNECTED) { if (prefs_get_boolean(PREF_STATES)) { // send <gone/> chat state before closing if (chat_session_get_recipient_supports(recipient)) { chat_session_set_gone(recipient); message_send_gone(recipient); chat_session_end(recipient); } } } ProfWin *window = wins_get_by_recipient(recipient); int num = wins_get_num(window); ui_close_win(num); curr = g_slist_next(curr); } if (recipients != NULL) { g_slist_free(recipients); } wins_tidy(); if (pruned) { cons_show("Windows pruned."); } else { cons_show("No prune needed."); } }
void ui_close_connected_win(int index) { win_type_t win_type = ui_win_type(index); if (win_type == WIN_MUC) { char *room_jid = ui_recipient(index); presence_leave_chat_room(room_jid); } else if ((win_type == WIN_CHAT) || (win_type == WIN_PRIVATE)) { if (prefs_get_boolean(PREF_STATES)) { char *recipient = ui_recipient(index); // send <gone/> chat state before closing if (chat_session_get_recipient_supports(recipient)) { chat_session_set_gone(recipient); message_send_gone(recipient); chat_session_end(recipient); } } } }