about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2016-08-13 17:43:43 +0100
committerJames Booth <boothj5@gmail.com>2016-08-13 17:43:43 +0100
commited75f1ec71e7f3b4e025af7a4eb61673f97f19b2 (patch)
treed9df1a12344ca17113a7a31316ad542e6c8cbbfe /src
parent0bd5b5200af5628ed6d841139c44cf3dabee8e3e (diff)
downloadprofani-tty-ed75f1ec71e7f3b4e025af7a4eb61673f97f19b2.tar.gz
Use SoftwareVersion in EntityCapabilities
Diffstat (limited to 'src')
-rw-r--r--src/ui/console.c71
-rw-r--r--src/ui/window.c72
-rw-r--r--src/xmpp/capabilities.c109
-rw-r--r--src/xmpp/xmpp.h8
4 files changed, 136 insertions, 124 deletions
diff --git a/src/ui/console.c b/src/ui/console.c
index 882b5da8..3c104f4d 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -579,23 +579,26 @@ cons_show_caps(const char *const fulljid, resource_presence_t presence)
             win_newline(console);
         }
 
-        if (caps->software) {
-            win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "Software: %s", caps->software);
-        }
         if (caps->software_version) {
-            win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->software_version);
-        }
-        if (caps->software || caps->software_version) {
-            win_newline(console);
-        }
-        if (caps->os) {
-            win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "OS: %s", caps->os);
-        }
-        if (caps->os_version) {
-            win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->os_version);
-        }
-        if (caps->os || caps->os_version) {
-            win_newline(console);
+            SoftwareVersion *software_version = caps->software_version;
+            if (software_version->software) {
+                win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "Software: %s", software_version->software);
+            }
+            if (software_version->software_version) {
+                win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->software_version);
+            }
+            if (software_version->software || software_version->software_version) {
+                win_newline(console);
+            }
+            if (software_version->os) {
+                win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "OS: %s", software_version->os);
+            }
+            if (software_version->os_version) {
+                win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->os_version);
+            }
+            if (software_version->os || software_version->os_version) {
+                win_newline(console);
+            }
         }
 
         if (caps->features) {
@@ -1030,24 +1033,28 @@ cons_show_account(ProfAccount *account)
                     win_newline(console);
                 }
 
-                if (caps->software) {
-                    win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "    Software: %s", caps->software);
-                }
                 if (caps->software_version) {
-                    win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->software_version);
-                }
-                if (caps->software || caps->software_version) {
-                    win_newline(console);
-                }
-                if (caps->os) {
-                    win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "    OS: %s", caps->os);
-                }
-                if (caps->os_version) {
-                    win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->os_version);
-                }
-                if (caps->os || caps->os_version) {
-                    win_newline(console);
+                    SoftwareVersion *software_version = caps->software_version;
+                    if (software_version->software) {
+                        win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "    Software: %s", software_version->software);
+                    }
+                    if (software_version->software_version) {
+                        win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->software_version);
+                    }
+                    if (software_version->software || software_version->software_version) {
+                        win_newline(console);
+                    }
+                    if (software_version->os) {
+                        win_vprint(console, '-', 0, NULL, NO_EOL, 0, "", "    OS: %s", software_version->os);
+                    }
+                    if (software_version->os_version) {
+                        win_vprint(console, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->os_version);
+                    }
+                    if (software_version->os || software_version->os_version) {
+                        win_newline(console);
+                    }
                 }
+
                 caps_destroy(caps);
             }
 
diff --git a/src/ui/window.c b/src/ui/window.c
index 6e405563..277ce4e6 100644
--- a/src/ui/window.c
+++ b/src/ui/window.c
@@ -786,24 +786,28 @@ win_show_occupant_info(ProfWin *window, const char *const room, Occupant *occupa
             win_newline(window);
         }
 
