about summary refs log tree commit diff stats
path: root/src/server_events.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server_events.c')
-rw-r--r--src/server_events.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/server_events.c b/src/server_events.c
index d18f1beb..6fb06c74 100644
--- a/src/server_events.c
+++ b/src/server_events.c
@@ -174,15 +174,22 @@ void
 handle_room_broadcast(const char *const room_jid,
     const char * const message)
 {
-    ui_room_broadcast(room_jid, message);
-    ui_current_page_off();
+    if (muc_get_roster_received(room_jid)) {
+        ui_room_broadcast(room_jid, message);
+        ui_current_page_off();
+    } else {
+        muc_add_pending_broadcast(room_jid, message);
+    }
 }
 
 void
 handle_room_subject(const char * const room_jid, const char * const subject)
 {
-    ui_room_subject(room_jid, subject);
-    ui_current_page_off();
+    muc_set_subject(room_jid, subject);
+    if (muc_get_roster_received(room_jid)) {
+        ui_room_subject(room_jid, subject);
+        ui_current_page_off();
+    }
 }
 
 void
@@ -451,7 +458,22 @@ handle_room_roster_complete(const char * const room)
     muc_set_roster_received(room);
     GList *roster = muc_get_roster(room);
     ui_room_roster(room, roster, NULL);
-    ui_current_page_off();
+
+    char *subject = muc_get_subject(room);
+    if (subject != NULL) {
+        ui_room_subject(room, subject);
+        ui_current_page_off();
+    }
+
+    GList *pending_broadcasts = muc_get_pending_broadcasts(room);
+    if (pending_broadcasts != NULL) {
+        GList *curr = pending_broadcasts;
+        while (curr != NULL) {
+            ui_room_broadcast(room, curr->data);
+            curr = g_list_next(curr);
+        }
+        ui_current_page_off();
+    }
 }
 
 void