1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-06-23 21:45:30 +00:00

Handling commands after /disconnect

This commit is contained in:
James Booth 2012-11-19 23:15:42 +00:00
parent 346ed2a8e8
commit 118d97cd90
7 changed files with 97 additions and 18 deletions

View File

@ -39,6 +39,7 @@
#include "parser.h"
#include "preferences.h"
#include "prof_autocomplete.h"
#include "profanity.h"
#include "tinyurl.h"
#include "ui.h"
@ -728,20 +729,30 @@ gboolean
cmd_execute_default(const char * const inp)
{
if (win_in_groupchat()) {
char *recipient = win_get_recipient();
jabber_send_groupchat(inp, recipient);
free(recipient);
} else if (win_in_chat() || win_in_private_chat()) {
char *recipient = win_get_recipient();
jabber_send(inp, recipient);
if (prefs_get_chlog()) {
const char *jid = jabber_get_jid();
chat_log_chat(jid, recipient, inp, OUT, NULL);
jabber_conn_status_t status = jabber_get_connection_status();
if (status != JABBER_CONNECTED) {
win_show("You are not currently connected.");
} else {
char *recipient = win_get_recipient();
jabber_send_groupchat(inp, recipient);
free(recipient);
}
} else if (win_in_chat() || win_in_private_chat()) {
jabber_conn_status_t status = jabber_get_connection_status();
if (status != JABBER_CONNECTED) {
win_show("You are not currently connected.");
} else {
char *recipient = win_get_recipient();
jabber_send(inp, recipient);
win_show_outgoing_msg("me", recipient, inp);
free(recipient);
if (prefs_get_chlog()) {
const char *jid = jabber_get_jid();
chat_log_chat(jid, recipient, inp, OUT, NULL);
}
win_show_outgoing_msg("me", recipient, inp);
free(recipient);
}
} else {
cons_bad_command(inp);
}

View File

@ -57,6 +57,7 @@
#include "history.h"
#include "log.h"
#include "preferences.h"
#include "profanity.h"
#include "ui.h"
static WINDOW *inp_win;
@ -145,11 +146,11 @@ inp_get_char(int *ch, char *input, int *size)
if (prefs_get_states()) {
if (*ch == ERR) {
win_no_activity();
prof_handle_idle();
}
if (prefs_get_outtype() && (*ch != ERR) && !in_command
&& _printable(*ch)) {
win_activity();
prof_handle_activity();
}
}

View File

@ -29,6 +29,7 @@
#include <glib.h>
#include "chat_log.h"
#include "chat_session.h"
#include "command.h"
#include "common.h"
#include "contact.h"
@ -220,8 +221,14 @@ prof_handle_disconnect(const char * const jid)
{
jabber_disconnect();
contact_list_clear();
chat_sessions_clear();
jabber_restart();
win_disconnected();
title_bar_set_status(PRESENCE_OFFLINE);
status_bar_clear_message();
status_bar_refresh();
cons_show("%s logged out successfully.", jid);
win_page_off();
}
void
@ -348,6 +355,24 @@ prof_handle_room_nick_change(const char * const room,
win_page_off();
}
void
prof_handle_idle(void)
{
jabber_conn_status_t status = jabber_get_connection_status();
if (status == JABBER_CONNECTED) {
win_no_activity();
}
}
void
prof_handle_activity(void)
{
jabber_conn_status_t status = jabber_get_connection_status();
if (status == JABBER_CONNECTED) {
win_activity();
}
}
static void
_create_config_directory(void)
{

View File

@ -62,5 +62,7 @@ void prof_handle_room_nick_change(const char * const room,
const char * const nick);
void prof_handle_room_broadcast(const char *const room_jid,
const char * const message);
void prof_handle_idle(void);
void prof_handle_activity(void);
#endif

View File

@ -219,6 +219,33 @@ status_bar_clear(void)
dirty = TRUE;
}
void
status_bar_clear_message(void)
{
if (message != NULL) {
free(message);
message = NULL;
}
wclear(status_bar);
int cols = getmaxx(stdscr);
wattron(status_bar, COLOUR_BAR_DRAW);
mvwprintw(status_bar, 0, cols - 29, _active);
wattroff(status_bar, COLOUR_BAR_DRAW);
int i;
for(i = 0; i < 9; i++) {
if (is_new[i])
status_bar_new(i+1);
else if (is_active[i])
status_bar_active(i+1);
}
dirty = TRUE;
}
static void
_status_bar_update_time(void)
{

View File

@ -160,6 +160,7 @@ void cons_check_version(gboolean not_available_msg);
void status_bar_refresh(void);
void status_bar_resize(void);
void status_bar_clear(void);
void status_bar_clear_message(void);
void status_bar_get_password(void);
void status_bar_print_message(const char * const msg);
void status_bar_inactive(const int win);

View File

@ -243,26 +243,38 @@ win_show_wins(void)
case WIN_CHAT:
wprintw(_cons_win, "%d: chat %s", i + 1, _wins[i].from);
PContact contact = contact_list_get_contact(_wins[i].from);
if (p_contact_name(contact) != NULL) {
wprintw(_cons_win, " (%s)", p_contact_name(contact));
if (contact != NULL) {
if (p_contact_name(contact) != NULL) {
wprintw(_cons_win, " (%s)", p_contact_name(contact));
}
wprintw(_cons_win, " - %s", p_contact_presence(contact));
}
wprintw(_cons_win, " - %s", p_contact_presence(contact));
if (_wins[i].unread > 0) {
wprintw(_cons_win, ", %d unread", _wins[i].unread);
}
break;
case WIN_PRIVATE:
wprintw(_cons_win, "%d: private %s", i + 1, _wins[i].from);
if (_wins[i].unread > 0) {
wprintw(_cons_win, ", %d unread", _wins[i].unread);
}
break;
case WIN_MUC:
wprintw(_cons_win, "%d: room %s", i + 1, _wins[i].from);
if (_wins[i].unread > 0) {
wprintw(_cons_win, ", %d unread", _wins[i].unread);
}
break;
default:
break;
}
@ -976,7 +988,7 @@ win_disconnected(void)
// show message in all active chats
for (i = 1; i < NUM_WINS; i++) {
if (strcmp(_wins[i].from, "") != 0) {
WINDOW *win = _wins[_curr_prof_win].win;
WINDOW *win = _wins[i].win;
_win_show_time(win);
wattron(win, COLOUR_ERR);
wprintw(win, "%s\n", "Lost connection.");