1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -05:00

ProfWin->print_incoming_message added

This commit is contained in:
James Booth 2013-10-06 19:11:51 +01:00
parent 78ee448a8d
commit 47c96ed4e7
3 changed files with 54 additions and 22 deletions

View File

@ -279,28 +279,7 @@ ui_incoming_msg(const char * const from, const char * const message,
// currently viewing chat window with sender
if (wins_is_current(window)) {
if (tv_stamp == NULL) {
window->print_time(window, '-');
} else {
GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
wattron(window->win, COLOUR_TIME);
wprintw(window->win, "%s - ", date_fmt);
wattroff(window->win, COLOUR_TIME);
g_date_time_unref(time);
g_free(date_fmt);
}
if (strncmp(message, "/me ", 4) == 0) {
wattron(window->win, COLOUR_THEM);
wprintw(window->win, "*%s ", display_from);
waddstr(window->win, message + 4);
wprintw(window->win, "\n");
wattroff(window->win, COLOUR_THEM);
} else {
_win_show_user(window->win, display_from, 1);
_win_show_message(window->win, message);
}
window->print_incoming_message(window, tv_stamp, display_from, message);
title_bar_set_typing(FALSE);
title_bar_draw();
status_bar_active(num);

View File

@ -42,6 +42,8 @@ static void _win_print_time(ProfWin *self, char show_char);
static void _win_presence_colour_on(ProfWin *self, const char * const presence);
static void _win_presence_colour_off(ProfWin *self, const char * const presence);
static void _win_show_contact(ProfWin *self, PContact contact);
static void _print_incoming_message(ProfWin *self, GTimeVal *tv_stamp,
const char * const from, const char * const message);
ProfWin*
win_create(const char * const title, int cols, win_type_t type)
@ -65,11 +67,29 @@ win_create(const char * const title, int cols, win_type_t type)
switch (new_win->type)
{
case WIN_CONSOLE:
new_win->handle_error_message = _default_handle_error_message;
new_win->print_incoming_message = NULL;
break;
case WIN_CHAT:
new_win->handle_error_message = _default_handle_error_message;
new_win->print_incoming_message = _print_incoming_message;
break;
case WIN_MUC:
new_win->handle_error_message = muc_handle_error_message;
new_win->print_incoming_message = NULL;
break;
case WIN_PRIVATE:
new_win->handle_error_message = _default_handle_error_message;
new_win->print_incoming_message = _print_incoming_message;
break;
case WIN_DUCK:
new_win->handle_error_message = _default_handle_error_message;
new_win->print_incoming_message = NULL;
break;
default:
new_win->handle_error_message = _default_handle_error_message;
new_win->print_incoming_message = NULL;
break;
}
@ -213,3 +233,34 @@ _default_handle_error_message(ProfWin *self, const char * const from,
{
return FALSE;
}
static void
_print_incoming_message(ProfWin *self, GTimeVal *tv_stamp,
const char * const from, const char * const message)
{
if (tv_stamp == NULL) {
self->print_time(self, '-');
} else {
GDateTime *time = g_date_time_new_from_timeval_utc(tv_stamp);
gchar *date_fmt = g_date_time_format(time, "%H:%M:%S");
wattron(self->win, COLOUR_TIME);
wprintw(self->win, "%s - ", date_fmt);
wattroff(self->win, COLOUR_TIME);
g_date_time_unref(time);
g_free(date_fmt);
}
if (strncmp(message, "/me ", 4) == 0) {
wattron(self->win, COLOUR_THEM);
wprintw(self->win, "*%s ", from);
waddstr(self->win, message + 4);
wprintw(self->win, "\n");
wattroff(self->win, COLOUR_THEM);
} else {
wattron(self->win, COLOUR_THEM);
wprintw(self->win, "%s: ", from);
wattroff(self->win, COLOUR_THEM);
waddstr(self->win, message);
wprintw(self->win, "\n");
}
}

View File

@ -61,6 +61,8 @@ typedef struct prof_win_t {
void (*show_contact)(struct prof_win_t *self, PContact contact);
gboolean (*handle_error_message)(struct prof_win_t *self,
const char * const from, const char * const err_msg);
void (*print_incoming_message)(struct prof_win_t *self, GTimeVal *tv_stamp,
const char * const from, const char * const message);
} ProfWin;
ProfWin* win_create(const char * const title, int cols, win_type_t type);