diff options
author | Richard Hughes <richard@hughsie.com> | 2018-11-11 08:40:40 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2018-11-27 14:54:07 +0000 |
commit | 5f6aeb9817187bb0666056f3f5e815018bd1ac92 (patch) | |
tree | e2cd0a333e93aece2994c950de9d257c67d2bc47 | |
parent | 6c4ac12f7d71cff6f09c161cc0f2232a34a3aca2 (diff) | |
download | appstream-glib-5f6aeb9817187bb0666056f3f5e815018bd1ac92.tar.gz |
Add as_release_set_install_duration()
-rw-r--r-- | libappstream-glib/as-release.c | 45 | ||||
-rw-r--r-- | libappstream-glib/as-release.h | 3 | ||||
-rw-r--r-- | libappstream-glib/as-self-test.c | 3 |
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; |