about summary refs log tree commit diff stats
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/console.c9
-rw-r--r--src/ui/core.c53
-rw-r--r--src/ui/notifier.c2
-rw-r--r--src/ui/ui.h4
-rw-r--r--src/ui/window.c81
-rw-r--r--src/ui/window.h3
6 files changed, 115 insertions, 37 deletions
diff --git a/src/ui/console.c b/src/ui/console.c
index 5c0a4e53..a34ff71d 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -32,6 +32,7 @@
  *
  */
 
+
 #include <string.h>
 #include <stdlib.h>
 
@@ -282,14 +283,14 @@ _cons_show_info(PContact pcontact)
 }
 
 static void
-_cons_show_caps(const char * const fulljid, Resource *resource)
+_cons_show_caps(const char * const fulljid, resource_presence_t presence)
 {
     ProfWin *console = wins_get_console();
     cons_show("");
 
     Capabilities *caps = caps_lookup(fulljid);
     if (caps) {
-        const char *resource_presence = string_from_resource_presence(resource->presence);
+        const char *resource_presence = string_from_resource_presence(presence);
 
         int presence_colour = win_presence_colour(resource_presence);
         win_save_vprint(console, '-', NULL, NO_EOL, presence_colour, "", "%s", fulljid);
@@ -454,7 +455,7 @@ _cons_show_bookmarks(const GList *list)
 
             int presence_colour = 0;
 
-            if (muc_room_is_active(item->jid)) {
+            if (muc_active(item->jid)) {
                 presence_colour = COLOUR_ONLINE;
             }
             win_save_vprint(console, '-', NULL, NO_EOL, presence_colour, "", "  %s", item->jid);
@@ -467,7 +468,7 @@ _cons_show_bookmarks(const GList *list)
             if (item->password != NULL) {
                 win_save_print(console, '-', NULL, NO_DATE | NO_EOL, presence_colour, "", " (private)");
             }
-            if (muc_room_is_active(item->jid)) {
+            if (muc_active(item->jid)) {
                 ProfWin *roomwin = wins_get_by_recipient(item->jid);
                 if (roomwin != NULL) {
                     int num = wins_get_num(roomwin);
diff --git a/src/ui/core.c b/src/ui/core.c
index 18eff596..500e435b 100644
--- a/src/ui/core.c
+++ b/src/ui/core.c
@@ -1207,7 +1207,7 @@ _ui_new_chat_win(const char * const to)
     if (window == NULL) {
         Jid *jid = jid_create(to);
 
-        if (muc_room_is_active(jid->barejid)) {
+        if (muc_active(jid->barejid)) {
             window = wins_new(to, WIN_PRIVATE);
         } else {
             window = wins_new(to, WIN_CHAT);
@@ -1324,7 +1324,7 @@ _ui_outgoing_msg(const char * const from, const char * const to,
     if (window == NULL) {
         Jid *jid = jid_create(to);
 
-        if (muc_room_is_active(jid->barejid)) {
+        if (muc_active(jid->barejid)) {
             window = wins_new(to, WIN_PRIVATE);
         } else {
             window = wins_new(to, WIN_CHAT);
@@ -1377,7 +1377,7 @@ _ui_room_join(const char * const room, gboolean focus)
     } else {
         status_bar_active(num);
         ProfWin *console = wins_get_console();
-        char *nick = muc_get_room_nick(room);
+        char *nick = muc_nick(room);
         win_save_vprint(console, '!', NULL, 0, COLOUR_TYPING, "", "-> Autojoined %s as %s (%d).", room, nick, num);
     }
 }
@@ -1393,26 +1393,25 @@ _ui_room_roster(const char * const room, GList *roster, const char * const prese
             if (presence == NULL) {
                 win_save_print(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "Room is empty.");
             } else {
-                win_save_vprint(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "No participants %s.", presence);
+                win_save_vprint(window, '!', NULL, 0, COLOUR_ROOMINFO, "", "No occupants %s.", presence);
             }
         } else {
             int length = g_list_length(roster);
             if (presence == NULL) {
                 length++;
-                win_save_vprint(window, '!', NULL, NO_EOL, COLOUR_ROOMINFO, "", "%d participants: ", length);
-                win_save_vprint(window, '!', NULL, NO_DATE | NO_EOL, COLOUR_ONLINE, "", "%s", muc_get_room_nick(room));
+                win_save_vprint(window, '!', NULL, NO_EOL, COLOUR_ROOMINFO, "", "%d occupants: ", length);
+                win_save_vprint(window, '!', NULL, NO_DATE | NO_EOL, COLOUR_ONLINE, "", "%s", muc_nick(room));
                 win_save_print(window, '!', NULL, NO_DATE | NO_EOL, 0, "", ", ");
             } else {
                 win_save_vprint(window, '!', NULL, NO_EOL, COLOUR_ROOMINFO, "", "%d %s: ", length, presence);
             }
 
             while (roster != NULL) {
-                PContact member = roster->data;
-                const char *nick = p_contact_barejid(member);
-                const char *show = p_contact_presence(member);
+                Occupant *occupant = roster->data;
+                const char *presence_str = string_from_resource_presence(occupant->presence);
 
-                int presence_colour = win_presence_colour(show);
-                win_save_vprint(window, '!', NULL, NO_DATE | NO_EOL, presence_colour, "", "%s", nick);
+                int presence_colour = win_presence_colour(presence_str);
+                win_save_vprint(window, '!', NULL, NO_DATE | NO_EOL, presence_colour, "", "%s", occupant->nick);
 
                 if (roster->next != NULL) {
                     win_save_print(window, '!', NULL, NO_DATE | NO_EOL, 0, "", ", ");
@@ -1531,7 +1530,7 @@ _ui_room_message(const char * const room_jid, const char * const nick,
         log_error("Room message received from %s, but no window open for %s", nick, room_jid);
     } else {
         int num = wins_get_num(window);
-        char *my_nick = muc_get_room_nick(room_jid);
+        char *my_nick = muc_nick(room_jid);
 
         if (strcmp(nick, my_nick) != 0) {
             if (g_strrstr(message, my_nick) != NULL) {
@@ -1566,7 +1565,7 @@ _ui_room_message(const char * const room_jid, const char * const nick,
             ui_index = 0;
         }
 
-        if (strcmp(nick, muc_get_room_nick(room_jid)) != 0) {
+        if (strcmp(nick, muc_nick(room_jid)) != 0) {
             if (prefs_get_boolean(PREF_BEEP)) {
                 beep();
             }
@@ -1731,11 +1730,11 @@ static void
 _ui_status_private(void)
 {
     Jid *jid = jid_create(ui_current_recipient());
-    PContact pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
+    Occupant *occupant = muc_roster_item(jid->barejid, jid->resourcepart);
     ProfWin *window = wins_get_current();
 
-    if (pcontact != NULL) {
-        win_show_contact(window, pcontact);
+    if (occupant) {
+        win_show_occupant(window, occupant);
     } else {
         win_save_println(window, "Error getting contact info.");
     }
@@ -1747,11 +1746,11 @@ static void
 _ui_info_private(void)
 {
     Jid *jid = jid_create(ui_current_recipient());
-    PContact pcontact = muc_get_participant(jid->barejid, jid->resourcepart);
+    Occupant *occupant = muc_roster_item(jid->barejid, jid->resourcepart);
     ProfWin *window = wins_get_current();
 
-    if (pcontact != NULL) {
-        win_show_info(window, pcontact);
+    if (occupant) {
+        win_show_occupant_info(window, jid->barejid, occupant);
     } else {
         win_save_println(window, "Error getting contact info.");
     }
@@ -1762,27 +1761,21 @@ _ui_info_private(void)
 static void
 _ui_status_room(const char * const contact)
 {
-    PContact pcontact = muc_get_participant(ui_current_recipient(), contact);
+    Occupant *occupant = muc_roster_item(ui_current_recipient(), contact);
     ProfWin *current = wins_get_current();
 
-    if (pcontact != NULL) {
-        win_show_contact(current, pcontact);
+    if (occupant) {
+        win_show_occupant(current, occupant);
     } else {
         win_save_vprint(current, '-', NULL, 0, 0, "", "No such participant \"%s\" in room.", contact);
     }
 }
 
 static void
-_ui_info_room(const char * const contact)
+_ui_info_room(const char * const room, Occupant *occupant)
 {
-    PContact pcontact = muc_get_participant(ui_current_recipient(), contact);
     ProfWin *current = wins_get_current();
-
-    if (pcontact != NULL) {
-        win_show_info(current, pcontact);
-    } else {
-        win_save_vprint(current, '-', NULL, 0, 0, "", "No such participant \"%s\" in room.", contact);
-    }
+    win_show_occupant_info(current, room, occupant);
 }
 
 static gint
diff --git a/src/ui/notifier.c b/src/ui/notifier.c
index 6673edb0..81320383 100644
--- a/src/ui/notifier.c
+++ b/src/ui/notifier.c
@@ -129,7 +129,7 @@ static void
 _notify_remind(void)
 {
     gint unread = ui_unread();
-    gint open = muc_invite_count();
+    gint open = muc_invites_count();
     gint subs = presence_sub_request_count();
 
     GString *text = g_string_new("");
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 82327d03..d71a78c1 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -172,7 +172,7 @@ void (*ui_show_lines)(ProfWin *window, const gchar** lines);
 
 // contact status functions
 void (*ui_status_room)(const char * const contact);
-void (*ui_info_room)(const char * const contact);
+void (*ui_info_room)(const char * const room, Occupant *occupant);
 void (*ui_status)(void);
 void (*ui_info)(void);
 void (*ui_status_private)(void);
@@ -234,7 +234,7 @@ void (*cons_show_roster_group)(const char * const group, GSList * list);
 void (*cons_show_wins)(void);
 void (*cons_show_status)(const char * const barejid);
 void (*cons_show_info)(PContact pcontact);
-void (*cons_show_caps)(const char * const fulljid, Resource *resource);
+void (*cons_show_caps)(const char * const fulljid, resource_presence_t presence);
 void (*cons_show_themes)(GSList *themes);
 void (*cons_show_aliases)(GList *aliases);
 void (*cons_show_login_success)(ProfAccount *account);
diff --git a/src/ui/window.c b/src/ui/window.c
index b9d2bee4..4a922c59 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -126,6 +126,23 @@ win_presence_colour(const char * const presence)
 }
 
 void
+win_show_occupant(ProfWin *window, Occupant *occupant)
+{
+    const char *presence_str = string_from_resource_presence(occupant->presence);
+
+    int presence_colour = win_presence_colour(presence_str);
+
+    win_save_print(window, '-', NULL, NO_EOL, presence_colour, "", occupant->nick);
+    win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, presence_colour, "", " is %s", presence_str);
+
+    if (occupant->status) {
+        win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, presence_colour, "", ", \"%s\"", occupant->status);
+    }
+
+    win_save_print(window, '-', NULL, NO_DATE, presence_colour, "", "");
+}
+
+void
 win_show_contact(ProfWin *window, PContact contact)
 {
     const char *barejid = p_contact_barejid(contact);
@@ -170,6 +187,70 @@ win_show_contact(ProfWin *window, PContact contact)
 }
 
 void
+win_show_occupant_info(ProfWin *window, const char * const room, Occupant *occupant)
+{
+    const char *presence_str = string_from_resource_presence(occupant->presence);
+
+    int presence_colour = win_presence_colour(presence_str);
+
+    win_save_print(window, '-', NULL, NO_EOL, presence_colour, "", occupant->nick);
+    win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, presence_colour, "", " is %s", presence_str);
+
+    if (occupant->status) {
+        win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, presence_colour, "", ", \"%s\"", occupant->status);
+    }
+
+    win_save_newline(window);
+
+    win_save_vprint(window, '-', NULL, NO_DATE, 0, "", "Role: %s, Affiliation: %s", occupant->role, occupant->affiliation);
+
+    Jid *jidp = jid_create_from_bare_and_resource(room, occupant->nick);
+    Capabilities *caps = caps_lookup(jidp->fulljid);
+
+    if (caps) {
+        // show identity
+        if ((caps->category != NULL) || (caps->type != NULL) || (caps->name != NULL)) {
+            win_save_print(window, '-', NULL, NO_EOL, 0, "", "    Identity: ");
+            if (caps->name != NULL) {
+                win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", caps->name);
+                if ((caps->category != NULL) || (caps->type != NULL)) {
+                    win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", " ");
+                }
+            }
+            if (caps->type != NULL) {
+                win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", caps->type);
+                if (caps->category != NULL) {
+                    win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", " ");
+                }
+            }
+            if (caps->category != NULL) {
+                win_save_print(window, '-', NULL, NO_DATE | NO_EOL, 0, "", caps->category);
+            }
+            win_save_newline(window);
+        }
+        if (caps->software != NULL) {
+            win_save_vprint(window, '-', NULL, NO_EOL, 0, "", "    Software: %s", caps->software);
+        }
+        if (caps->software_version != NULL) {
+            win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->software_version);
+        }
+        if ((caps->software != NULL) || (caps->software_version != NULL)) {
+            win_save_newline(window);
+        }
+        if (caps->os != NULL) {
+            win_save_vprint(window, '-', NULL, NO_EOL, 0, "", "    OS: %s", caps->os);
+        }
+        if (caps->os_version != NULL) {
+            win_save_vprint(window, '-', NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->os_version);
+        }
+        if ((caps->os != NULL) || (caps->os_version != NULL)) {
+            win_save_newline(window);
+        }
+        caps_destroy(caps);
+    }
+}
+
+void
 win_show_info(ProfWin *window, PContact contact)
 {
     const char *barejid = p_contact_barejid(contact);
diff --git a/src/ui/window.h b/src/ui/window.h
index 8150fac9..804ea300 100644
--- a/src/ui/window.h
+++ b/src/ui/window.h
@@ -44,6 +44,7 @@
 #endif
 
 #include "contact.h"
+#include "muc.h"
 #include "ui/buffer.h"
 #include "xmpp/xmpp.h"
 
@@ -85,6 +86,7 @@ void win_update_virtual(ProfWin *window);
 void win_move_to_end(ProfWin *window);
 int  win_presence_colour(const char * const presence);
 void win_show_contact(ProfWin *window, PContact contact);
+void win_show_occupant(ProfWin *window, Occupant *occupant);
 void win_show_status_string(ProfWin *window, const char * const from,
     const char * const show, const char * const status,
     GDateTime *last_activity, const char * const pre,
@@ -92,6 +94,7 @@ void win_show_status_string(ProfWin *window, const char * const from,
 void win_print_incoming_message(ProfWin *window, GTimeVal *tv_stamp,
     const char * const from, const char * const message);
 void win_show_info(ProfWin *window, PContact contact);
+void win_show_occupant_info(ProfWin *window, const char * const room, Occupant *occupant);
 void win_save_vprint(ProfWin *window, const char show_char, GTimeVal *tstamp, int flags, int attrs, const char * const from, const char * const message, ...);
 void win_save_print(ProfWin *window, const char show_char, GTimeVal *tstamp, int flags, int attrs, const char * const from, const char * const message);
 void win_save_println(ProfWin *window, const char * const message);