From e547ae0bcc42a3fddab4f49fa6dfec4815320c10 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 22:42:31 +0000 Subject: [PATCH 01/36] mucwin_role_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 8 ++++++-- src/ui/ui.h | 3 +-- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 7d39267b..bda81f25 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -592,7 +592,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c // role changed } else if (g_strcmp0(role, old_role) != 0) { - mucwin_role_change(room, role, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_role_change(mucwin, role, actor, reason); + } // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 2e722585..8eaac733 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -32,6 +32,8 @@ * */ +#include + #include "ui/win_types.h" #include "window_list.h" #include "log.h" @@ -39,10 +41,12 @@ #include "ui/window.h" void -mucwin_role_change(const char *const roomjid, const char *const role, const char *const actor, +mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Your role has been changed to: %s", role); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index 226d31aa..4c312c23 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -161,8 +161,7 @@ void chatwin_otr_smp_event(ProfChatWin *chatwin, prof_otr_smp_event_t event, voi #endif // MUC window -void mucwin_role_change(const char *const roomjid, const char *const role, const char *const actor, - const char *const reason); +void mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, const char *const reason); void mucwin_affiliation_change(const char *const roomjid, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_role_and_affiliation_change(const char *const roomjid, const char *const role, diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 9a3f704a..e09c8199 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -191,7 +191,7 @@ void ui_outgoing_private_msg(ProfPrivateWin *privwin, const char * const message void ui_room_join(const char * const roomjid, gboolean focus) {} void ui_switch_to_room(const char * const roomjid) {} -void mucwin_role_change(const char * const roomjid, const char * const role, const char * const actor, +void mucwin_role_change(ProfMucWin *mucwin, const char * const role, const char * const actor, const char * const reason) {} void mucwin_affiliation_change(const char * const roomjid, const char * const affiliation, const char * const actor, const char * const reason) {} From c0fc7b51e3205d77e943294f437c725e0097c926 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 22:46:24 +0000 Subject: [PATCH 02/36] mucwin_affiliation_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 9 +++++---- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index bda81f25..c8a5b760 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -599,7 +599,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { - mucwin_affiliation_change(room, affiliation, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_affiliation_change(mucwin, affiliation, actor, reason); + } } } } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 8eaac733..e795d3fb 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -41,8 +41,7 @@ #include "ui/window.h" void -mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, - const char *const reason) +mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, const char *const reason) { assert(mucwin != NULL); @@ -58,10 +57,12 @@ mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const } void -mucwin_affiliation_change(const char *const roomjid, const char *const affiliation, const char *const actor, +mucwin_affiliation_change(ProfMucWin *mucwin, const char *const affiliation, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Your affiliation has been changed to: %s", affiliation); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index 4c312c23..e41a05ef 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -162,7 +162,7 @@ void chatwin_otr_smp_event(ProfChatWin *chatwin, prof_otr_smp_event_t event, voi // MUC window void mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, const char *const reason); -void mucwin_affiliation_change(const char *const roomjid, const char *const affiliation, const char *const actor, +void mucwin_affiliation_change(ProfMucWin *mucwin, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_role_and_affiliation_change(const char *const roomjid, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index e09c8199..94b87068 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -193,7 +193,7 @@ void ui_switch_to_room(const char * const roomjid) {} void mucwin_role_change(ProfMucWin *mucwin, const char * const role, const char * const actor, const char * const reason) {} -void mucwin_affiliation_change(const char * const roomjid, const char * const affiliation, const char * const actor, +void mucwin_affiliation_change(ProfMucWin *mucwin, const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_role_and_affiliation_change(const char * const roomjid, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} From 6ea9314f982ae5935b8428116b06552ef8a2b996 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:08:02 +0000 Subject: [PATCH 03/36] mucwin_role_and_affiliation_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 6 ++++-- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index c8a5b760..acfa0c4f 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -588,7 +588,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { // both changed if ((g_strcmp0(role, old_role) != 0) && (g_strcmp0(affiliation, old_affiliation) != 0)) { - mucwin_role_and_affiliation_change(room, role, affiliation, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_role_and_affiliation_change(mucwin, role, affiliation, actor, reason); + } // role changed } else if (g_strcmp0(role, old_role) != 0) { diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index e795d3fb..8f9aabf8 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -74,10 +74,12 @@ mucwin_affiliation_change(ProfMucWin *mucwin, const char *const affiliation, con } void -mucwin_role_and_affiliation_change(const char *const roomjid, const char *const role, const char *const affiliation, +mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char *const role, const char *const affiliation, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Your role and affiliation have been changed, role: %s, affiliation: %s", role, affiliation); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index e41a05ef..58f96929 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -164,7 +164,7 @@ void chatwin_otr_smp_event(ProfChatWin *chatwin, prof_otr_smp_event_t event, voi void mucwin_role_change(ProfMucWin *mucwin, const char *const role, const char *const actor, const char *const reason); void mucwin_affiliation_change(ProfMucWin *mucwin, const char *const affiliation, const char *const actor, const char *const reason); -void mucwin_role_and_affiliation_change(const char *const roomjid, const char *const role, +void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_occupant_role_change(const char *const roomjid, const char *const nick, const char *const role, const char *const actor, const char *const reason); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 94b87068..3f672c18 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -195,7 +195,7 @@ void mucwin_role_change(ProfMucWin *mucwin, const char * const role, const char const char * const reason) {} void mucwin_affiliation_change(ProfMucWin *mucwin, const char * const affiliation, const char * const actor, const char * const reason) {} -void mucwin_role_and_affiliation_change(const char * const roomjid, const char * const role, +void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_occupant_role_change(const char * const roomjid, const char * const nick, const char * const role, const char * const actor, const char * const reason) {} From 22cd5b433f90446066de0f63fbefe89bda1b0abb Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:10:07 +0000 Subject: [PATCH 04/36] Tidy sv_ev_muc_self_online --- src/event/server_events.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index acfa0c4f..3982f14c 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -585,27 +585,19 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c // check for change in role/affiliation } else { - if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && prefs_get_boolean(PREF_MUC_PRIVILEGES)) { // both changed if ((g_strcmp0(role, old_role) != 0) && (g_strcmp0(affiliation, old_affiliation) != 0)) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_role_and_affiliation_change(mucwin, role, affiliation, actor, reason); - } + mucwin_role_and_affiliation_change(mucwin, role, affiliation, actor, reason); // role changed } else if (g_strcmp0(role, old_role) != 0) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_role_change(mucwin, role, actor, reason); - } + mucwin_role_change(mucwin, role, actor, reason); // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_affiliation_change(mucwin, affiliation, actor, reason); - } + mucwin_affiliation_change(mucwin, affiliation, actor, reason); } } } From 288c1a9d6e560f0d07909c8d68b3113bbb60b4f4 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:12:35 +0000 Subject: [PATCH 05/36] mucwin_occupant_role_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 6 ++++-- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 3982f14c..6254d725 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -664,7 +664,10 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // role changed } else if (g_strcmp0(role, old_role) != 0) { - mucwin_occupant_role_change(room, nick, role, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_role_change(mucwin, nick, role, actor, reason); + } // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 8f9aabf8..692d884a 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -92,10 +92,12 @@ mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char *const role, c void -mucwin_occupant_role_change(const char *const roomjid, const char *const nick, const char *const role, +mucwin_occupant_role_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%s's role has been changed to: %s", nick, role); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index 58f96929..5409fa8f 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -166,7 +166,7 @@ void mucwin_affiliation_change(ProfMucWin *mucwin, const char *const affiliation const char *const reason); void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); -void mucwin_occupant_role_change(const char *const roomjid, const char *const nick, const char *const role, +void mucwin_occupant_role_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const actor, const char *const reason); void mucwin_occupant_affiliation_change(const char *const roomjid, const char *const nick, const char *const affiliation, const char *const actor, const char *const reason); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 3f672c18..907d765a 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -197,7 +197,7 @@ void mucwin_affiliation_change(ProfMucWin *mucwin, const char * const affiliatio const char * const reason) {} void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} -void mucwin_occupant_role_change(const char * const roomjid, const char * const nick, const char * const role, +void mucwin_occupant_role_change(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const actor, const char * const reason) {} void mucwin_occupant_affiliation_change(const char * const roomjid, const char * const nick, const char * const affiliation, const char * const actor, const char * const reason) {} From 799c064dffea4a076382af752f3f167dc8c0c167 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:14:27 +0000 Subject: [PATCH 06/36] mucwin_occupant_affiliation_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 6 ++++-- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 6254d725..0d044704 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -671,7 +671,10 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { - mucwin_occupant_affiliation_change(room, nick, affiliation, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_affiliation_change(mucwin, nick, affiliation, actor, reason); + } } } occupantswin_occupants(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 692d884a..9abf86d6 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -109,10 +109,12 @@ mucwin_occupant_role_change(ProfMucWin *mucwin, const char *const nick, const ch } void -mucwin_occupant_affiliation_change(const char *const roomjid, const char *const nick, const char *const affiliation, +mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const affiliation, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%s's affiliation has been changed to: %s", nick, affiliation); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index 5409fa8f..263b4d91 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -168,7 +168,7 @@ void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char *const ro const char *const affiliation, const char *const actor, const char *const reason); void mucwin_occupant_role_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const actor, const char *const reason); -void mucwin_occupant_affiliation_change(const char *const roomjid, const char *const nick, +void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_occupant_role_and_affiliation_change(const char *const roomjid, const char *const nick, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 907d765a..43d90980 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -199,7 +199,7 @@ void mucwin_role_and_affiliation_change(ProfMucWin *mucwin, const char * const r const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_occupant_role_change(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const actor, const char * const reason) {} -void mucwin_occupant_affiliation_change(const char * const roomjid, const char * const nick, const char * const affiliation, +void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char * const nick, const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_occupant_role_and_affiliation_change(const char * const roomjid, const char * const nick, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} From ed9585376e5fcc1ee0a556ac9b429c6a7e835326 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:15:49 +0000 Subject: [PATCH 07/36] mucwin_occupant_role_and_affiliation_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 6 ++++-- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 0d044704..da7a8e99 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -660,7 +660,10 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { // both changed if ((g_strcmp0(role, old_role) != 0) && (g_strcmp0(affiliation, old_affiliation) != 0)) { - mucwin_occupant_role_and_affiliation_change(room, nick, role, affiliation, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_role_and_affiliation_change(mucwin, nick, role, affiliation, actor, reason); + } // role changed } else if (g_strcmp0(role, old_role) != 0) { diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 9abf86d6..2dad9d8f 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -126,10 +126,12 @@ mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const nick, c } void -mucwin_occupant_role_and_affiliation_change(const char *const roomjid, const char *const nick, const char *const role, +mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const affiliation, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%s's role and affiliation have been changed, role: %s, affiliation: %s", nick, role, affiliation); if (actor) { win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ROOMINFO, "", ", by: %s", actor); diff --git a/src/ui/ui.h b/src/ui/ui.h index 263b4d91..242d8695 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -170,7 +170,7 @@ void mucwin_occupant_role_change(ProfMucWin *mucwin, const char *const nick, con const char *const actor, const char *const reason); void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const affiliation, const char *const actor, const char *const reason); -void mucwin_occupant_role_and_affiliation_change(const char *const roomjid, const char *const nick, +void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_roster(const char *const roomjid, GList *occupants, const char *const presence); void mucwin_history(const char *const roomjid, const char *const nick, GDateTime *timestamp, diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 43d90980..75ef158d 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -201,7 +201,7 @@ void mucwin_occupant_role_change(ProfMucWin *mucwin, const char * const nick, co const char * const actor, const char * const reason) {} void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char * const nick, const char * const affiliation, const char * const actor, const char * const reason) {} -void mucwin_occupant_role_and_affiliation_change(const char * const roomjid, const char * const nick, const char * const role, +void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_roster(const char * const roomjid, GList *occupants, const char * const presence) {} void mucwin_history(const char * const roomjid, const char * const nick, From cb587b07722ed1d071d606cbdf43ef4cdd7769eb Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:26:47 +0000 Subject: [PATCH 08/36] Tidy sv_ev_muc_occupant_online --- src/event/server_events.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index da7a8e99..3ba51afb 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -657,27 +657,19 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // presence unchanged, check for role/affiliation change } else { - if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && prefs_get_boolean(PREF_MUC_PRIVILEGES)) { // both changed if ((g_strcmp0(role, old_role) != 0) && (g_strcmp0(affiliation, old_affiliation) != 0)) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_occupant_role_and_affiliation_change(mucwin, nick, role, affiliation, actor, reason); - } + mucwin_occupant_role_and_affiliation_change(mucwin, nick, role, affiliation, actor, reason); // role changed } else if (g_strcmp0(role, old_role) != 0) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_occupant_role_change(mucwin, nick, role, actor, reason); - } + mucwin_occupant_role_change(mucwin, nick, role, actor, reason); // affiliation changed } else if (g_strcmp0(affiliation, old_affiliation) != 0) { - ProfMucWin *mucwin = wins_get_muc(room); - if (mucwin) { - mucwin_occupant_affiliation_change(mucwin, nick, affiliation, actor, reason); - } + mucwin_occupant_affiliation_change(mucwin, nick, affiliation, actor, reason); } } occupantswin_occupants(room); From 363fda82c16efc8d296a50867edd6fcd45271c11 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:30:44 +0000 Subject: [PATCH 09/36] mucwin_room_info_error takes ProfMucWin --- src/ui/mucwin.c | 12 ++++++------ src/ui/ui.h | 2 +- src/xmpp/iq.c | 6 ++++-- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 2dad9d8f..d5723fe8 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -143,13 +143,13 @@ mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char *cons } void -mucwin_room_info_error(const char *const roomjid, const char *const error) +mucwin_room_info_error(ProfMucWin *mucwin, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - win_vprint(window, '!', 0, NULL, 0, 0, "", "Room info request failed: %s", error); - win_print(window, '-', 0, NULL, 0, 0, "", ""); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, 0, "", "Room info request failed: %s", error); + win_print(window, '-', 0, NULL, 0, 0, "", ""); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 242d8695..b8115e8a 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -181,7 +181,7 @@ void mucwin_requires_config(const char *const roomjid); void mucwin_info(ProfMucWin *mucwin); void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role); void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation); -void mucwin_room_info_error(const char *const roomjid, const char *const error); +void mucwin_room_info_error(ProfMucWin *mucwin, const char *const error); void mucwin_room_disco_info(const char *const roomjid, GSList *identities, GSList *features); void mucwin_occupant_kicked(const char *const roomjid, const char *const nick, const char *const actor, const char *const reason); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 034be2a2..51f5c798 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -54,6 +54,7 @@ #include "muc.h" #include "profanity.h" #include "ui/ui.h" +#include "window_list.h" #include "config/preferences.h" #include "event/server_events.h" #include "xmpp/capabilities.h" @@ -1505,9 +1506,10 @@ _room_info_response_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza // handle error responses if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { - if (cb_data->display) { + ProfMucWin *mucwin = wins_get_muc(cb_data->room); + if (mucwin && cb_data->display) { char *error_message = stanza_get_error_message(stanza); - mucwin_room_info_error(cb_data->room, error_message); + mucwin_room_info_error(mucwin, error_message); free(error_message); } free(cb_data->room); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 75ef158d..afb62e5e 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -214,7 +214,7 @@ void ui_room_destroy(const char * const roomjid) {} void mucwin_info(ProfMucWin *mucwin) {} void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role) {} void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) {} -void mucwin_room_info_error(const char * const roomjid, const char * const error) {} +void mucwin_room_info_error(ProfMucWin *mucwin, const char * const error) {} void mucwin_room_disco_info(const char * const roomjid, GSList *identities, GSList *features) {} void ui_room_destroyed(const char * const roomjid, const char * const reason, const char * const new_jid, const char * const password) {} From d21faa46097f9a4bfcef92c9355427c103beb549 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:33:50 +0000 Subject: [PATCH 10/36] mucwin_room_disco_info takes ProfMucWin --- src/ui/mucwin.c | 68 ++++++++++++++++++------------------ src/ui/ui.h | 2 +- src/xmpp/iq.c | 5 +-- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 39 insertions(+), 38 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index d5723fe8..279566ba 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -153,43 +153,43 @@ mucwin_room_info_error(ProfMucWin *mucwin, const char *const error) } void -mucwin_room_disco_info(const char *const roomjid, GSList *identities, GSList *features) +mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - if ((identities && (g_slist_length(identities) > 0)) || - (features && (g_slist_length(features) > 0))) { - if (identities) { - win_print(window, '!', 0, NULL, 0, 0, "", "Identities:"); - } - while (identities) { - DiscoIdentity *identity = identities->data; // anme trpe, cat - GString *identity_str = g_string_new(" "); - if (identity->name) { - identity_str = g_string_append(identity_str, identity->name); - identity_str = g_string_append(identity_str, " "); - } - if (identity->type) { - identity_str = g_string_append(identity_str, identity->type); - identity_str = g_string_append(identity_str, " "); - } - if (identity->category) { - identity_str = g_string_append(identity_str, identity->category); - } - win_print(window, '!', 0, NULL, 0, 0, "", identity_str->str); - g_string_free(identity_str, TRUE); - identities = g_slist_next(identities); - } + assert(mucwin != NULL); - if (features) { - win_print(window, '!', 0, NULL, 0, 0, "", "Features:"); - } - while (features) { - win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", features->data); - features = g_slist_next(features); - } - win_print(window, '-', 0, NULL, 0, 0, "", ""); + ProfWin *window = (ProfWin*)mucwin; + if ((identities && (g_slist_length(identities) > 0)) || + (features && (g_slist_length(features) > 0))) { + if (identities) { + win_print(window, '!', 0, NULL, 0, 0, "", "Identities:"); } + while (identities) { + DiscoIdentity *identity = identities->data; // anme trpe, cat + GString *identity_str = g_string_new(" "); + if (identity->name) { + identity_str = g_string_append(identity_str, identity->name); + identity_str = g_string_append(identity_str, " "); + } + if (identity->type) { + identity_str = g_string_append(identity_str, identity->type); + identity_str = g_string_append(identity_str, " "); + } + if (identity->category) { + identity_str = g_string_append(identity_str, identity->category); + } + win_print(window, '!', 0, NULL, 0, 0, "", identity_str->str); + g_string_free(identity_str, TRUE); + identities = g_slist_next(identities); + } + + if (features) { + win_print(window, '!', 0, NULL, 0, 0, "", "Features:"); + } + while (features) { + win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", features->data); + features = g_slist_next(features); + } + win_print(window, '-', 0, NULL, 0, 0, "", ""); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index b8115e8a..c7f6ec2e 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -182,7 +182,7 @@ void mucwin_info(ProfMucWin *mucwin); void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role); void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation); void mucwin_room_info_error(ProfMucWin *mucwin, const char *const error); -void mucwin_room_disco_info(const char *const roomjid, GSList *identities, GSList *features); +void mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features); void mucwin_occupant_kicked(const char *const roomjid, const char *const nick, const char *const actor, const char *const reason); void mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 51f5c798..6029fe2b 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1562,8 +1562,9 @@ _room_info_response_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza } muc_set_features(cb_data->room, features); - if (cb_data->display) { - mucwin_room_disco_info(cb_data->room, identities, features); + ProfMucWin *mucwin = wins_get_muc(cb_data->room); + if (mucwin && cb_data->display) { + mucwin_room_disco_info(mucwin, identities, features); } g_slist_free_full(features, free); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index afb62e5e..01222777 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -215,7 +215,7 @@ void mucwin_info(ProfMucWin *mucwin) {} void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role) {} void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) {} void mucwin_room_info_error(ProfMucWin *mucwin, const char * const error) {} -void mucwin_room_disco_info(const char * const roomjid, GSList *identities, GSList *features) {} +void mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features) {} void ui_room_destroyed(const char * const roomjid, const char * const reason, const char * const new_jid, const char * const password) {} void ui_room_kicked(const char * const roomjid, const char * const actor, const char * const reason) {} From 8b4bb1c7f100590f015fddb55b31fe3d0ea10417 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:41:45 +0000 Subject: [PATCH 11/36] mucwin_roster takes ProfMucWin --- src/command/commands.c | 8 ++--- src/event/server_events.c | 5 +-- src/ui/mucwin.c | 64 +++++++++++++++++------------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 5 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index 540300de..98d2ec8a 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -1158,7 +1158,7 @@ _who_room(ProfWin *window, const char *const command, gchar **args) // no arg, show all contacts if ((presence == NULL) || (g_strcmp0(presence, "any") == 0)) { - mucwin_roster(mucwin->roomjid, occupants, NULL); + mucwin_roster(mucwin, occupants, NULL); // available } else if (strcmp("available", presence) == 0) { @@ -1172,7 +1172,7 @@ _who_room(ProfWin *window, const char *const command, gchar **args) occupants = g_list_next(occupants); } - mucwin_roster(mucwin->roomjid, filtered, "available"); + mucwin_roster(mucwin, filtered, "available"); // unavailable } else if (strcmp("unavailable", presence) == 0) { @@ -1186,7 +1186,7 @@ _who_room(ProfWin *window, const char *const command, gchar **args) occupants = g_list_next(occupants); } - mucwin_roster(mucwin->roomjid, filtered, "unavailable"); + mucwin_roster(mucwin, filtered, "unavailable"); // show specific status } else { @@ -1201,7 +1201,7 @@ _who_room(ProfWin *window, const char *const command, gchar **args) occupants = g_list_next(occupants); } - mucwin_roster(mucwin->roomjid, filtered, presence); + mucwin_roster(mucwin, filtered, presence); } g_list_free(occupants); diff --git a/src/event/server_events.c b/src/event/server_events.c index 3ba51afb..bfd8bdb3 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -557,9 +557,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c muc_roster_set_complete(room); // show roster if occupants list disabled by default - if (!prefs_get_boolean(PREF_OCCUPANTS)) { + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && !prefs_get_boolean(PREF_OCCUPANTS)) { GList *occupants = muc_roster(room); - mucwin_roster(room, occupants, NULL); + mucwin_roster(mucwin, occupants, NULL); g_list_free(occupants); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 279566ba..5edc6a8d 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -194,42 +194,40 @@ mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features) } void -mucwin_roster(const char *const roomjid, GList *roster, const char *const presence) +mucwin_roster(ProfMucWin *mucwin, GList *roster, const char *const presence) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received room roster but no window open for %s.", roomjid); - } else { - if ((roster == NULL) || (g_list_length(roster) == 0)) { - if (presence == NULL) { - win_print(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Room is empty."); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "No occupants %s.", presence); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if ((roster == NULL) || (g_list_length(roster) == 0)) { + if (presence == NULL) { + win_print(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Room is empty."); } else { - int length = g_list_length(roster); - if (presence == NULL) { - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%d occupants: ", length); - } else { - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%d %s: ", length, presence); - } - - while (roster) { - Occupant *occupant = roster->data; - const char *presence_str = string_from_resource_presence(occupant->presence); - - theme_item_t presence_colour = theme_main_presence_attrs(presence_str); - win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, presence_colour, "", "%s", occupant->nick); - - if (roster->next) { - win_print(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", "); - } - - roster = g_list_next(roster); - } - win_print(window, '!', 0, NULL, NO_DATE, THEME_ONLINE, "", ""); - + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "No occupants %s.", presence); } + } else { + int length = g_list_length(roster); + if (presence == NULL) { + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%d occupants: ", length); + } else { + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "%d %s: ", length, presence); + } + + while (roster) { + Occupant *occupant = roster->data; + const char *presence_str = string_from_resource_presence(occupant->presence); + + theme_item_t presence_colour = theme_main_presence_attrs(presence_str); + win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, presence_colour, "", "%s", occupant->nick); + + if (roster->next) { + win_print(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", "); + } + + roster = g_list_next(roster); + } + win_print(window, '!', 0, NULL, NO_DATE, THEME_ONLINE, "", ""); + } } diff --git a/src/ui/ui.h b/src/ui/ui.h index c7f6ec2e..61cf8745 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -172,7 +172,7 @@ void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const ni const char *const affiliation, const char *const actor, const char *const reason); void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); -void mucwin_roster(const char *const roomjid, GList *occupants, const char *const presence); +void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char *const presence); void mucwin_history(const char *const roomjid, const char *const nick, GDateTime *timestamp, const char *const message); void mucwin_message(const char *const roomjid, const char *const nick, const char *const message); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 01222777..5609b3a9 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -203,7 +203,7 @@ void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char * const n const char * const actor, const char * const reason) {} void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} -void mucwin_roster(const char * const roomjid, GList *occupants, const char * const presence) {} +void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char * const presence) {} void mucwin_history(const char * const roomjid, const char * const nick, GDateTime *timestamp, const char * const message) {} void mucwin_message(const char * const roomjid, const char * const nick, From 24f283e96026bcdc51d0f92e3125e09d3b53efc5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:45:54 +0000 Subject: [PATCH 12/36] mucwin_occupant_offline takes ProfMucWin --- src/event/server_events.c | 5 +++-- src/ui/mucwin.c | 12 +++++------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index bfd8bdb3..bee0e949 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -485,8 +485,9 @@ sv_ev_room_occupant_offline(const char *const room, const char *const nick, muc_roster_remove(room, nick); char *muc_status_pref = prefs_get_string(PREF_STATUSES_MUC); - if (g_strcmp0(muc_status_pref, "none") != 0) { - mucwin_occupant_offline(room, nick); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && (g_strcmp0(muc_status_pref, "none") != 0)) { + mucwin_occupant_offline(mucwin, nick); } prefs_free_string(muc_status_pref); occupantswin_occupants(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 5edc6a8d..f8bf77e2 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -232,14 +232,12 @@ mucwin_roster(ProfMucWin *mucwin, GList *roster, const char *const presence) } void -mucwin_occupant_offline(const char *const roomjid, const char *const nick) +mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received offline presence for room participant %s, but no window open for %s.", nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s has left the room.", nick); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s has left the room.", nick); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 61cf8745..6b225679 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -188,7 +188,7 @@ void mucwin_occupant_kicked(const char *const roomjid, const char *const nick, c void mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, const char *const reason); void mucwin_broadcast(const char *const roomjid, const char *const message); -void mucwin_occupant_offline(const char *const roomjid, const char *const nick); +void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_online(const char *const roomjid, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); void mucwin_occupant_nick_change(const char *const roomjid, const char *const old_nick, const char *const nick); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 5609b3a9..b92aeca9 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -227,7 +227,7 @@ void mucwin_occupant_banned(const char * const roomjid, const char * const nick, void ui_leave_room(const char * const roomjid) {} void mucwin_broadcast(const char * const roomjid, const char * const message) {} -void mucwin_occupant_offline(const char * const roomjid, const char * const nick) {} +void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_online(const char * const roomjid, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} void mucwin_occupant_nick_change(const char * const roomjid, From cc498110e289c02a971371e4fb6666569ceff1ef Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:47:59 +0000 Subject: [PATCH 13/36] mucwin_occupant_kicked takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 32 +++++++++++++++----------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index bee0e949..57758a52 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -498,7 +498,10 @@ sv_ev_room_occupent_kicked(const char *const room, const char *const nick, const const char *const reason) { muc_roster_remove(room, nick); - mucwin_occupant_kicked(room, nick, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_kicked(mucwin, nick, actor, reason); + } occupantswin_occupants(room); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index f8bf77e2..db7ebd64 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -241,27 +241,25 @@ mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick) } void -mucwin_occupant_kicked(const char *const roomjid, const char *const nick, const char *const actor, +mucwin_occupant_kicked(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received kick for room participant %s, but no window open for %s.", nick, roomjid); - } else { - GString *message = g_string_new(nick); - g_string_append(message, " has been kicked from the room"); - if (actor) { - g_string_append(message, " by "); - g_string_append(message, actor); - } - if (reason) { - g_string_append(message, ", reason: "); - g_string_append(message, reason); - } + assert(mucwin != NULL); - win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s", message->str); - g_string_free(message, TRUE); + ProfWin *window = (ProfWin*)mucwin; + GString *message = g_string_new(nick); + g_string_append(message, " has been kicked from the room"); + if (actor) { + g_string_append(message, " by "); + g_string_append(message, actor); } + if (reason) { + g_string_append(message, ", reason: "); + g_string_append(message, reason); + } + + win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s", message->str); + g_string_free(message, TRUE); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 6b225679..453943c0 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -183,7 +183,7 @@ void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role); void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation); void mucwin_room_info_error(ProfMucWin *mucwin, const char *const error); void mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features); -void mucwin_occupant_kicked(const char *const roomjid, const char *const nick, const char *const actor, +void mucwin_occupant_kicked(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason); void mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, const char *const reason); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index b92aeca9..9426ea59 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -219,7 +219,7 @@ void mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *feat void ui_room_destroyed(const char * const roomjid, const char * const reason, const char * const new_jid, const char * const password) {} void ui_room_kicked(const char * const roomjid, const char * const actor, const char * const reason) {} -void mucwin_occupant_kicked(const char * const roomjid, const char * const nick, const char * const actor, +void mucwin_occupant_kicked(ProfMucWin *mucwin, const char * const nick, const char * const actor, const char * const reason) {} void ui_room_banned(const char * const roomjid, const char * const actor, const char * const reason) {} void mucwin_occupant_banned(const char * const roomjid, const char * const nick, const char * const actor, From 3a98bf315c5ab5678aa8a77c3fa46b2d3dec7ac8 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:49:45 +0000 Subject: [PATCH 14/36] mucwin_occupant_banned takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 32 +++++++++++++++----------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 57758a52..c823e164 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -510,7 +510,10 @@ sv_ev_room_occupent_banned(const char *const room, const char *const nick, const const char *const reason) { muc_roster_remove(room, nick); - mucwin_occupant_banned(room, nick, actor, reason); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_banned(mucwin, nick, actor, reason); + } occupantswin_occupants(room); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index db7ebd64..4b07ffdc 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -263,27 +263,25 @@ mucwin_occupant_kicked(ProfMucWin *mucwin, const char *const nick, const char *c } void -mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, +mucwin_occupant_banned(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received ban for room participant %s, but no window open for %s.", nick, roomjid); - } else { - GString *message = g_string_new(nick); - g_string_append(message, " has been banned from the room"); - if (actor) { - g_string_append(message, " by "); - g_string_append(message, actor); - } - if (reason) { - g_string_append(message, ", reason: "); - g_string_append(message, reason); - } + assert(mucwin != NULL); - win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s", message->str); - g_string_free(message, TRUE); + ProfWin *window = (ProfWin*)mucwin; + GString *message = g_string_new(nick); + g_string_append(message, " has been banned from the room"); + if (actor) { + g_string_append(message, " by "); + g_string_append(message, actor); } + if (reason) { + g_string_append(message, ", reason: "); + g_string_append(message, reason); + } + + win_vprint(window, '!', 0, NULL, 0, THEME_OFFLINE, "", "<- %s", message->str); + g_string_free(message, TRUE); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 453943c0..543019c3 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -185,7 +185,7 @@ void mucwin_room_info_error(ProfMucWin *mucwin, const char *const error); void mucwin_room_disco_info(ProfMucWin *mucwin, GSList *identities, GSList *features); void mucwin_occupant_kicked(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason); -void mucwin_occupant_banned(const char *const roomjid, const char *const nick, const char *const actor, +void mucwin_occupant_banned(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason); void mucwin_broadcast(const char *const roomjid, const char *const message); void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 9426ea59..7b67d9be 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -222,7 +222,7 @@ void ui_room_kicked(const char * const roomjid, const char * const actor, const void mucwin_occupant_kicked(ProfMucWin *mucwin, const char * const nick, const char * const actor, const char * const reason) {} void ui_room_banned(const char * const roomjid, const char * const actor, const char * const reason) {} -void mucwin_occupant_banned(const char * const roomjid, const char * const nick, const char * const actor, +void mucwin_occupant_banned(ProfMucWin *mucwin, const char * const nick, const char * const actor, const char * const reason) {} void ui_leave_room(const char * const roomjid) {} void mucwin_broadcast(const char * const roomjid, From d505a92d1e2f9c47d2e46c4ac934f16abb131308 Mon Sep 17 00:00:00 2001 From: James Booth Date: Sun, 1 Nov 2015 23:52:16 +0000 Subject: [PATCH 15/36] mucwin_occupant_online takes ProfMucWin --- src/event/server_events.c | 5 +++-- src/ui/mucwin.c | 26 ++++++++++++-------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index c823e164..d1e8380b 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -646,8 +646,9 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // joined room if (!occupant) { char *muc_status_pref = prefs_get_string(PREF_STATUSES_MUC); - if (g_strcmp0(muc_status_pref, "none") != 0) { - mucwin_occupant_online(room, nick, role, affiliation, show, status); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && g_strcmp0(muc_status_pref, "none") != 0) { + mucwin_occupant_online(mucwin, nick, role, affiliation, show, status); } prefs_free_string(muc_status_pref); occupantswin_occupants(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 4b07ffdc..b7d41800 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -285,24 +285,22 @@ mucwin_occupant_banned(ProfMucWin *mucwin, const char *const nick, const char *c } void -mucwin_occupant_online(const char *const roomjid, const char *const nick, const char *const role, +mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const affiliation, const char *const show, const char *const status) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received online presence for room participant %s, but no window open for %s.", nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ONLINE, "", "-> %s has joined the room", nick); - if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { - if (role) { - win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ONLINE, "", ", role: %s", role); - } - if (affiliation) { - win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ONLINE, "", ", affiliation: %s", affiliation); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ONLINE, "", "-> %s has joined the room", nick); + if (prefs_get_boolean(PREF_MUC_PRIVILEGES)) { + if (role) { + win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ONLINE, "", ", role: %s", role); + } + if (affiliation) { + win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, THEME_ONLINE, "", ", affiliation: %s", affiliation); } - win_print(window, '!', 0, NULL, NO_DATE, THEME_ROOMINFO, "", ""); } + win_print(window, '!', 0, NULL, NO_DATE, THEME_ROOMINFO, "", ""); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 543019c3..25212f27 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -189,7 +189,7 @@ void mucwin_occupant_banned(ProfMucWin *mucwin, const char *const nick, const ch const char *const reason); void mucwin_broadcast(const char *const roomjid, const char *const message); void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); -void mucwin_occupant_online(const char *const roomjid, const char *const nick, const char *const roles, +void mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); void mucwin_occupant_nick_change(const char *const roomjid, const char *const old_nick, const char *const nick); void mucwin_nick_change(const char *const roomjid, const char *const nick); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 7b67d9be..375368ec 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -228,7 +228,7 @@ void ui_leave_room(const char * const roomjid) {} void mucwin_broadcast(const char * const roomjid, const char * const message) {} void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} -void mucwin_occupant_online(const char * const roomjid, const char * const nick, const char * const roles, +void mucwin_occupant_online(ProfMucWin *mucwin, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} void mucwin_occupant_nick_change(const char * const roomjid, const char * const old_nick, const char * const nick) {} From b3150ef8e122f5c48dc0794cd1337c7f72ad7653 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:14:16 +0000 Subject: [PATCH 16/36] mucwin_occupant_presence takes ProfMucWin --- src/event/server_events.c | 5 +++-- src/ui/mucwin.c | 12 +++++------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 4 ++-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index d1e8380b..e9b756e3 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -658,8 +658,9 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // presence updated if (updated) { char *muc_status_pref = prefs_get_string(PREF_STATUSES_MUC); - if (g_strcmp0(muc_status_pref, "all") == 0) { - mucwin_occupant_presence(room, nick, show, status); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && (g_strcmp0(muc_status_pref, "all") == 0)) { + mucwin_occupant_presence(mucwin, nick, show, status); } prefs_free_string(muc_status_pref); occupantswin_occupants(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index b7d41800..2051d8a6 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -304,15 +304,13 @@ mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *c } void -mucwin_occupant_presence(const char *const roomjid, const char *const nick, +mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received presence for room participant %s, but no window open for %s.", nick, roomjid); - } else { - win_show_status_string(window, nick, show, status, NULL, "++", "online"); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_show_status_string(window, nick, show, status, NULL, "++", "online"); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 25212f27..6790cd51 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -193,7 +193,7 @@ void mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const ch const char *const affiliation, const char *const show, const char *const status); void mucwin_occupant_nick_change(const char *const roomjid, const char *const old_nick, const char *const nick); void mucwin_nick_change(const char *const roomjid, const char *const nick); -void mucwin_occupant_presence(const char *const roomjid, const char *const nick, const char *const show, +void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status); void mucwin_update_occupants(const char *const roomjid); void mucwin_show_occupants(const char *const roomjid); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 375368ec..93adc4a9 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -233,8 +233,8 @@ void mucwin_occupant_online(ProfMucWin *mucwin, const char * const nick, const c void mucwin_occupant_nick_change(const char * const roomjid, const char * const old_nick, const char * const nick) {} void mucwin_nick_change(const char * const roomjid, const char * const nick) {} -void mucwin_occupant_presence(const char * const roomjid, - const char * const nick, const char * const show, const char * const status) {} +void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const char * const show, + const char * const status) {} void mucwin_update_occupants(const char * const roomjid) {} void mucwin_show_occupants(const char * const roomjid) {} void mucwin_hide_occupants(const char * const roomjid) {} From 42643391a44ff745892673b0d97723f415b6376a Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:16:01 +0000 Subject: [PATCH 17/36] mucwin_occupant_nick_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 13 +++++-------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 3 +-- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index e9b756e3..7168828a 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -637,7 +637,10 @@ sv_ev_muc_occupant_online(const char *const room, const char *const nick, const // handle nickname change char *old_nick = muc_roster_nick_change_complete(room, nick); if (old_nick) { - mucwin_occupant_nick_change(room, old_nick, nick); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_occupant_nick_change(mucwin, old_nick, nick); + } free(old_nick); occupantswin_occupants(room); return; diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 2051d8a6..9288293e 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -314,15 +314,12 @@ mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, } void -mucwin_occupant_nick_change(const char *const roomjid, - const char *const old_nick, const char *const nick) +mucwin_occupant_nick_change(ProfMucWin *mucwin, const char *const old_nick, const char *const nick) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received nick change for room participant %s, but no window open for %s.", old_nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_THEM, "", "** %s is now known as %s", old_nick, nick); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_THEM, "", "** %s is now known as %s", old_nick, nick); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 6790cd51..80073843 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -191,7 +191,7 @@ void mucwin_broadcast(const char *const roomjid, const char *const message); void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); -void mucwin_occupant_nick_change(const char *const roomjid, const char *const old_nick, const char *const nick); +void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char *const old_nick, const char *const nick); void mucwin_nick_change(const char *const roomjid, const char *const nick); void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 93adc4a9..eec4af29 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -230,8 +230,7 @@ void mucwin_broadcast(const char * const roomjid, void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_online(ProfMucWin *mucwin, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} -void mucwin_occupant_nick_change(const char * const roomjid, - const char * const old_nick, const char * const nick) {} +void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char * const old_nick, const char * const nick) {} void mucwin_nick_change(const char * const roomjid, const char * const nick) {} void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const char * const show, const char * const status) {} From 6ed72d8a3570ba56a0af5c5fba2fe598eeeb1b12 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:17:46 +0000 Subject: [PATCH 18/36] mucwin_nick_change takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 12 +++++------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 7168828a..3e054fa9 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -548,7 +548,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c // handle self nick change if (muc_nick_change_pending(room)) { muc_nick_change_complete(room, nick); - mucwin_nick_change(room, nick); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin) { + mucwin_nick_change(mucwin, nick); + } // handle roster complete } else if (!muc_roster_complete(room)) { diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 9288293e..f300abec 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -323,14 +323,12 @@ mucwin_occupant_nick_change(ProfMucWin *mucwin, const char *const old_nick, cons } void -mucwin_nick_change(const char *const roomjid, const char *const nick) +mucwin_nick_change(ProfMucWin *mucwin, const char *const nick) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received self nick change %s, but no window open for %s.", nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_ME, "", "** You are now known as %s", nick); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ME, "", "** You are now known as %s", nick); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 80073843..df5233bc 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -192,7 +192,7 @@ void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char *const old_nick, const char *const nick); -void mucwin_nick_change(const char *const roomjid, const char *const nick); +void mucwin_nick_change(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status); void mucwin_update_occupants(const char *const roomjid); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index eec4af29..655b2ed8 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -231,7 +231,7 @@ void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_online(ProfMucWin *mucwin, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char * const old_nick, const char * const nick) {} -void mucwin_nick_change(const char * const roomjid, const char * const nick) {} +void mucwin_nick_change(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const char * const show, const char * const status) {} void mucwin_update_occupants(const char * const roomjid) {} From e68784be432f7bce7cdd008577e7fef73c08ca15 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:19:46 +0000 Subject: [PATCH 19/36] mucwin_history takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 37 +++++++++++++++++------------------- src/ui/ui.h | 3 +-- tests/unittests/ui/stub_ui.c | 3 +-- 4 files changed, 23 insertions(+), 25 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 3e054fa9..84bc407a 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -155,7 +155,10 @@ void sv_ev_room_history(const char *const room_jid, const char *const nick, GDateTime *timestamp, const char *const message) { - mucwin_history(room_jid, nick, timestamp, message); + ProfMucWin *mucwin = wins_get_muc(room_jid); + if (mucwin) { + mucwin_history(mucwin, nick, timestamp, message); + } } void diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index f300abec..b0990cd8 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -332,29 +332,26 @@ mucwin_nick_change(ProfMucWin *mucwin, const char *const nick) } void -mucwin_history(const char *const roomjid, const char *const nick, - GDateTime *timestamp, const char *const message) +mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Room history message received from %s, but no window open for %s", nick, roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + GString *line = g_string_new(""); + + if (strncmp(message, "/me ", 4) == 0) { + g_string_append(line, "*"); + g_string_append(line, nick); + g_string_append(line, " "); + g_string_append(line, message + 4); } else { - GString *line = g_string_new(""); - - if (strncmp(message, "/me ", 4) == 0) { - g_string_append(line, "*"); - g_string_append(line, nick); - g_string_append(line, " "); - g_string_append(line, message + 4); - } else { - g_string_append(line, nick); - g_string_append(line, ": "); - g_string_append(line, message); - } - - win_print(window, '-', 0, timestamp, NO_COLOUR_DATE, 0, "", line->str); - g_string_free(line, TRUE); + g_string_append(line, nick); + g_string_append(line, ": "); + g_string_append(line, message); } + + win_print(window, '-', 0, timestamp, NO_COLOUR_DATE, 0, "", line->str); + g_string_free(line, TRUE); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index df5233bc..9784c569 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -173,8 +173,7 @@ void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char *const ni void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char *const presence); -void mucwin_history(const char *const roomjid, const char *const nick, GDateTime *timestamp, - const char *const message); +void mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message); void mucwin_message(const char *const roomjid, const char *const nick, const char *const message); void mucwin_subject(const char *const roomjid, const char *const nick, const char *const subject); void mucwin_requires_config(const char *const roomjid); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 655b2ed8..b37e8e67 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -204,8 +204,7 @@ void mucwin_occupant_affiliation_change(ProfMucWin *mucwin, const char * const n void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char * const presence) {} -void mucwin_history(const char * const roomjid, const char * const nick, - GDateTime *timestamp, const char * const message) {} +void mucwin_history(ProfMucWin *mucwin, const char * const nick, GDateTime *timestamp, const char * const message) {} void mucwin_message(const char * const roomjid, const char * const nick, const char * const message) {} void mucwin_subject(const char * const roomjid, const char * const nick, const char * const subject) {} From 986741dea853f67f881e6d48d8cd09e180a2c7c9 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:24:19 +0000 Subject: [PATCH 20/36] mucwin_message takes ProfMucWin --- src/event/server_events.c | 5 ++++- src/ui/mucwin.c | 15 +++++---------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 3 +-- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 84bc407a..b05dc22c 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -165,7 +165,10 @@ void sv_ev_room_message(const char *const room_jid, const char *const nick, const char *const message) { - mucwin_message(room_jid, nick, message); + ProfMucWin *mucwin = wins_get_muc(room_jid); + if (mucwin) { + mucwin_message(mucwin, nick, message); + } if (prefs_get_boolean(PREF_GRLOG)) { Jid *jid = jid_create(jabber_get_fulljid()); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index b0990cd8..95908875 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -355,18 +355,13 @@ mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, } void -mucwin_message(const char *const roomjid, const char *const nick, - const char *const message) +mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message) { - ProfMucWin *mucwin = wins_get_muc(roomjid); - if (mucwin == NULL) { - log_error("Room message received from %s, but no window open for %s", nick, roomjid); - return; - } + assert(mucwin != NULL); - ProfWin *window = (ProfWin*) mucwin; + ProfWin *window = (ProfWin*)mucwin; int num = wins_get_num(window); - char *my_nick = muc_nick(roomjid); + char *my_nick = muc_nick(mucwin->roomjid); if (g_strcmp0(nick, my_nick) != 0) { if (g_strrstr(message, my_nick)) { @@ -427,7 +422,7 @@ mucwin_message(const char *const roomjid, const char *const nick, 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(roomjid); + Jid *jidp = jid_create(mucwin->roomjid); if (prefs_get_boolean(PREF_NOTIFY_ROOM_TEXT)) { notify_room_message(nick, jidp->localpart, ui_index, message); } else { diff --git a/src/ui/ui.h b/src/ui/ui.h index 9784c569..db22a3ed 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -174,7 +174,7 @@ void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char const char *const role, const char *const affiliation, const char *const actor, const char *const reason); void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char *const presence); void mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message); -void mucwin_message(const char *const roomjid, const char *const nick, const char *const message); +void mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message); void mucwin_subject(const char *const roomjid, const char *const nick, const char *const subject); void mucwin_requires_config(const char *const roomjid); void mucwin_info(ProfMucWin *mucwin); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index b37e8e67..d1812d9d 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -205,8 +205,7 @@ void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char const char * const affiliation, const char * const actor, const char * const reason) {} void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char * const presence) {} void mucwin_history(ProfMucWin *mucwin, const char * const nick, GDateTime *timestamp, const char * const message) {} -void mucwin_message(const char * const roomjid, const char * const nick, - const char * const message) {} +void mucwin_message(ProfMucWin *mucwin, const char * const nick, const char * const message) {} void mucwin_subject(const char * const roomjid, const char * const nick, const char * const subject) {} void mucwin_requires_config(const char * const roomjid) {} void ui_room_destroy(const char * const roomjid) {} From 0592c7f9e95d2db6dd76c48ebe0f3411267f8191 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:26:56 +0000 Subject: [PATCH 21/36] mucwin_requires_config takes ProfMucWin --- src/event/server_events.c | 4 ++- src/ui/mucwin.c | 52 ++++++++++++++++-------------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index b05dc22c..ce0da5b8 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -597,7 +597,9 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c // room configuration required if (config_required) { muc_set_requires_config(room, TRUE); - mucwin_requires_config(room); + if (mucwin) { + mucwin_requires_config(mucwin); + } } // check for change in role/affiliation diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 95908875..9b77cf7d 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -434,37 +434,31 @@ mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const mes } void -mucwin_requires_config(const char *const roomjid) +mucwin_requires_config(ProfMucWin *mucwin) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received room config request, but no window open for %s.", roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + int num = wins_get_num(window); + int ui_index = num; + if (ui_index == 10) { + ui_index = 0; + } + + win_print(window, '-', 0, NULL, 0, 0, "", ""); + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Room locked, requires configuration."); + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Use '/room accept' to accept the defaults"); + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Use '/room destroy' to cancel and destroy the room"); + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Use '/room config' to edit the room configuration"); + win_print(window, '-', 0, NULL, 0, 0, "", ""); + + // currently in groupchat window + if (wins_is_current(window)) { + status_bar_active(num); + + // not currently on groupchat window } else { - int num = wins_get_num(window); - int ui_index = num; - if (ui_index == 10) { - ui_index = 0; - } - - win_print(window, '-', 0, NULL, 0, 0, "", ""); - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", - "Room locked, requires configuration."); - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", - "Use '/room accept' to accept the defaults"); - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", - "Use '/room destroy' to cancel and destroy the room"); - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", - "Use '/room config' to edit the room configuration"); - win_print(window, '-', 0, NULL, 0, 0, "", ""); - - // currently in groupchat window - if (wins_is_current(window)) { - status_bar_active(num); - - // not currently on groupchat window - } else { - status_bar_new(num); - } + status_bar_new(num); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index db22a3ed..a85e429f 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -176,7 +176,7 @@ void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char *const prese void mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message); void mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message); void mucwin_subject(const char *const roomjid, const char *const nick, const char *const subject); -void mucwin_requires_config(const char *const roomjid); +void mucwin_requires_config(ProfMucWin *mucwin); void mucwin_info(ProfMucWin *mucwin); void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role); void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index d1812d9d..41d240dc 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -207,7 +207,7 @@ void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char * const pres void mucwin_history(ProfMucWin *mucwin, const char * const nick, GDateTime *timestamp, const char * const message) {} void mucwin_message(ProfMucWin *mucwin, const char * const nick, const char * const message) {} void mucwin_subject(const char * const roomjid, const char * const nick, const char * const subject) {} -void mucwin_requires_config(const char * const roomjid) {} +void mucwin_requires_config(ProfMucWin *mucwin) {} void ui_room_destroy(const char * const roomjid) {} void mucwin_info(ProfMucWin *mucwin) {} void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role) {} From 23ada0d38b11b263e6634481ed8877b70939a7f1 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:29:35 +0000 Subject: [PATCH 22/36] mucwin_subject takes ProfMucWin --- src/event/server_events.c | 9 ++++--- src/ui/mucwin.c | 50 +++++++++++++++++------------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index ce0da5b8..8ceb9f22 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -146,8 +146,9 @@ void sv_ev_room_subject(const char *const room, const char *const nick, const char *const subject) { muc_set_subject(room, subject); - if (muc_roster_complete(room)) { - mucwin_subject(room, nick, subject); + ProfMucWin *mucwin = wins_get_muc(room); + if (mucwin && muc_roster_complete(room)) { + mucwin_subject(mucwin, nick, subject); } } @@ -581,8 +582,8 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c } char *subject = muc_subject(room); - if (subject) { - mucwin_subject(room, NULL, subject); + if (mucwin && subject) { + mucwin_subject(mucwin, NULL, subject); } GList *pending_broadcasts = muc_pending_broadcasts(room); diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 9b77cf7d..238db218 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -463,38 +463,36 @@ mucwin_requires_config(ProfMucWin *mucwin) } void -mucwin_subject(const char *const roomjid, const char *const nick, const char *const subject) +mucwin_subject(ProfMucWin *mucwin, const char *const nick, const char *const subject) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received room subject, but no window open for %s.", roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + int num = wins_get_num(window); + + if (subject) { + if (nick) { + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "*%s has set the room subject: ", nick); + win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", subject); + } else { + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Room subject: "); + win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", subject); + } } else { - int num = wins_get_num(window); - - if (subject) { - if (nick) { - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "*%s has set the room subject: ", nick); - win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", subject); - } else { - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Room subject: "); - win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", subject); - } + if (nick) { + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "*%s has cleared the room subject.", nick); } else { - if (nick) { - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "*%s has cleared the room subject.", nick); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Room subject cleared"); - } + win_vprint(window, '!', 0, NULL, 0, THEME_ROOMINFO, "", "Room subject cleared"); } + } - // currently in groupchat window - if (wins_is_current(window)) { - status_bar_active(num); + // currently in groupchat window + if (wins_is_current(window)) { + status_bar_active(num); - // not currently on groupchat window - } else { - status_bar_active(num); - } + // not currently on groupchat window + } else { + status_bar_active(num); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index a85e429f..3ce0fea7 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -175,7 +175,7 @@ void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char *const presence); void mucwin_history(ProfMucWin *mucwin, const char *const nick, GDateTime *timestamp, const char *const message); void mucwin_message(ProfMucWin *mucwin, const char *const nick, const char *const message); -void mucwin_subject(const char *const roomjid, const char *const nick, const char *const subject); +void mucwin_subject(ProfMucWin *mucwin, const char *const nick, const char *const subject); void mucwin_requires_config(ProfMucWin *mucwin); void mucwin_info(ProfMucWin *mucwin); void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 41d240dc..35ecc824 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -206,7 +206,7 @@ void mucwin_occupant_role_and_affiliation_change(ProfMucWin *mucwin, const char void mucwin_roster(ProfMucWin *mucwin, GList *occupants, const char * const presence) {} void mucwin_history(ProfMucWin *mucwin, const char * const nick, GDateTime *timestamp, const char * const message) {} void mucwin_message(ProfMucWin *mucwin, const char * const nick, const char * const message) {} -void mucwin_subject(const char * const roomjid, const char * const nick, const char * const subject) {} +void mucwin_subject(ProfMucWin *mucwin, const char * const nick, const char * const subject) {} void mucwin_requires_config(ProfMucWin *mucwin) {} void ui_room_destroy(const char * const roomjid) {} void mucwin_info(ProfMucWin *mucwin) {} From 5c53c94253e61b2eac03a46d2aa05db3c86d2e72 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:33:31 +0000 Subject: [PATCH 23/36] mucwin_kick_error takes ProfMucWin --- src/ui/mucwin.c | 12 +++++------- src/ui/ui.h | 2 +- src/xmpp/iq.c | 7 +++---- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 238db218..f4e104ca 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -497,14 +497,12 @@ mucwin_subject(ProfMucWin *mucwin, const char *const nick, const char *const sub } void -mucwin_kick_error(const char *const roomjid, const char *const nick, const char *const error) +mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Kick error received for %s, but no window open for %s.", nick, roomjid); - } else { - win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error kicking %s: %s", nick, error); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error kicking %s: %s", nick, error); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 3ce0fea7..5cfa3c8e 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -206,7 +206,7 @@ void mucwin_role_set_error(const char *const roomjid, const char *const nick, co const char *const error); void mucwin_role_list_error(const char *const roomjid, const char *const role, const char *const error); void mucwin_handle_role_list(const char *const roomjid, const char *const role, GSList *nicks); -void mucwin_kick_error(const char *const roomjid, const char *const nick, const char *const error); +void mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const error); // xml console void xmlwin_show(ProfXMLWin *xmlwin, const char *const msg); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 6029fe2b..e8b41235 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1462,12 +1462,11 @@ _room_kick_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stanza, } // handle error responses - if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin && (g_strcmp0(type, STANZA_TYPE_ERROR) == 0)) { char *error_message = stanza_get_error_message(stanza); - mucwin_kick_error(from, nick, error_message); + mucwin_kick_error(mucwin, nick, error_message); free(error_message); - free(nick); - return 0; } free(nick); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 35ecc824..25f353b5 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -281,7 +281,7 @@ void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const error) {} void mucwin_role_list_error(const char * const roomjid, const char * const role, const char * const error) {} void mucwin_handle_role_list(const char * const roomjid, const char * const role, GSList *nicks) {} -void mucwin_kick_error(const char * const roomjid, const char * const nick, const char * const error) {} +void mucwin_kick_error(ProfMucWin *mucwin, const char * const nick, const char * const error) {} void ui_show_form(ProfMucConfWin *confwin) {} void ui_show_form_field(ProfWin *window, DataForm *form, char *tag) {} void ui_show_form_help(ProfMucConfWin *confwin) {} From 2e81a4efa331c648313dd57a16fdd29c139a7e2d Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:36:25 +0000 Subject: [PATCH 24/36] mucwin_broadcast takes ProfMucWin --- src/event/server_events.c | 9 ++++++--- src/ui/mucwin.c | 32 +++++++++++++++----------------- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 3 +-- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/event/server_events.c b/src/event/server_events.c index 8ceb9f22..a56a54b0 100644 --- a/src/event/server_events.c +++ b/src/event/server_events.c @@ -136,7 +136,10 @@ void sv_ev_room_broadcast(const char *const room_jid, const char *const message) { if (muc_roster_complete(room_jid)) { - mucwin_broadcast(room_jid, message); + ProfMucWin *mucwin = wins_get_muc(room_jid); + if (mucwin) { + mucwin_broadcast(mucwin, message); + } } else { muc_pending_broadcasts_add(room_jid, message); } @@ -587,10 +590,10 @@ sv_ev_muc_self_online(const char *const room, const char *const nick, gboolean c } GList *pending_broadcasts = muc_pending_broadcasts(room); - if (pending_broadcasts) { + if (mucwin && pending_broadcasts) { GList *curr = pending_broadcasts; while (curr) { - mucwin_broadcast(room, curr->data); + mucwin_broadcast(mucwin, curr->data); curr = g_list_next(curr); } } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index f4e104ca..a7668479 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -506,25 +506,23 @@ mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const } void -mucwin_broadcast(const char *const roomjid, const char *const message) +mucwin_broadcast(ProfMucWin *mucwin, const char *const message) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window == NULL) { - log_error("Received room broadcast, but no window open for %s.", roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + int num = wins_get_num(window); + + win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Room message: "); + win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", message); + + // currently in groupchat window + if (wins_is_current(window)) { + status_bar_active(num); + + // not currently on groupchat window } else { - int num = wins_get_num(window); - - win_vprint(window, '!', 0, NULL, NO_EOL, THEME_ROOMINFO, "", "Room message: "); - win_vprint(window, '!', 0, NULL, NO_DATE, 0, "", "%s", message); - - // currently in groupchat window - if (wins_is_current(window)) { - status_bar_active(num); - - // not currently on groupchat window - } else { - status_bar_new(num); - } + status_bar_new(num); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 5cfa3c8e..38c66a05 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -186,7 +186,7 @@ void mucwin_occupant_kicked(ProfMucWin *mucwin, const char *const nick, const ch const char *const reason); void mucwin_occupant_banned(ProfMucWin *mucwin, const char *const nick, const char *const actor, const char *const reason); -void mucwin_broadcast(const char *const roomjid, const char *const message); +void mucwin_broadcast(ProfMucWin *mucwin, const char *const message); void mucwin_occupant_offline(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_online(ProfMucWin *mucwin, const char *const nick, const char *const roles, const char *const affiliation, const char *const show, const char *const status); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 25f353b5..9b1be95f 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -223,8 +223,7 @@ void ui_room_banned(const char * const roomjid, const char * const actor, const void mucwin_occupant_banned(ProfMucWin *mucwin, const char * const nick, const char * const actor, const char * const reason) {} void ui_leave_room(const char * const roomjid) {} -void mucwin_broadcast(const char * const roomjid, - const char * const message) {} +void mucwin_broadcast(ProfMucWin *mucwin, const char * const message) {} void mucwin_occupant_offline(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_online(ProfMucWin *mucwin, const char * const nick, const char * const roles, const char * const affiliation, const char * const show, const char * const status) {} From d81dbdb23370374d972a97c046b76f81f2094f9f Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:38:26 +0000 Subject: [PATCH 25/36] mucwin_affiliation_list_error takes ProfMucWin --- src/ui/mucwin.c | 10 +++++----- src/ui/ui.h | 3 +-- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 3 +-- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index a7668479..92ab02e7 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -527,13 +527,13 @@ mucwin_broadcast(ProfMucWin *mucwin, const char *const message) } void -mucwin_affiliation_list_error(const char *const roomjid, const char *const affiliation, +mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error retrieving %s list: %s", affiliation, error); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error retrieving %s list: %s", affiliation, error); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 38c66a05..05cc6a84 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -197,8 +197,7 @@ void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const void mucwin_update_occupants(const char *const roomjid); void mucwin_show_occupants(const char *const roomjid); void mucwin_hide_occupants(const char *const roomjid); -void mucwin_affiliation_list_error(const char *const roomjid, const char *const affiliation, - const char *const error); +void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); void mucwin_handle_affiliation_list(const char *const roomjid, const char *const affiliation, GSList *jids); void mucwin_affiliation_set_error(const char *const roomjid, const char *const jid, const char *const affiliation, const char *const error); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index e8b41235..e352c26b 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1343,7 +1343,10 @@ _room_affiliation_list_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *co if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { char *error_message = stanza_get_error_message(stanza); log_debug("Error retrieving %s list for room %s: %s", affiliation, from, error_message); - mucwin_affiliation_list_error(from, affiliation, error_message); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_affiliation_list_error(mucwin, affiliation, error_message); + } free(error_message); free(affiliation); return 0; diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 9b1be95f..3b3e03d6 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -271,8 +271,7 @@ void ui_handle_room_configuration(const char * const roomjid, DataForm *form) {} void ui_handle_room_configuration_form_error(const char * const roomjid, const char * const message) {} void ui_handle_room_config_submit_result(const char * const roomjid) {} void ui_handle_room_config_submit_result_error(const char * const roomjid, const char * const message) {} -void mucwin_affiliation_list_error(const char * const roomjid, const char * const affiliation, - const char * const error) {} +void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char * const affiliation, const char * const error) {} void mucwin_handle_affiliation_list(const char * const roomjid, const char * const affiliation, GSList *jids) {} void mucwin_affiliation_set_error(const char * const roomjid, const char * const jid, const char * const affiliation, const char * const error) {} From 3341e8c202b606b6d8b4ab1eed376ef9b58eb9e9 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:40:23 +0000 Subject: [PATCH 26/36] mucwin_handle_affiliation_list takes ProfMucWin --- src/ui/mucwin.c | 30 +++++++++++++++--------------- src/ui/ui.h | 2 +- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 92ab02e7..d13a89f1 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -537,23 +537,23 @@ mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, } void -mucwin_handle_affiliation_list(const char *const roomjid, const char *const affiliation, GSList *jids) +mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - if (jids) { - win_vprint(window, '!', 0, NULL, 0, 0, "", "Affiliation: %s", affiliation); - GSList *curr_jid = jids; - while (curr_jid) { - char *jid = curr_jid->data; - win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", jid); - curr_jid = g_slist_next(curr_jid); - } - win_print(window, '!', 0, NULL, 0, 0, "", ""); - } else { - win_vprint(window, '!', 0, NULL, 0, 0, "", "No users found with affiliation: %s", affiliation); - win_print(window, '!', 0, NULL, 0, 0, "", ""); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if (jids) { + win_vprint(window, '!', 0, NULL, 0, 0, "", "Affiliation: %s", affiliation); + GSList *curr_jid = jids; + while (curr_jid) { + char *jid = curr_jid->data; + win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", jid); + curr_jid = g_slist_next(curr_jid); } + win_print(window, '!', 0, NULL, 0, 0, "", ""); + } else { + win_vprint(window, '!', 0, NULL, 0, 0, "", "No users found with affiliation: %s", affiliation); + win_print(window, '!', 0, NULL, 0, 0, "", ""); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 05cc6a84..6dd32000 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -198,7 +198,7 @@ void mucwin_update_occupants(const char *const roomjid); void mucwin_show_occupants(const char *const roomjid); void mucwin_hide_occupants(const char *const roomjid); void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); -void mucwin_handle_affiliation_list(const char *const roomjid, const char *const affiliation, GSList *jids); +void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids); void mucwin_affiliation_set_error(const char *const roomjid, const char *const jid, const char *const affiliation, const char *const error); void mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index e352c26b..025690b2 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1369,7 +1369,10 @@ _room_affiliation_list_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *co } muc_jid_autocomplete_add_all(from, jids); - mucwin_handle_affiliation_list(from, affiliation, jids); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_handle_affiliation_list(mucwin, affiliation, jids); + } free(affiliation); g_slist_free(jids); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 3b3e03d6..505f30f5 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -272,7 +272,7 @@ void ui_handle_room_configuration_form_error(const char * const roomjid, const c void ui_handle_room_config_submit_result(const char * const roomjid) {} void ui_handle_room_config_submit_result_error(const char * const roomjid, const char * const message) {} void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char * const affiliation, const char * const error) {} -void mucwin_handle_affiliation_list(const char * const roomjid, const char * const affiliation, GSList *jids) {} +void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char * const affiliation, GSList *jids) {} void mucwin_affiliation_set_error(const char * const roomjid, const char * const jid, const char * const affiliation, const char * const error) {} void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const role, From 2792c5903187eae6476934db710c033cd1f033b5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:41:52 +0000 Subject: [PATCH 27/36] Added assert to mucwin_show_affiliation_list --- src/ui/mucwin.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index d13a89f1..66919b95 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -560,6 +560,8 @@ mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation void mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) { + assert(mucwin != NULL); + ProfWin *window = (ProfWin*) mucwin; GSList *occupants = muc_occupants_by_affiliation(mucwin->roomjid, affiliation); From 1aa3c0ea4fcb8dceaf7de04961a00b243fcc0e83 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:44:33 +0000 Subject: [PATCH 28/36] mucwin_role_list_error takes ProfMucWin --- src/ui/mucwin.c | 10 +++++----- src/ui/ui.h | 2 +- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 66919b95..e598c50b 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -620,12 +620,12 @@ mucwin_show_affiliation_list(ProfMucWin *mucwin, muc_affiliation_t affiliation) } void -mucwin_role_list_error(const char *const roomjid, const char *const role, const char *const error) +mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error retrieving %s list: %s", role, error); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error retrieving %s list: %s", role, error); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 6dd32000..57741bbc 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -203,7 +203,7 @@ void mucwin_affiliation_set_error(const char *const roomjid, const char *const j const char *const affiliation, const char *const error); void mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, const char *const error); -void mucwin_role_list_error(const char *const roomjid, const char *const role, const char *const error); +void mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *const error); void mucwin_handle_role_list(const char *const roomjid, const char *const role, GSList *nicks); void mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const error); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 025690b2..e62e49bf 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1397,7 +1397,10 @@ _room_role_list_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const sta if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { char *error_message = stanza_get_error_message(stanza); log_debug("Error retrieving %s list for room %s: %s", role, from, error_message); - mucwin_role_list_error(from, role, error_message); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_role_list_error(mucwin, role, error_message); + } free(error_message); free(role); return 0; diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 505f30f5..cc521778 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -277,7 +277,7 @@ void mucwin_affiliation_set_error(const char * const roomjid, const char * const const char * const affiliation, const char * const error) {} void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const role, const char * const error) {} -void mucwin_role_list_error(const char * const roomjid, const char * const role, const char * const error) {} +void mucwin_role_list_error(ProfMucWin *mucwin, const char * const role, const char * const error) {} void mucwin_handle_role_list(const char * const roomjid, const char * const role, GSList *nicks) {} void mucwin_kick_error(ProfMucWin *mucwin, const char * const nick, const char * const error) {} void ui_show_form(ProfMucConfWin *confwin) {} From 7bedb6c2949bf1a88c7637ff27a5781e255790a5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:47:43 +0000 Subject: [PATCH 29/36] mucwin_handle_role_list takes ProfMucWin --- src/ui/mucwin.c | 40 ++++++++++++++++++------------------ src/ui/ui.h | 2 +- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index e598c50b..d3d29ee0 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -629,32 +629,32 @@ mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *c } void -mucwin_handle_role_list(const char *const roomjid, const char *const role, GSList *nicks) +mucwin_handle_role_list(ProfMucWin *mucwin, const char *const role, GSList *nicks) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - if (nicks) { - win_vprint(window, '!', 0, NULL, 0, 0, "", "Role: %s", role); - GSList *curr_nick = nicks; - while (curr_nick) { - char *nick = curr_nick->data; - Occupant *occupant = muc_roster_item(roomjid, nick); - if (occupant) { - if (occupant->jid) { - win_vprint(window, '!', 0, NULL, 0, 0, "", " %s (%s)", nick, occupant->jid); - } else { - win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", nick); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if (nicks) { + win_vprint(window, '!', 0, NULL, 0, 0, "", "Role: %s", role); + GSList *curr_nick = nicks; + while (curr_nick) { + char *nick = curr_nick->data; + Occupant *occupant = muc_roster_item(mucwin->roomjid, nick); + if (occupant) { + if (occupant->jid) { + win_vprint(window, '!', 0, NULL, 0, 0, "", " %s (%s)", nick, occupant->jid); } else { win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", nick); } - curr_nick = g_slist_next(curr_nick); + } else { + win_vprint(window, '!', 0, NULL, 0, 0, "", " %s", nick); } - win_print(window, '!', 0, NULL, 0, 0, "", ""); - } else { - win_vprint(window, '!', 0, NULL, 0, 0, "", "No occupants found with role: %s", role); - win_print(window, '!', 0, NULL, 0, 0, "", ""); + curr_nick = g_slist_next(curr_nick); } + win_print(window, '!', 0, NULL, 0, 0, "", ""); + } else { + win_vprint(window, '!', 0, NULL, 0, 0, "", "No occupants found with role: %s", role); + win_print(window, '!', 0, NULL, 0, 0, "", ""); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 57741bbc..fae8491e 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -204,7 +204,7 @@ void mucwin_affiliation_set_error(const char *const roomjid, const char *const j void mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, const char *const error); void mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *const error); -void mucwin_handle_role_list(const char *const roomjid, const char *const role, GSList *nicks); +void mucwin_handle_role_list(ProfMucWin *mucwin, const char *const role, GSList *nicks); void mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const error); // xml console diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index e62e49bf..4b3d9dcd 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1422,7 +1422,10 @@ _room_role_list_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const sta } } - mucwin_handle_role_list(from, role, nicks); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_handle_role_list(mucwin, role, nicks); + } free(role); g_slist_free(nicks); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index cc521778..529c5026 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -278,7 +278,7 @@ void mucwin_affiliation_set_error(const char * const roomjid, const char * const void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const role, const char * const error) {} void mucwin_role_list_error(ProfMucWin *mucwin, const char * const role, const char * const error) {} -void mucwin_handle_role_list(const char * const roomjid, const char * const role, GSList *nicks) {} +void mucwin_handle_role_list(ProfMucWin *mucwin, const char * const role, GSList *nicks) {} void mucwin_kick_error(ProfMucWin *mucwin, const char * const nick, const char * const error) {} void ui_show_form(ProfMucConfWin *confwin) {} void ui_show_form_field(ProfWin *window, DataForm *form, char *tag) {} From c9db9257ae2130870157ca63851ae2080c41ffe5 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:49:05 +0000 Subject: [PATCH 30/36] Added assert to mucwin_show_role_list --- src/ui/mucwin.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index d3d29ee0..ec39bbed 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -661,7 +661,9 @@ mucwin_handle_role_list(ProfMucWin *mucwin, const char *const role, GSList *nick void mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role) { - ProfWin *window = (ProfWin*) mucwin; + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; GSList *occupants = muc_occupants_by_role(mucwin->roomjid, role); if (!occupants) { From 982bc8e066066f3027c33f628b1a0be233a4a1bc Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:51:12 +0000 Subject: [PATCH 31/36] mucwin_affiliation_set_error takes ProfMucWin --- src/ui/mucwin.c | 10 +++++----- src/ui/ui.h | 4 ++-- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 4 ++-- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index ec39bbed..8217faf5 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -715,13 +715,13 @@ mucwin_show_role_list(ProfMucWin *mucwin, muc_role_t role) } void -mucwin_affiliation_set_error(const char *const roomjid, const char *const jid, const char *const affiliation, +mucwin_affiliation_set_error(ProfMucWin *mucwin, const char *const jid, const char *const affiliation, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error setting %s affiliation for %s: %s", affiliation, jid, error); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error setting %s affiliation for %s: %s", affiliation, jid, error); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index fae8491e..351998c3 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -199,8 +199,8 @@ void mucwin_show_occupants(const char *const roomjid); void mucwin_hide_occupants(const char *const roomjid); void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids); -void mucwin_affiliation_set_error(const char *const roomjid, const char *const jid, - const char *const affiliation, const char *const error); +void mucwin_affiliation_set_error(ProfMucWin *mucwin, const char *const jid, const char *const affiliation, + const char *const error); void mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, const char *const error); void mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *const error); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 4b3d9dcd..9d0763df 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1284,7 +1284,10 @@ _room_affiliation_set_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *con if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { char *error_message = stanza_get_error_message(stanza); log_debug("Error setting affiliation %s list for room %s, user %s: %s", affiliation_set->privilege, from, affiliation_set->item, error_message); - mucwin_affiliation_set_error(from, affiliation_set->item, affiliation_set->privilege, error_message); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_affiliation_set_error(mucwin, affiliation_set->item, affiliation_set->privilege, error_message); + } free(error_message); } diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 529c5026..2dc55567 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -273,8 +273,8 @@ void ui_handle_room_config_submit_result(const char * const roomjid) {} void ui_handle_room_config_submit_result_error(const char * const roomjid, const char * const message) {} void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char * const affiliation, const char * const error) {} void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char * const affiliation, GSList *jids) {} -void mucwin_affiliation_set_error(const char * const roomjid, const char * const jid, - const char * const affiliation, const char * const error) {} +void mucwin_affiliation_set_error(ProfMucWin *mucwin, const char * const jid, const char * const affiliation, + const char * const error) {} void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const role, const char * const error) {} void mucwin_role_list_error(ProfMucWin *mucwin, const char * const role, const char * const error) {} From 1602011e01413eec01c755155f18bedba6722a23 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:52:50 +0000 Subject: [PATCH 32/36] mucwin_role_set_error takes ProfMucWin --- src/ui/mucwin.c | 10 +++++----- src/ui/ui.h | 3 +-- src/xmpp/iq.c | 5 ++++- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 8217faf5..c508b676 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -725,13 +725,13 @@ mucwin_affiliation_set_error(ProfMucWin *mucwin, const char *const jid, const ch } void -mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, +mucwin_role_set_error(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const error) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window) { - win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error setting %s role for %s: %s", role, nick, error); - } + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + win_vprint(window, '!', 0, NULL, 0, THEME_ERROR, "", "Error setting %s role for %s: %s", role, nick, error); } void diff --git a/src/ui/ui.h b/src/ui/ui.h index 351998c3..a483bc81 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -201,8 +201,7 @@ void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affilia void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids); void mucwin_affiliation_set_error(ProfMucWin *mucwin, const char *const jid, const char *const affiliation, const char *const error); -void mucwin_role_set_error(const char *const roomjid, const char *const nick, const char *const role, - const char *const error); +void mucwin_role_set_error(ProfMucWin *mucwin, const char *const nick, const char *const role, const char *const error); void mucwin_role_list_error(ProfMucWin *mucwin, const char *const role, const char *const error); void mucwin_handle_role_list(ProfMucWin *mucwin, const char *const role, GSList *nicks); void mucwin_kick_error(ProfMucWin *mucwin, const char *const nick, const char *const error); diff --git a/src/xmpp/iq.c b/src/xmpp/iq.c index 9d0763df..252dcd71 100644 --- a/src/xmpp/iq.c +++ b/src/xmpp/iq.c @@ -1317,7 +1317,10 @@ _room_role_set_result_handler(xmpp_conn_t *const conn, xmpp_stanza_t *const stan if (g_strcmp0(type, STANZA_TYPE_ERROR) == 0) { char *error_message = stanza_get_error_message(stanza); log_debug("Error setting role %s list for room %s, user %s: %s", role_set->privilege, from, role_set->item, error_message); - mucwin_role_set_error(from, role_set->item, role_set->privilege, error_message); + ProfMucWin *mucwin = wins_get_muc(from); + if (mucwin) { + mucwin_role_set_error(mucwin, role_set->item, role_set->privilege, error_message); + } free(error_message); } diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 2dc55567..77887a97 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -275,7 +275,7 @@ void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char * const affili void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char * const affiliation, GSList *jids) {} void mucwin_affiliation_set_error(ProfMucWin *mucwin, const char * const jid, const char * const affiliation, const char * const error) {} -void mucwin_role_set_error(const char * const roomjid, const char * const nick, const char * const role, +void mucwin_role_set_error(ProfMucWin *mucwin, const char * const nick, const char * const role, const char * const error) {} void mucwin_role_list_error(ProfMucWin *mucwin, const char * const role, const char * const error) {} void mucwin_handle_role_list(ProfMucWin *mucwin, const char * const role, GSList *nicks) {} From 6c2617ccdae840de3894437aad50e6e1d3317776 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:53:54 +0000 Subject: [PATCH 33/36] Added assert to mucwin_info --- src/ui/mucwin.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index c508b676..a1a5c850 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -737,6 +737,8 @@ mucwin_role_set_error(ProfMucWin *mucwin, const char *const nick, const char *co void mucwin_info(ProfMucWin *mucwin) { + assert(mucwin != NULL); + char *role = muc_role_str(mucwin->roomjid); char *affiliation = muc_affiliation_str(mucwin->roomjid); From ce0763e1607b1a6ee70a458f68cf00a44593b54d Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:57:13 +0000 Subject: [PATCH 34/36] mucwin_update_occupants takes ProfMucWin --- src/command/commands.c | 4 ++-- src/ui/mucwin.c | 10 ++++++---- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index 98d2ec8a..dc0c0137 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -3171,14 +3171,14 @@ cmd_occupants(ProfWin *window, const char *const command, gchar **args) if (g_strcmp0(args[0], "show") == 0) { if (g_strcmp0(args[1], "jid") == 0) { mucwin->showjid = TRUE; - mucwin_update_occupants(mucwin->roomjid); + mucwin_update_occupants(mucwin); } else { mucwin_show_occupants(mucwin->roomjid); } } else if (g_strcmp0(args[0], "hide") == 0) { if (g_strcmp0(args[1], "jid") == 0) { mucwin->showjid = FALSE; - mucwin_update_occupants(mucwin->roomjid); + mucwin_update_occupants(mucwin); } else { mucwin_hide_occupants(mucwin->roomjid); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index a1a5c850..777ee461 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -750,11 +750,13 @@ mucwin_info(ProfMucWin *mucwin) } void -mucwin_update_occupants(const char *const roomjid) +mucwin_update_occupants(ProfMucWin *mucwin) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window && win_has_active_subwin(window)) { - occupantswin_occupants(roomjid); + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if (win_has_active_subwin(window)) { + occupantswin_occupants(mucwin->roomjid); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index a483bc81..469765ad 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -194,7 +194,7 @@ void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char *const old_nick, void mucwin_nick_change(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status); -void mucwin_update_occupants(const char *const roomjid); +void mucwin_update_occupants(ProfMucWin *mucwin); void mucwin_show_occupants(const char *const roomjid); void mucwin_hide_occupants(const char *const roomjid); void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 77887a97..c5c75c51 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -231,7 +231,7 @@ void mucwin_occupant_nick_change(ProfMucWin *mucwin, const char * const old_nick void mucwin_nick_change(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const char * const show, const char * const status) {} -void mucwin_update_occupants(const char * const roomjid) {} +void mucwin_update_occupants(ProfMucWin *mucwin) {} void mucwin_show_occupants(const char * const roomjid) {} void mucwin_hide_occupants(const char * const roomjid) {} void ui_show_roster(void) {} From 668f92ece2e3be8287f9a742d908bfd96fe6594d Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 00:59:27 +0000 Subject: [PATCH 35/36] mucwin_show_occupants takes ProfMucWin --- src/command/commands.c | 2 +- src/ui/core.c | 2 +- src/ui/mucwin.c | 10 ++++++---- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index dc0c0137..0d658576 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -3173,7 +3173,7 @@ cmd_occupants(ProfWin *window, const char *const command, gchar **args) mucwin->showjid = TRUE; mucwin_update_occupants(mucwin); } else { - mucwin_show_occupants(mucwin->roomjid); + mucwin_show_occupants(mucwin); } } else if (g_strcmp0(args[0], "hide") == 0) { if (g_strcmp0(args[1], "jid") == 0) { diff --git a/src/ui/core.c b/src/ui/core.c index b6cc5b3c..b00a703d 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -668,7 +668,7 @@ ui_show_all_room_rosters(void) if (window->type == WIN_MUC && !win_has_active_subwin(window)) { ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); - mucwin_show_occupants(mucwin->roomjid); + mucwin_show_occupants(mucwin); } curr = g_list_next(curr); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 777ee461..6406b291 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -761,12 +761,14 @@ mucwin_update_occupants(ProfMucWin *mucwin) } void -mucwin_show_occupants(const char *const roomjid) +mucwin_show_occupants(ProfMucWin *mucwin) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window && !win_has_active_subwin(window)) { + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if (!win_has_active_subwin(window)) { wins_show_subwin(window); - occupantswin_occupants(roomjid); + occupantswin_occupants(mucwin->roomjid); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index 469765ad..a08208b3 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -195,7 +195,7 @@ void mucwin_nick_change(ProfMucWin *mucwin, const char *const nick); void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const char *const show, const char *const status); void mucwin_update_occupants(ProfMucWin *mucwin); -void mucwin_show_occupants(const char *const roomjid); +void mucwin_show_occupants(ProfMucWin *mucwin); void mucwin_hide_occupants(const char *const roomjid); void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids); diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index c5c75c51..308f8a7e 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -232,7 +232,7 @@ void mucwin_nick_change(ProfMucWin *mucwin, const char * const nick) {} void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const char * const show, const char * const status) {} void mucwin_update_occupants(ProfMucWin *mucwin) {} -void mucwin_show_occupants(const char * const roomjid) {} +void mucwin_show_occupants(ProfMucWin *mucwin) {} void mucwin_hide_occupants(const char * const roomjid) {} void ui_show_roster(void) {} void ui_hide_roster(void) {} From 6779c5bf682b3e71852e22a20cc38eebf6483469 Mon Sep 17 00:00:00 2001 From: James Booth Date: Mon, 2 Nov 2015 01:01:37 +0000 Subject: [PATCH 36/36] mucwin_hide_occupants takes ProfMucWin --- src/command/commands.c | 2 +- src/ui/core.c | 2 +- src/ui/mucwin.c | 8 +++++--- src/ui/ui.h | 2 +- tests/unittests/ui/stub_ui.c | 2 +- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/command/commands.c b/src/command/commands.c index 0d658576..a3c45d76 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -3180,7 +3180,7 @@ cmd_occupants(ProfWin *window, const char *const command, gchar **args) mucwin->showjid = FALSE; mucwin_update_occupants(mucwin); } else { - mucwin_hide_occupants(mucwin->roomjid); + mucwin_hide_occupants(mucwin); } } else { cons_bad_cmd_usage(command); diff --git a/src/ui/core.c b/src/ui/core.c index b00a703d..75fa61fb 100644 --- a/src/ui/core.c +++ b/src/ui/core.c @@ -647,7 +647,7 @@ ui_hide_all_room_rosters(void) if (window->type == WIN_MUC && win_has_active_subwin(window)) { ProfMucWin *mucwin = (ProfMucWin*)window; assert(mucwin->memcheck == PROFMUCWIN_MEMCHECK); - mucwin_hide_occupants(mucwin->roomjid); + mucwin_hide_occupants(mucwin); } curr = g_list_next(curr); } diff --git a/src/ui/mucwin.c b/src/ui/mucwin.c index 6406b291..fb224598 100644 --- a/src/ui/mucwin.c +++ b/src/ui/mucwin.c @@ -773,10 +773,12 @@ mucwin_show_occupants(ProfMucWin *mucwin) } void -mucwin_hide_occupants(const char *const roomjid) +mucwin_hide_occupants(ProfMucWin *mucwin) { - ProfWin *window = (ProfWin*)wins_get_muc(roomjid); - if (window && win_has_active_subwin(window)) { + assert(mucwin != NULL); + + ProfWin *window = (ProfWin*)mucwin; + if (win_has_active_subwin(window)) { wins_hide_subwin(window); } } diff --git a/src/ui/ui.h b/src/ui/ui.h index a08208b3..b3753dbb 100644 --- a/src/ui/ui.h +++ b/src/ui/ui.h @@ -196,7 +196,7 @@ void mucwin_occupant_presence(ProfMucWin *mucwin, const char *const nick, const const char *const status); void mucwin_update_occupants(ProfMucWin *mucwin); void mucwin_show_occupants(ProfMucWin *mucwin); -void mucwin_hide_occupants(const char *const roomjid); +void mucwin_hide_occupants(ProfMucWin *mucwin); void mucwin_affiliation_list_error(ProfMucWin *mucwin, const char *const affiliation, const char *const error); void mucwin_handle_affiliation_list(ProfMucWin *mucwin, const char *const affiliation, GSList *jids); void mucwin_affiliation_set_error(ProfMucWin *mucwin, const char *const jid, const char *const affiliation, diff --git a/tests/unittests/ui/stub_ui.c b/tests/unittests/ui/stub_ui.c index 308f8a7e..b98f630a 100644 --- a/tests/unittests/ui/stub_ui.c +++ b/tests/unittests/ui/stub_ui.c @@ -233,7 +233,7 @@ void mucwin_occupant_presence(ProfMucWin *mucwin, const char * const nick, const const char * const status) {} void mucwin_update_occupants(ProfMucWin *mucwin) {} void mucwin_show_occupants(ProfMucWin *mucwin) {} -void mucwin_hide_occupants(const char * const roomjid) {} +void mucwin_hide_occupants(ProfMucWin *mucwin) {} void ui_show_roster(void) {} void ui_hide_roster(void) {} void ui_roster_add(const char * const barejid, const char * const name) {}