void privwin_incoming_msg(ProfPrivateWin *privatewin, const char *const message, GDateTime *timestamp) { assert(privatewin != NULL); ProfWin *window = (ProfWin*) privatewin; int num = wins_get_num(window); char *display_from = get_nick_from_full_jid(privatewin->fulljid); // currently viewing chat window with sender if (wins_is_current(window)) { win_print_incoming_message(window, timestamp, display_from, message, PROF_MSG_PLAIN); title_bar_set_typing(FALSE); status_bar_active(num); // not currently viewing chat window with sender } else { privatewin->unread++; status_bar_new(num); cons_show_incoming_message(display_from, num); win_print_incoming_message(window, timestamp, display_from, message, PROF_MSG_PLAIN); if (prefs_get_boolean(PREF_FLASH)) { flash(); } } if (prefs_get_boolean(PREF_BEEP)) { beep(); } if (prefs_get_boolean(PREF_NOTIFY_MESSAGE)) { notify_message(window, display_from, message); } free(display_from); }
void mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message) { assert(mucwin != NULL); ProfWin *window = (ProfWin*)mucwin; int num = wins_get_num(window); char *my_nick = muc_nick(mucwin->roomjid); if (g_strcmp0(nick, my_nick) != 0) { if (g_strrstr(message, my_nick)) { win_print(window, '-', 0, NULL, NO_ME, THEME_ROOMMENTION, nick, message); } else { win_print(window, '-', 0, NULL, NO_ME, THEME_TEXT_THEM, nick, message); } } else { win_print(window, '-', 0, NULL, 0, THEME_TEXT_ME, nick, message); } // currently in groupchat window if (wins_is_current(window)) { status_bar_active(num); // not currently on groupchat window } else { status_bar_new(num); cons_show_incoming_message(nick, num); if (prefs_get_boolean(PREF_FLASH) && (strcmp(nick, my_nick) != 0)) { flash(); } mucwin->unread++; } int ui_index = num; if (ui_index == 10) { ui_index = 0; } // don't notify self messages if (strcmp(nick, my_nick) == 0) { return; } if (prefs_get_boolean(PREF_BEEP)) { beep(); } gboolean notify = FALSE; char *room_setting = prefs_get_string(PREF_NOTIFY_ROOM); if (g_strcmp0(room_setting, "on") == 0) { notify = TRUE; } if (g_strcmp0(room_setting, "mention") == 0) { char *message_lower = g_utf8_strdown(message, -1); char *nick_lower = g_utf8_strdown(nick, -1); if (g_strrstr(message_lower, nick_lower)) { notify = TRUE; } g_free(message_lower); g_free(nick_lower); } prefs_free_string(room_setting); if (notify) { gboolean is_current = wins_is_current(window); if ( !is_current || (is_current && prefs_get_boolean(PREF_NOTIFY_ROOM_CURRENT)) ) { Jid *jidp = jid_create(mucwin->roomjid); if (prefs_get_boolean(PREF_NOTIFY_ROOM_TEXT)) { notify_room_message(nick, jidp->localpart, ui_index, message); } else { notify_room_message(nick, jidp->localpart, ui_index, NULL); } jid_destroy(jidp); } } }
void ui_incoming_msg(const char * const from, const char * const message, GTimeVal *tv_stamp, gboolean priv) { gboolean win_created = FALSE; char *display_from = NULL; win_type_t win_type; if (priv) { win_type = WIN_PRIVATE; display_from = get_nick_from_full_jid(from); } else { win_type = WIN_CHAT; PContact contact = roster_get_contact(from); if (contact != NULL) { if (p_contact_name(contact) != NULL) { display_from = strdup(p_contact_name(contact)); } else { display_from = strdup(from); } } else { display_from = strdup(from); } } ProfWin *window = wins_get_by_recipient(from); if (window == NULL) { window = wins_new(from, win_type); win_created = TRUE; } int num = wins_get_num(window); // currently viewing chat window with sender if (wins_is_current(window)) { if (tv_stamp == NULL) { win_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); } title_bar_set_typing(FALSE); title_bar_draw(); status_bar_active(num); wins_refresh_current(); // not currently viewing chat window with sender } else { status_bar_new(num); cons_show_incoming_message(display_from, num); if (prefs_get_boolean(PREF_FLASH)) flash(); window->unread++; if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) { _win_show_history(window->win, num, from); } if (tv_stamp == NULL) { win_print_time(window, '-'); } else { // show users status first, when receiving message via delayed delivery if (win_created) { PContact pcontact = roster_get_contact(from); if (pcontact != NULL) { win_show_contact(window, pcontact); } } 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); } } int ui_index = num; if (ui_index == 10) { ui_index = 0; } if (prefs_get_boolean(PREF_BEEP)) beep(); if (prefs_get_boolean(PREF_NOTIFY_MESSAGE)) notify_message(display_from, ui_index); free(display_from); }
void ui_room_message(const char * const room_jid, const char * const nick, const char * const message) { ProfWin *window = wins_get_by_recipient(room_jid); int num = wins_get_num(window); win_print_time(window, '-'); if (strcmp(nick, muc_get_room_nick(room_jid)) != 0) { if (strncmp(message, "/me ", 4) == 0) { wattron(window->win, COLOUR_THEM); wprintw(window->win, "*%s ", nick); waddstr(window->win, message + 4); wprintw(window->win, "\n"); wattroff(window->win, COLOUR_THEM); } else { _win_show_user(window->win, nick, 1); _win_show_message(window->win, message); } } else { if (strncmp(message, "/me ", 4) == 0) { wattron(window->win, COLOUR_ME); wprintw(window->win, "*%s ", nick); waddstr(window->win, message + 4); wprintw(window->win, "\n"); wattroff(window->win, COLOUR_ME); } else { _win_show_user(window->win, nick, 0); _win_show_message(window->win, message); } } // currently in groupchat window if (wins_is_current(window)) { status_bar_active(num); wins_refresh_current(); // not currenlty on groupchat window } else { status_bar_new(num); cons_show_incoming_message(nick, num); if (wins_get_current_num() == 0) { wins_refresh_current(); } if (strcmp(nick, muc_get_room_nick(room_jid)) != 0) { if (prefs_get_boolean(PREF_FLASH)) { flash(); } } window->unread++; } int ui_index = num; if (ui_index == 10) { ui_index = 0; } if (strcmp(nick, muc_get_room_nick(room_jid)) != 0) { if (prefs_get_boolean(PREF_BEEP)) { beep(); } if (prefs_get_boolean(PREF_NOTIFY_MESSAGE)) { Jid *jidp = jid_create(room_jid); notify_room_message(nick, jidp->localpart, ui_index); jid_destroy(jidp); } } }
void chatwin_incoming_msg(ProfChatWin *chatwin, const char *const resource, const char *const message, GDateTime *timestamp, gboolean win_created, prof_enc_t enc_mode) { assert(chatwin != NULL); char *plugin_message = plugins_pre_chat_message_display(chatwin->barejid, message); ProfWin *window = (ProfWin*)chatwin; int num = wins_get_num(window); char *display_name = roster_get_msg_display_name(chatwin->barejid, resource); gboolean is_current = wins_is_current(window); gboolean notify = prefs_do_chat_notify(is_current); // currently viewing chat window with sender if (wins_is_current(window)) { win_print_incoming_message(window, timestamp, display_name, plugin_message, enc_mode); title_bar_set_typing(FALSE); status_bar_active(num); // not currently viewing chat window with sender } else { status_bar_new(num); cons_show_incoming_message(display_name, num, chatwin->unread); if (prefs_get_boolean(PREF_FLASH)) { flash(); } chatwin->unread++; if (prefs_get_boolean(PREF_CHLOG) && prefs_get_boolean(PREF_HISTORY)) { _chatwin_history(chatwin, chatwin->barejid); } // show users status first, when receiving message via delayed delivery if (timestamp && win_created) { PContact pcontact = roster_get_contact(chatwin->barejid); if (pcontact) { win_show_contact(window, pcontact); } } win_print_incoming_message(window, timestamp, display_name, plugin_message, enc_mode); } if (prefs_get_boolean(PREF_BEEP)) { beep(); } if (notify) { notify_message(display_name, num, plugin_message); } free(display_name); plugins_post_chat_message_display(chatwin->barejid, plugin_message); free(plugin_message); }
void mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message) { assert(mucwin != NULL); ProfWin *window = (ProfWin*)mucwin; int num = wins_get_num(window); char *my_nick = muc_nick(mucwin->roomjid); if (g_strcmp0(nick, my_nick) != 0) { if (g_strrstr(message, my_nick)) { win_print(window, '-', 0, NULL, NO_ME, THEME_ROOMMENTION, nick, message); } else { win_print(window, '-', 0, NULL, NO_ME, THEME_TEXT_THEM, nick, message); } } else { win_print(window, '-', 0, NULL, 0, THEME_TEXT_ME, nick, message); } gboolean is_current = wins_is_current(window); gboolean notify = prefs_do_room_notify(is_current, mucwin->roomjid, my_nick, message); // currently in groupchat window if (wins_is_current(window)) { status_bar_active(num); // not currently on groupchat window } else { status_bar_new(num); cons_show_incoming_message(nick, num); if (prefs_get_boolean(PREF_FLASH) && (strcmp(nick, my_nick) != 0)) { flash(); } mucwin->unread++; if (notify) { mucwin->notify = TRUE; } } // don't notify self messages if (strcmp(nick, my_nick) == 0) { return; } if (prefs_get_boolean(PREF_BEEP)) { beep(); } if (!notify) { return; } Jid *jidp = jid_create(mucwin->roomjid); int ui_index = num; if (ui_index == 10) { ui_index = 0; } if (prefs_get_boolean(PREF_NOTIFY_ROOM_TEXT)) { notify_room_message(nick, jidp->localpart, ui_index, message); } else { notify_room_message(nick, jidp->localpart, ui_index, NULL); } jid_destroy(jidp); }