diff options
Diffstat (limited to 'libappstream-glib/as-release.c')
-rw-r--r-- | libappstream-glib/as-release.c | 88 |
1 files changed, 87 insertions, 1 deletions
diff --git a/libappstream-glib/as-release.c b/libappstream-glib/as-release.c index 2b13ab3..b74a243 100644 --- a/libappstream-glib/as-release.c +++ b/libappstream-glib/as-release.c @@ -1,6 +1,7 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * - * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2014-2018 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2018 Matthias Klumpp <matthias@tenstral.net> * * Licensed under the GNU Lesser General Public License Version 2.1 * @@ -50,6 +51,7 @@ typedef struct { AsUrgencyKind urgency; + AsReleaseKind kind; AsReleaseState state; guint64 *sizes; AsRefString *version; @@ -90,6 +92,7 @@ as_release_init (AsRelease *release) { AsReleasePrivate *priv = GET_PRIVATE (release); priv->urgency = AS_URGENCY_KIND_UNKNOWN; + priv->kind = AS_RELEASE_KIND_UNKNOWN; priv->state = AS_RELEASE_STATE_UNKNOWN; } @@ -137,6 +140,45 @@ as_release_class_init (AsReleaseClass *klass) GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = as_release_finalize; } +/** + * as_release_kind_to_string: + * @kind: the #AsReleaseKind. + * + * Converts the enumerated value to an text representation. + * + * Returns: string version of @kind + * + * Since: 0.7.6 + **/ +const gchar* +as_release_kind_to_string (AsReleaseKind kind) +{ + if (kind == AS_RELEASE_KIND_STABLE) + return "stable"; + if (kind == AS_RELEASE_KIND_DEVELOPMENT) + return "development"; + return "unknown"; +} + +/** + * as_release_kind_from_string: + * @kind_str: the string. + * + * Converts the text representation to an enumerated value. + * + * Returns: an #AsReleaseKind or %AS_RELEASE_KIND_UNKNOWN for unknown + * + * Since: 0.7.6 + **/ +AsReleaseKind +as_release_kind_from_string (const gchar *kind_str) +{ + if (g_strcmp0 (kind_str, "stable") == 0) + return AS_RELEASE_KIND_STABLE; + if (g_strcmp0 (kind_str, "development") == 0) + return AS_RELEASE_KIND_DEVELOPMENT; + return AS_RELEASE_KIND_UNKNOWN; +} /** * as_release_state_from_string: @@ -286,6 +328,23 @@ as_release_get_state (AsRelease *release) } /** + * as_release_get_kind: + * @release: a #AsRelease instance. + * + * Gets the type of the release. + * + * Returns: enumerated value, e.g. %AS_RELEASE_KIND_STABLE + * + * Since: 0.7.6 + **/ +AsReleaseKind +as_release_get_kind (AsRelease *release) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + return priv->kind; +} + +/** * as_release_get_version: * @release: a #AsRelease instance. * @@ -529,6 +588,22 @@ as_release_set_urgency (AsRelease *release, AsUrgencyKind urgency) } /** + * as_release_set_kind: + * @release: a #AsRelease instance. + * @kind: the #AsReleaseKind + * + * Sets the release kind. + * + * Since: 0.7.6 + **/ +void +as_release_set_kind (AsRelease *release, AsReleaseKind kind) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + priv->kind = kind; +} + +/** * as_release_set_state: * @release: a #AsRelease instance. * @state: the release state, e.g. %AS_RELEASE_STATE_INSTALLED @@ -660,6 +735,10 @@ as_release_node_insert (AsRelease *release, GNode *parent, AsNodeContext *ctx) as_node_add_attribute (n, "urgency", as_urgency_kind_to_string (priv->urgency)); } + if (priv->kind != AS_RELEASE_KIND_UNKNOWN) { + as_node_add_attribute (n, "type", + as_release_kind_to_string (priv->kind)); + } if (as_node_context_get_output_trusted (ctx) && priv->state != AS_RELEASE_STATE_UNKNOWN) { as_node_add_attribute (n, "state", @@ -732,6 +811,9 @@ as_release_node_parse (AsRelease *release, GNode *node, tmp = as_node_get_attribute (node, "urgency"); if (tmp != NULL) as_release_set_urgency (release, as_urgency_kind_from_string (tmp)); + tmp = as_node_get_attribute (node, "type"); + if (tmp != NULL) + as_release_set_kind (release, as_release_kind_from_string (tmp)); tmp = as_node_get_attribute (node, "version"); if (tmp != NULL) as_release_set_version (release, tmp); @@ -844,6 +926,10 @@ as_release_node_parse_dep11 (AsRelease *release, GNode *node, as_release_set_version (release, as_yaml_node_get_value (n)); continue; } + if (g_strcmp0 (tmp, "type") == 0) { + as_release_set_kind (release, as_release_kind_from_string (as_yaml_node_get_value (n))); + continue; + } if (g_strcmp0 (tmp, "description") == 0) { for (c = n->children; c != NULL; c = c->next) { as_release_set_description (release, |