-        if (caps->software) {
-            win_vprint(window, '!', 0, NULL, NO_EOL, 0, "", "  Software: %s", caps->software);
-        }
         if (caps->software_version) {
-            win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->software_version);
-        }
-        if (caps->software || caps->software_version) {
-            win_newline(window);
-        }
-        if (caps->os) {
-            win_vprint(window, '!', 0, NULL, NO_EOL, 0, "", "  OS: %s", caps->os);
-        }
-        if (caps->os_version) {
-            win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->os_version);
-        }
-        if (caps->os || caps->os_version) {
-            win_newline(window);
+            SoftwareVersion *software_version = caps->software_version;
+            if (software_version->software) {
+                win_vprint(window, '!', 0, NULL, NO_EOL, 0, "", "  Software: %s", software_version->software);
+            }
+            if (software_version->software_version) {
+                win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->software_version);
+            }
+            if (software_version->software || software_version->software_version) {
+                win_newline(window);
+            }
+            if (software_version->os) {
+                win_vprint(window, '!', 0, NULL, NO_EOL, 0, "", "  OS: %s", software_version->os);
+            }
+            if (software_version->os_version) {
+                win_vprint(window, '!', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->os_version);
+            }
+            if (software_version->os || software_version->os_version) {
+                win_newline(window);
+            }
         }
+
         caps_destroy(caps);
     }
 
@@ -906,24 +910,28 @@ win_show_info(ProfWin *window, PContact contact)
                 win_newline(window);
             }
 
-            if (caps->software) {
-                win_vprint(window, '-', 0, NULL, NO_EOL, 0, "", "    Software: %s", caps->software);
-            }
             if (caps->software_version) {
-                win_vprint(window, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->software_version);
-            }
-            if (caps->software || caps->software_version) {
-                win_newline(window);
-            }
-            if (caps->os) {
-                win_vprint(window, '-', 0, NULL, NO_EOL, 0, "", "    OS: %s", caps->os);
-            }
-            if (caps->os_version) {
-                win_vprint(window, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", caps->os_version);
-            }
-            if (caps->os || caps->os_version) {
-                win_newline(window);
+                SoftwareVersion *software_version = caps->software_version;
+                if (software_version->software) {
+                    win_vprint(window, '-', 0, NULL, NO_EOL, 0, "", "    Software: %s", software_version->software);
+                }
+                if (software_version->software_version) {
+                    win_vprint(window, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->software_version);
+                }
+                if (software_version->software || software_version->software_version) {
+                    win_newline(window);
+                }
+                if (software_version->os) {
+                    win_vprint(window, '-', 0, NULL, NO_EOL, 0, "", "    OS: %s", software_version->os);
+                }
+                if (software_version->os_version) {
+                    win_vprint(window, '-', 0, NULL, NO_DATE | NO_EOL, 0, "", ", %s", software_version->os_version);
+                }
+                if (software_version->os || software_version->os_version) {
+                    win_newline(window);
+                }
             }
+
             caps_destroy(caps);
         }
 
diff --git a/src/xmpp/capabilities.c b/src/xmpp/capabilities.c
index fe3a855c..a4e9244d 100644
--- a/src/xmpp/capabilities.c
+++ b/src/xmpp/capabilities.c
@@ -130,18 +130,23 @@ caps_add_by_ver(const char *const ver, EntityCapabilities *caps)
             g_key_file_set_string(cache, ver, "type", identity->type);
         }
     }
-    if (caps->software) {
-        g_key_file_set_string(cache, ver, "software", caps->software);
-    }
+
     if (caps->software_version) {
-        g_key_file_set_string(cache, ver, "software_version", caps->software_version);
-    }
-    if (caps->os) {
-        g_key_file_set_string(cache, ver, "os", caps->os);
-    }
-    if (caps->os_version) {
-        g_key_file_set_string(cache, ver, "os_version", caps->os_version);
+        SoftwareVersion *software_version = caps->software_version;
+        if (software_version->software) {
+            g_key_file_set_string(cache, ver, "software", software_version->software);
+        }
+        if (software_version->software_version) {
+            g_key_file_set_string(cache, ver, "software_version", software_version->software_version);
+        }
+        if (software_version->os) {
+            g_key_file_set_string(cache, ver, "os", software_version->os);
+        }
+        if (software_version->os_version) {
+            g_key_file_set_string(cache, ver, "os_version", software_version->os_version);
+        }
     }
+
     if (caps->features) {
         GSList *curr_feature = caps->features;
         int num = g_slist_length(caps->features);
@@ -195,31 +200,18 @@ _caps_by_ver(const char *const ver)
         }
 
         char *software = g_key_file_get_string(cache, ver, "software", NULL);
-        if (software) {
-            new_caps->software = software;
-        } else {
-            new_caps->software = NULL;
-        }
-
         char *software_version = g_key_file_get_string(cache, ver, "software_version", NULL);
