[gnome-software/wip/hughsie/flatpak3: 1/9] trivial: Add gs_utils_append_key_value() for use in plugins



commit d2f06c26552ae90901d096d74f03c1a965f07766
Author: Richard Hughes <richard hughsie com>
Date:   Fri Jul 14 09:52:45 2017 +0100

    trivial: Add gs_utils_append_key_value() for use in plugins

 lib/gs-app.c       |    6 +-----
 lib/gs-self-test.c |   26 ++++++++++++++++++++++++++
 lib/gs-utils.c     |   31 +++++++++++++++++++++++++++++++
 lib/gs-utils.h     |    4 ++++
 4 files changed, 62 insertions(+), 5 deletions(-)
---
diff --git a/lib/gs-app.c b/lib/gs-app.c
index 652b157..03488f3 100644
--- a/lib/gs-app.c
+++ b/lib/gs-app.c
@@ -188,11 +188,7 @@ _g_set_array (GArray **array_ptr, GArray *new_array)
 static void
 gs_app_kv_lpad (GString *str, const gchar *key, const gchar *value)
 {
-       gsize i;
-       g_string_append_printf (str, "  %s:", key);
-       for (i = strlen (key); i < 18; i++)
-               g_string_append (str, " ");
-       g_string_append_printf (str, " %s\n", value);
+       gs_utils_append_key_value (str, 20, key, value);
 }
 
 static void
diff --git a/lib/gs-self-test.c b/lib/gs-self-test.c
index 7cbbb2a..76e1788 100644
--- a/lib/gs-self-test.c
+++ b/lib/gs-self-test.c
@@ -89,6 +89,31 @@ gs_os_release_func (void)
 }
 
 static void
+gs_utils_append_kv_func (void)
+{
+       g_autoptr(GString) str = g_string_new (NULL);
+
+       /* normal */
+       gs_utils_append_key_value (str, 5, "key", "val");
+       g_assert_cmpstr (str->str, ==, "key:  val\n");
+
+       /* oversize */
+       g_string_truncate (str, 0);
+       gs_utils_append_key_value (str, 5, "longkey", "val");
+       g_assert_cmpstr (str->str, ==, "longkey: val\n");
+
+       /* null key */
+       g_string_truncate (str, 0);
+       gs_utils_append_key_value (str, 5, NULL, "val");
+       g_assert_cmpstr (str->str, ==, "      val\n");
+
+       /* zero align key */
+       g_string_truncate (str, 0);
+       gs_utils_append_key_value (str, 0, "key", "val");
+       g_assert_cmpstr (str->str, ==, "key: val\n");
+}
+
+static void
 gs_utils_cache_func (void)
 {
        g_autofree gchar *fn1 = NULL;
@@ -617,6 +642,7 @@ main (int argc, char **argv)
        g_test_add_func ("/gnome-software/lib/utils{wilson}", gs_utils_wilson_func);
        g_test_add_func ("/gnome-software/lib/utils{error}", gs_utils_error_func);
        g_test_add_func ("/gnome-software/lib/utils{cache}", gs_utils_cache_func);
+       g_test_add_func ("/gnome-software/lib/utils{append-kv}", gs_utils_append_kv_func);
        g_test_add_func ("/gnome-software/lib/os-release", gs_os_release_func);
        g_test_add_func ("/gnome-software/lib/app", gs_app_func);
        g_test_add_func ("/gnome-software/lib/app{addons}", gs_app_addons_func);
diff --git a/lib/gs-utils.c b/lib/gs-utils.c
index be79b67..b126147 100644
--- a/lib/gs-utils.c
+++ b/lib/gs-utils.c
@@ -968,4 +968,35 @@ gs_user_agent (void)
        return PACKAGE_NAME "/" PACKAGE_VERSION;
 }
 
+/**
+ * gs_utils_append_key_value:
+ * @str: A #GString
+ * @align_len: The alignment of the @value compared to the @key
+ * @key: The text to use as a title
+ * @value: The text to use as a value
+ *
+ * Adds a line to an existing string, padding the key to a set number of spaces.
+ *
+ * Since: 3.26
+ */
+void
+gs_utils_append_key_value (GString *str, gsize align_len,
+                          const gchar *key, const gchar *value)
+{
+       gsize len = 0;
+
+       g_return_if_fail (str != NULL);
+       g_return_if_fail (value != NULL);
+
+       if (key != NULL) {
+               len = strlen (key) + 2;
+               g_string_append (str, key);
+               g_string_append (str, ": ");
+       }
+       for (gsize i = len; i < align_len + 1; i++)
+               g_string_append (str, " ");
+       g_string_append (str, value);
+       g_string_append (str, "\n");
+}
+
 /* vim: set noexpandtab: */
diff --git a/lib/gs-utils.h b/lib/gs-utils.h
index 7d8cdab..b92d2f8 100644
--- a/lib/gs-utils.h
+++ b/lib/gs-utils.h
@@ -85,6 +85,10 @@ gboolean      gs_utils_error_convert_appstream (GError       **perror);
 gchar          *gs_utils_get_url_scheme        (const gchar    *url);
 gchar          *gs_utils_get_url_path          (const gchar    *url);
 const gchar    *gs_user_agent                  (void);
+void            gs_utils_append_key_value      (GString        *str,
+                                                gsize           align_len,
+                                                const gchar    *key,
+                                                const gchar    *value);
 
 G_END_DECLS
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]