1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Messages not lost when run out of windows

Incoming messages are shown in the console when all windows are full
This commit is contained in:
James Booth 2012-11-24 23:58:10 +00:00
parent a20c0569a6
commit 66d3e6ee02
2 changed files with 92 additions and 53 deletions

View File

@ -144,7 +144,7 @@ status_bar_active(const int win)
int cols = getmaxx(stdscr); int cols = getmaxx(stdscr);
wattron(status_bar, COLOUR_STATUS_ACTIVE); wattron(status_bar, COLOUR_STATUS_ACTIVE);
if (win < 10) if (win+1 < 10)
mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1); mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1);
else else
mvwprintw(status_bar, 0, cols - 31 + active_pos, "0"); mvwprintw(status_bar, 0, cols - 31 + active_pos, "0");
@ -165,7 +165,7 @@ status_bar_new(const int win)
wattron(status_bar, COLOUR_STATUS_NEW); wattron(status_bar, COLOUR_STATUS_NEW);
wattron(status_bar, A_BLINK); wattron(status_bar, A_BLINK);
if (win < 10) if (win+1 < 10)
mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1); mvwprintw(status_bar, 0, cols - 31 + active_pos, "%d", win+1);
else else
mvwprintw(status_bar, 0, cols - 31 + active_pos, "0"); mvwprintw(status_bar, 0, cols - 31 + active_pos, "0");

View File

@ -377,70 +377,106 @@ win_show_incomming_msg(const char * const from, const char * const message,
if (win_index == NUM_WINS) if (win_index == NUM_WINS)
win_index = _new_prof_win(from, win_type); win_index = _new_prof_win(from, win_type);
WINDOW *win = windows[win_index]->win; // no spare windows left
if (win_index == 0) {
// currently viewing chat window with sender
if (win_index == current_index) {
if (tv_stamp == NULL) { if (tv_stamp == NULL) {
_win_show_time(win); _win_show_time(console->win);
} else { } else {
GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
wattron(win, COLOUR_TIME); wattron(console->win, COLOUR_TIME);
wprintw(win, "%s - ", date_fmt); wprintw(console->win, "%s - ", date_fmt);
wattroff(win, COLOUR_TIME); wattroff(console->win, COLOUR_TIME);
g_date_time_unref(time); g_date_time_unref(time);
g_free(date_fmt); g_free(date_fmt);
} }
if (strncmp(message, "/me ", 4) == 0) { if (strncmp(message, "/me ", 4) == 0) {
wattron(win, COLOUR_THEM); wattron(console->win, COLOUR_THEM);
wprintw(win, "*%s ", from); wprintw(console->win, "*%s ", from);
wprintw(win, message + 4); wprintw(console->win, message + 4);
wprintw(win, "\n"); wprintw(console->win, "\n");
wattroff(win, COLOUR_THEM); wattroff(console->win, COLOUR_THEM);
} else { } else {
_win_show_user(win, from, 1); _win_show_user(console->win, from, 1);
_win_show_message(win, message); _win_show_message(console->win, message);
} }
title_bar_set_typing(FALSE);
title_bar_draw();
status_bar_active(win_index);
dirty = TRUE;
// not currently viewing chat window with sender cons_bad_show("Windows all used, close a window to respond.");
if (current_index == 0) {
dirty = TRUE;
} else {
status_bar_new(0);
}
// window found or created
} else { } else {
status_bar_new(win_index); WINDOW *win = windows[win_index]->win;
_cons_show_incoming_message(from, win_index);
if (prefs_get_flash())
flash();
windows[win_index]->unread++; // currently viewing chat window with sender
if (prefs_get_chlog() && prefs_get_history()) { if (win_index == current_index) {
_win_show_history(win, win_index, from); if (tv_stamp == NULL) {
} _win_show_time(win);
} else {
GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
wattron(win, COLOUR_TIME);
wprintw(win, "%s - ", date_fmt);
wattroff(win, COLOUR_TIME);
g_date_time_unref(time);
g_free(date_fmt);
}
if (tv_stamp == NULL) { if (strncmp(message, "/me ", 4) == 0) {
_win_show_time(win); wattron(win, COLOUR_THEM);
wprintw(win, "*%s ", from);
wprintw(win, message + 4);
wprintw(win, "\n");
wattroff(win, COLOUR_THEM);
} else {
_win_show_user(win, from, 1);
_win_show_message(win, message);
}
title_bar_set_typing(FALSE);
title_bar_draw();
status_bar_active(win_index);
dirty = TRUE;
// not currently viewing chat window with sender
} else { } else {
GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp); status_bar_new(win_index);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S"); _cons_show_incoming_message(from, win_index);
wattron(win, COLOUR_TIME); if (prefs_get_flash())
wprintw(win, "%s - ", date_fmt); flash();
wattroff(win, COLOUR_TIME);
g_date_time_unref(time);
g_free(date_fmt);
}
if (strncmp(message, "/me ", 4) == 0) { windows[win_index]->unread++;
wattron(win, COLOUR_THEM); if (prefs_get_chlog() && prefs_get_history()) {
wprintw(win, "*%s ", from); _win_show_history(win, win_index, from);
wprintw(win, message + 4); }
wprintw(win, "\n");
wattroff(win, COLOUR_THEM); if (tv_stamp == NULL) {
} else { _win_show_time(win);
_win_show_user(win, from, 1); } else {
_win_show_message(win, message); GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
wattron(win, COLOUR_TIME);
wprintw(win, "%s - ", date_fmt);
wattroff(win, COLOUR_TIME);
g_date_time_unref(time);
g_free(date_fmt);
}
if (strncmp(message, "/me ", 4) == 0) {
wattron(win, COLOUR_THEM);
wprintw(win, "*%s ", from);
wprintw(win, message + 4);
wprintw(win, "\n");
wattroff(win, COLOUR_THEM);
} else {
_win_show_user(win, from, 1);
_win_show_message(win, message);
}
} }
} }
@ -1497,10 +1533,13 @@ _new_prof_win(const char * const contact, win_type_t type)
} }
} }
int cols = getmaxx(stdscr); if (i != NUM_WINS) {
windows[i] = window_create(contact, cols, type); int cols = getmaxx(stdscr);
windows[i] = window_create(contact, cols, type);
return i; return i;
} else {
return 0;
}
} }
void void