summaryrefslogtreecommitdiff
path: root/libappstream-glib/as-release.c
diff options
context:
space:
mode:
Diffstat (limited to 'libappstream-glib/as-release.c')
-rw-r--r--libappstream-glib/as-release.c88
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,