-        if (software_version) {
-            new_caps->software_version = software_version;
-        } else {
-            new_caps->software_version = NULL;
-        }
-
         char *os = g_key_file_get_string(cache, ver, "os", NULL);
-        if (os) {
-            new_caps->os = os;
-        } else {
-            new_caps->os = NULL;
-        }
-
         char *os_version = g_key_file_get_string(cache, ver, "os_version", NULL);
-        if (os_version) {
-            new_caps->os_version = os_version;
+        if (software || software_version || os || os_version) {
+            SoftwareVersion *software_versionp = malloc(sizeof(struct software_version_t));
+            software_versionp->software = software;
+            software_versionp->software_version = software_version;
+            software_versionp->os = os;
+            software_versionp->os_version = os_version;
+            new_caps->software_version = software_versionp;
         } else {
-            new_caps->os_version = NULL;
+            new_caps->software_version = NULL;
         }
 
         gsize features_len = 0;
@@ -287,10 +279,15 @@ _caps_copy(EntityCapabilities *caps)
             result->identity = NULL;
         }
 
-        result->software = caps->software ? strdup(caps->software) : NULL;
-        result->software_version = caps->software_version ? strdup(caps->software_version) : NULL;
-        result->os = caps->os ? strdup(caps->os) : NULL;
-        result->os_version = caps->os_version ? strdup(caps->os_version) : NULL;
+        if (caps->software_version) {
+            SoftwareVersion *software_version = (SoftwareVersion*)malloc(sizeof(SoftwareVersion));
+            software_version->software = caps->software_version->software ? strdup(caps->software_version->software) : NULL;
+            software_version->software_version = caps->software_version->software_version ? strdup(caps->software_version->software_version) : NULL;
+            software_version->os = caps->software_version->os ? strdup(caps->software_version->os) : NULL;
+            software_version->os_version = caps->software_version->os_version ? strdup(caps->software_version->os_version) : NULL;
+        } else {
+            result->software_version = NULL;
+        }
 
         result->features = NULL;
         GSList *curr = caps->features;
@@ -522,26 +519,14 @@ caps_create(xmpp_stanza_t *query)
         new_caps->identity = NULL;
     }
 
-    if (software) {
-        new_caps->software = software;
-    } else {
-        new_caps->software = NULL;
-    }
-    if (software_version) {
-        new_caps->software_version = software_version;
-    } else {
-        new_caps->software_version = NULL;
-    }
-    if (os) {
-        new_caps->os = os;
-    } else {
-        new_caps->os = NULL;
-    }
-    if (os_version) {
-        new_caps->os_version = os_version;
-    } else {
-        new_caps->os_version = NULL;
+    if (software || software_version || os || os_version) {
+        SoftwareVersion *software_versionp = malloc(sizeof(struct software_version_t));
+        software_versionp->software = software;
+        software_versionp->software_version = software_version;
+        software_versionp->os = os;
+        software_versionp->os_version = os_version;
     }
+
     if (features) {
         new_caps->features = features;
     } else {
@@ -651,15 +636,23 @@ _disco_identity_destroy(DiscoIdentity *disco_identity)
     }
 }
 
+static void
+_software_version_destroy(SoftwareVersion *software_version)
+{
+    if (software_version) {
+        free(software_version->software);
+        free(software_version->software_version);
+        free(software_version->os);
+        free(software_version->os_version);
+    }
+}
+
 void
 caps_destroy(EntityCapabilities *caps)
 {
     if (caps) {
         _disco_identity_destroy(caps->identity);
-        free(caps->software);
-        free(caps->software_version);
-        free(caps->os);
-        free(caps->os_version);
+        _software_version_destroy(caps->software_version);
         if (caps->features) {
             g_slist_free_full(caps->features, free);
         }
diff --git a/src/xmpp/xmpp.h b/src/xmpp/xmpp.h
index 3ab5fb56..93b02cb2 100644
--- a/src/xmpp/xmpp.h
+++ b/src/xmpp/xmpp.h
@@ -88,12 +88,16 @@ typedef struct disco_identity_t {
     char *category;
 } DiscoIdentity;
 
-typedef struct entity_capabilities_t {
-    DiscoIdentity *identity;
+typedef struct software_version_t {
     char *software;
     char *software_version;
     char *os;
     char *os_version;
+} SoftwareVersion;
+
+typedef struct entity_capabilities_t {
+    DiscoIdentity *identity;
+    SoftwareVersion *software_version;
     GSList *features;
 } EntityCapabilities;