about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2015-11-15 22:54:09 +0000
committerJames Booth <boothj5@gmail.com>2015-11-15 22:54:09 +0000
commitb44ea030224c11233b378e0fde36c3daf2979a05 (patch)
treee9ae9266400ec9928f143eb4df1a034a6af30762
parent98a395e933672320c773a6653f79106373d8b1e3 (diff)
downloadprofani-tty-b44ea030224c11233b378e0fde36c3daf2979a05.tar.gz
Added _rosterwin_resource()
-rw-r--r--src/ui/rosterwin.c143
1 files changed, 77 insertions, 66 deletions
diff --git a/src/ui/rosterwin.c b/src/ui/rosterwin.c
index e3cff25e..b7e77372 100644
--- a/src/ui/rosterwin.c
+++ b/src/ui/rosterwin.c
@@ -43,75 +43,33 @@
 #include "roster_list.h"
 
 static void
-_rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
+_rosterwin_resource(ProfLayoutSplit *layout, PContact contact)
 {
-    const char *name = p_contact_name_or_jid(contact);
-    const char *presence = p_contact_presence(contact);
-    char *by = prefs_get_string(PREF_ROSTER_BY);
-
-    if ((g_strcmp0(presence, "offline") != 0) || ((g_strcmp0(presence, "offline") == 0) &&
-            (prefs_get_boolean(PREF_ROSTER_OFFLINE)))) {
-        theme_item_t presence_colour = theme_main_presence_attrs(presence);
+    GList *resources = p_contact_get_available_resources(contact);
+    if (resources) {
+        GList *curr_resource = resources;
+        while (curr_resource) {
+            Resource *resource = curr_resource->data;
+            const char *resource_presence = string_from_resource_presence(resource->presence);
+            theme_item_t resource_presence_colour = theme_main_presence_attrs(resource_presence);
 
-        wattron(layout->subwin, theme_attrs(presence_colour));
-        GString *msg = g_string_new("   ");
-        g_string_append(msg, name);
-        win_printline_nowrap(layout->subwin, msg->str);
-        g_string_free(msg, TRUE);
-        wattroff(layout->subwin, theme_attrs(presence_colour));
-
-        if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) {
-            GList *resources = p_contact_get_available_resources(contact);
-            if (resources) {
-                GList *curr_resource = resources;
-                while (curr_resource) {
-                    Resource *resource = curr_resource->data;
-                    const char *resource_presence = string_from_resource_presence(resource->presence);
-                    theme_item_t resource_presence_colour = theme_main_presence_attrs(resource_presence);
+            wattron(layout->subwin, theme_attrs(resource_presence_colour));
+            GString *msg = g_string_new("     ");
+            g_string_append(msg, resource->name);
+            win_printline_nowrap(layout->subwin, msg->str);
+            g_string_free(msg, TRUE);
+            wattroff(layout->subwin, theme_attrs(resource_presence_colour));
 
-                    wattron(layout->subwin, theme_attrs(resource_presence_colour));
-                    GString *msg = g_string_new("     ");
-                    g_string_append(msg, resource->name);
-                    win_printline_nowrap(layout->subwin, msg->str);
-                    g_string_free(msg, TRUE);
-                    wattroff(layout->subwin, theme_attrs(resource_presence_colour));
-
-                    if (prefs_get_boolean(PREF_ROSTER_PRESENCE)) {
-                        gboolean by_presence = g_strcmp0(by, "presence") == 0;
-                        gboolean has_status = resource->status != NULL;
-                        gboolean show_status = prefs_get_boolean(PREF_ROSTER_STATUS);
-                        if (!by_presence || (has_status && show_status)) {
-                            wattron(layout->subwin, theme_attrs(resource_presence_colour));
-                            GString *msg = g_string_new("       ");
-                            if (!by_presence) {
-                                g_string_append(msg, resource_presence);
-                            }
-                            if (has_status && show_status) {
-                                if (!by_presence) {
-                                    g_string_append(msg, ", \"");
-                                } else {
-                                    g_string_append(msg, "\"");
-                                }
-                                g_string_append(msg, resource->status);
-                                g_string_append(msg, "\"");
-                            }
-                            win_printline_nowrap(layout->subwin, msg->str);
-                            g_string_free(msg, TRUE);
-                            wattroff(layout->subwin, theme_attrs(resource_presence_colour));
-                        }
-                    }
-
-                    curr_resource = g_list_next(curr_resource);
-                }
-            } else if (prefs_get_boolean(PREF_ROSTER_PRESENCE)) {
+            if (prefs_get_boolean(PREF_ROSTER_PRESENCE)) {
+                char *by = prefs_get_string(PREF_ROSTER_BY);
                 gboolean by_presence = g_strcmp0(by, "presence") == 0;
-                gboolean has_status = p_contact_status(contact) != NULL;
+                gboolean has_status = resource->status != NULL;
                 gboolean show_status = prefs_get_boolean(PREF_ROSTER_STATUS);
                 if (!by_presence || (has_status && show_status)) {
-                    wattron(layout->subwin, theme_attrs(presence_colour));
-                    GString *msg = g_string_new("     ");
+                    wattron(layout->subwin, theme_attrs(resource_presence_colour));
+                    GString *msg = g_string_new("       ");
                     if (!by_presence) {
-                        g_string_append(msg, presence);
+                        g_string_append(msg, resource_presence);
                     }
                     if (has_status && show_status) {
                         if (!by_presence) {
@@ -119,17 +77,70 @@ _rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
                         } else {
                             g_string_append(msg, "\"");
                         }
-                        const char *status = p_contact_status(contact);
-                        g_string_append(msg, status);
+                        g_string_append(msg, resource->status);
                         g_string_append(msg, "\"");
                     }
                     win_printline_nowrap(layout->subwin, msg->str);
                     g_string_free(msg, TRUE);
-                    wattroff(layout->subwin, theme_attrs(presence_colour));
+                    wattroff(layout->subwin, theme_attrs(resource_presence_colour));
                 }
             }
-            g_list_free(resources);
+
+            curr_resource = g_list_next(curr_resource);
+        }
+    } else if (prefs_get_boolean(PREF_ROSTER_PRESENCE)) {
+        const char *presence = p_contact_presence(contact);
+        theme_item_t presence_colour = theme_main_presence_attrs(presence);
+        char *by = prefs_get_string(PREF_ROSTER_BY);
+        gboolean by_presence = g_strcmp0(by, "presence") == 0;
+        gboolean has_status = p_contact_status(contact) != NULL;
+        gboolean show_status = prefs_get_boolean(PREF_ROSTER_STATUS);
+        if (!by_presence || (has_status && show_status)) {
+            wattron(layout->subwin, theme_attrs(presence_colour));
+            GString *msg = g_string_new("     ");
+            if (!by_presence) {
+                g_string_append(msg, presence);
+            }
+            if (has_status && show_status) {
+                if (!by_presence) {
+                    g_string_append(msg, ", \"");
+                } else {
+                    g_string_append(msg, "\"");
+                }
+                const char *status = p_contact_status(contact);
+                g_string_append(msg, status);
+                g_string_append(msg, "\"");
+            }
+            win_printline_nowrap(layout->subwin, msg->str);
+            g_string_free(msg, TRUE);
+            wattroff(layout->subwin, theme_attrs(presence_colour));
+        }
+    }
+    g_list_free(resources);
+
+}
+
+static void
+_rosterwin_contact(ProfLayoutSplit *layout, PContact contact)
+{
+    const char *name = p_contact_name_or_jid(contact);
+    const char *presence = p_contact_presence(contact);
+
+    if ((g_strcmp0(presence, "offline") != 0) || ((g_strcmp0(presence, "offline") == 0) &&
+            (prefs_get_boolean(PREF_ROSTER_OFFLINE)))) {
+        theme_item_t presence_colour = theme_main_presence_attrs(presence);
+
+        wattron(layout->subwin, theme_attrs(presence_colour));
+        GString *msg = g_string_new("   ");
+        g_string_append(msg, name);
+        win_printline_nowrap(layout->subwin, msg->str);
+        g_string_free(msg, TRUE);
+        wattroff(layout->subwin, theme_attrs(presence_colour));
+
+        if (prefs_get_boolean(PREF_ROSTER_RESOURCE)) {
+            _rosterwin_resource(layout, contact);
         } else if (prefs_get_boolean(PREF_ROSTER_PRESENCE)) {
+            char *by = prefs_get_string(PREF_ROSTER_BY);
             gboolean by_presence = g_strcmp0(by, "presence") == 0;
             gboolean has_status = p_contact_status(contact) != NULL;
             gboolean show_status = prefs_get_boolean(PREF_ROSTER_STATUS);