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

Check for chat room window on muc events, log error when doesn't exist

issue #341
This commit is contained in:
James Booth 2014-08-20 21:30:10 +01:00
parent 7bac097d60
commit 9fd45059eb

View File

@ -1471,7 +1471,9 @@ static void
_ui_room_roster(const char * const room, GList *roster, const char * const presence)
{
ProfWin *window = wins_get_by_recipient(room);
if (window == NULL) {
log_error("Received room roster but no window open for %s.", room);
} else {
if ((roster == NULL) || (g_list_length(roster) == 0)) {
if (presence == NULL) {
win_save_print(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "Room is empty.");
@ -1511,6 +1513,7 @@ _ui_room_roster(const char * const room, GList *roster, const char * const prese
win_update_virtual(window);
}
}
}
static void
_ui_handle_room_join_error(const char * const room, const char * const err)
@ -1522,73 +1525,83 @@ static void
_ui_room_member_offline(const char * const room, const char * const nick)
{
ProfWin *window = wins_get_by_recipient(room);
if (window == NULL) {
log_error("Received offline presence for room participant %s, but no window open for %s.", nick, room);
} else {
win_save_vprint(window, '!', NULL, 0, COLOUR_OFFLINE, "", "<- %s has left the room.", nick);
if (wins_is_current(window)) {
win_update_virtual(window);
}
}
}
static void
_ui_room_member_online(const char * const room, const char * const nick,
const char * const show, const char * const status)
{
ProfWin *window = wins_get_by_recipient(room);
if (window == NULL) {
log_error("Received online presence for room participant %s, but no window open for %s.", nick, room);
} else {
win_save_vprint(window, '!', NULL, 0, COLOUR_ONLINE, "", "-> %s has joined the room.", nick);
if (wins_is_current(window)) {
win_update_virtual(window);
}
}
}
static void
_ui_room_member_presence(const char * const room, const char * const nick,
const char * const show, const char * const status)
{
ProfWin *window = wins_get_by_recipient(room);
if (window != NULL) {
if (window == NULL) {
log_error("Received presence for room participant %s, but no window open for %s.", nick, room);
} else {
win_show_status_string(window, nick, show, status, NULL, "++", "online");
}
if (wins_is_current(window)) {
win_update_virtual(window);
}
}
}
static void
_ui_room_member_nick_change(const char * const room,
const char * const old_nick, const char * const nick)
{
ProfWin *window = wins_get_by_recipient(room);
if (window == NULL) {
log_error("Received nick change for room participant %s, but no window open for %s.", old_nick, room);
} else {
win_save_vprint(window, '!', NULL, 0, COLOUR_THEM, "", "** %s is now known as %s", old_nick, nick);
if (wins_is_current(window)) {
win_update_virtual(window);
}
}
}
static void
_ui_room_nick_change(const char * const room, const char * const nick)
{
ProfWin *window = wins_get_by_recipient(room);
if (window == NULL) {
log_error("Received self nick change %s, but no window open for %s.", nick, room);
} else {
win_save_vprint(window, '!', NULL, 0, COLOUR_ME, "", "** You are now known as %s", nick);
if (wins_is_current(window)) {
win_update_virtual(window);
}
}
}
static void
_ui_room_history(const char * const room_jid, const char * const nick,
GTimeVal tv_stamp, const char * const message)
{
ProfWin *window = wins_get_by_recipient(room_jid);
if (window == NULL) {
log_error("Room history message received from %s, but no window open for %s", nick, room_jid);
} else {
GString *line = g_string_new("");
GDateTime *time = g_date_time_new_from_timeval_utc(&tv_stamp);
@ -1615,12 +1628,16 @@ _ui_room_history(const char * const room_jid, const char * const nick,
win_update_virtual(window);
}
}
}
static 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);
if (window == NULL) {
log_error("Room message received from %s, but no window open for %s", nick, room_jid);
} else {
int num = wins_get_num(window);
char *my_nick = muc_get_room_nick(room_jid);
@ -1703,11 +1720,15 @@ _ui_room_message(const char * const room_jid, const char * const nick,
win_update_virtual(current);
}
}
}
static void
_ui_room_subject(const char * const room_jid, const char * const subject)
{
ProfWin *window = wins_get_by_recipient(room_jid);
if (window == NULL) {
log_error("Received room subject, but no window open for %s.", room_jid);
} else {
int num = wins_get_num(window);
win_save_vprint(window, '!', NULL, NO_EOL, COLOUR_ROOMINFO, "", "Room subject: ");
@ -1723,11 +1744,15 @@ _ui_room_subject(const char * const room_jid, const char * const subject)
status_bar_active(num);
}
}
}
static void
_ui_room_broadcast(const char * const room_jid, const char * const message)
{
ProfWin *window = wins_get_by_recipient(room_jid);
if (window == NULL) {
log_error("Received room broadcast, but no window open for %s.", room_jid);
} else {
int num = wins_get_num(window);
win_save_vprint(window, '!', NULL, NO_EOL, COLOUR_ROOMINFO, "", "Room message: ");
@ -1743,6 +1768,7 @@ _ui_room_broadcast(const char * const room_jid, const char * const message)
status_bar_new(num);
}
}
}
static void
_ui_status(void)