summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2018-11-11 08:40:40 +0000
committerRichard Hughes <richard@hughsie.com>2018-11-27 14:54:07 +0000
commit5f6aeb9817187bb0666056f3f5e815018bd1ac92 (patch)
treee2cd0a333e93aece2994c950de9d257c67d2bc47
parent6c4ac12f7d71cff6f09c161cc0f2232a34a3aca2 (diff)
downloadappstream-glib-5f6aeb9817187bb0666056f3f5e815018bd1ac92.tar.gz
Add as_release_set_install_duration()
-rw-r--r--libappstream-glib/as-release.c45
-rw-r--r--libappstream-glib/as-release.h3
-rw-r--r--libappstream-glib/as-self-test.c3
3 files changed, 50 insertions, 1 deletions
diff --git a/libappstream-glib/as-release.c b/libappstream-glib/as-release.c
index 034cbf6..9c6ec59 100644
--- a/libappstream-glib/as-release.c
+++ b/libappstream-glib/as-release.c
@@ -58,6 +58,7 @@ typedef struct
GHashTable *blobs; /* of AsRefString:GBytes */
GHashTable *descriptions;
guint64 timestamp;
+ guint64 install_duration;
GPtrArray *locations; /* of AsRefString, lazy */
GPtrArray *checksums; /* of AsChecksum, lazy */
} AsReleasePrivate;
@@ -530,6 +531,24 @@ as_release_get_timestamp (AsRelease *release)
}
/**
+ * as_release_get_install_duration:
+ * @release: a #AsRelease instance.
+ *
+ * Gets the typical install duration.
+ *
+ * Returns: install duration in seconds, or 0 for unset
+ *
+ * Since: 0.7.15
+ **/
+guint64
+as_release_get_install_duration (AsRelease *release)
+{
+ AsReleasePrivate *priv = GET_PRIVATE (release);
+ g_return_val_if_fail (AS_IS_RELEASE (release), 0);
+ return priv->install_duration;
+}
+
+/**
* as_release_get_description:
* @release: a #AsRelease instance.
* @locale: (nullable): the locale. e.g. "en_GB"
@@ -704,6 +723,23 @@ as_release_set_timestamp (AsRelease *release, guint64 timestamp)
}
/**
+ * as_release_set_install_duration:
+ * @release: a #AsRelease instance.
+ * @install_duration: the install duration in seconds
+ *
+ * Sets the typical duration of the install.
+ *
+ * Since: 0.7.15
+ **/
+void
+as_release_set_install_duration (AsRelease *release, guint64 install_duration)
+{
+ AsReleasePrivate *priv = GET_PRIVATE (release);
+ g_return_if_fail (AS_IS_RELEASE (release));
+ priv->install_duration = install_duration;
+}
+
+/**
* as_release_set_description:
* @release: a #AsRelease instance.
* @locale: (nullable): the locale. e.g. "en_GB"
@@ -778,6 +814,12 @@ as_release_node_insert (AsRelease *release, GNode *parent, AsNodeContext *ctx)
}
if (priv->version != NULL)
as_node_add_attribute (n, "version", priv->version);
+ if (priv->install_duration > 0) {
+ g_autofree gchar *install_duration_str = NULL;
+ install_duration_str = g_strdup_printf ("%" G_GUINT64_FORMAT,
+ priv->install_duration);
+ as_node_add_attribute (n, "install_duration", install_duration_str);
+ }
for (guint i = 0; priv->locations != NULL && i < priv->locations->len; i++) {
const gchar *tmp = g_ptr_array_index (priv->locations, i);
as_node_insert (n, "location", tmp,
@@ -851,6 +893,9 @@ as_release_node_parse (AsRelease *release, GNode *node,
tmp = as_node_get_attribute (node, "version");
if (tmp != NULL)
as_release_set_version (release, tmp);
+ tmp = as_node_get_attribute (node, "install_duration");
+ if (tmp != NULL)
+ priv->install_duration = g_ascii_strtoull (tmp, NULL, 10);
/* get optional locations */
if (priv->locations != NULL)
diff --git a/libappstream-glib/as-release.h b/libappstream-glib/as-release.h
index 993c2af..06725de 100644
--- a/libappstream-glib/as-release.h
+++ b/libappstream-glib/as-release.h
@@ -98,6 +98,7 @@ const gchar *as_release_get_version (AsRelease *release);
GBytes *as_release_get_blob (AsRelease *release,
const gchar *filename);
guint64 as_release_get_timestamp (AsRelease *release);
+guint64 as_release_get_install_duration(AsRelease *release);
const gchar *as_release_get_description (AsRelease *release,
const gchar *locale);
GPtrArray *as_release_get_locations (AsRelease *release);
@@ -121,6 +122,8 @@ void as_release_set_blob (AsRelease *release,
GBytes *blob);
void as_release_set_timestamp (AsRelease *release,
guint64 timestamp);
+void as_release_set_install_duration(AsRelease *release,
+ guint64 install_duration);
void as_release_set_description (AsRelease *release,
const gchar *locale,
const gchar *description);
diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c
index c25e62e..d90af48 100644
--- a/libappstream-glib/as-self-test.c
+++ b/libappstream-glib/as-self-test.c
@@ -456,7 +456,8 @@ as_test_release_func (void)
AsNode *n;
AsNode *root;
GString *xml;
- const gchar *src = "<release type=\"stable\" timestamp=\"123\" urgency=\"critical\" version=\"0.1.2\"/>";
+ const gchar *src = "<release type=\"stable\" install_duration=\"120\" "
+ "timestamp=\"123\" urgency=\"critical\" version=\"0.1.2\"/>";
gboolean ret;
g_autoptr(AsNodeContext) ctx = NULL;
g_autoptr(AsRelease) release = NULL;