summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2018-01-25 20:46:10 +0000
committerRichard Hughes <richard@hughsie.com>2018-01-25 20:46:10 +0000
commitbdcec1ecee0549e404fdf40dc4529b4380ef87ea (patch)
tree10d8806797812803165610f0417289ffe9699e41
parent2dd6f02296f82cba60c1523d361d8250d9f43539 (diff)
downloadappstream-glib-bdcec1ecee0549e404fdf40dc4529b4380ef87ea.tar.gz
Add support for release types
These are used to identify development or stable release information.
-rw-r--r--libappstream-glib/as-release.c88
-rw-r--r--libappstream-glib/as-release.h26
-rw-r--r--libappstream-glib/as-self-test.c5
3 files changed, 115 insertions, 4 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,
diff --git a/libappstream-glib/as-release.h b/libappstream-glib/as-release.h
index 326a5c1..993c2af 100644
--- a/libappstream-glib/as-release.h
+++ b/libappstream-glib/as-release.h
@@ -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,24 @@ struct _AsReleaseClass
};
/**
+ * AsReleaseKind:
+ * @AS_RELEASE_KIND_UNKNOWN: Unknown release type
+ * @AS_RELEASE_KIND_STABLE: A stable release
+ * @AS_RELEASE_KIND_DEVELOPMENT: A development release
+ *
+ * The release size kind.
+ *
+ * Since: 0.7.6
+ **/
+typedef enum {
+ AS_RELEASE_KIND_UNKNOWN, /* Since: 0.7.6 */
+ AS_RELEASE_KIND_STABLE, /* Since: 0.7.6 */
+ AS_RELEASE_KIND_DEVELOPMENT, /* Since: 0.7.6 */
+ /*< private >*/
+ AS_RELEASE_KIND_LAST
+} AsReleaseKind;
+
+/**
* AsReleaseState:
* @AS_RELEASE_STATE_UNKNOWN: Unknown state
* @AS_RELEASE_STATE_INSTALLED: Release is installed
@@ -69,6 +88,8 @@ AsRelease *as_release_new (void);
gint as_release_vercmp (AsRelease *rel1,
AsRelease *rel2);
+AsReleaseKind as_release_kind_from_string (const gchar *kind_str);
+const gchar *as_release_kind_to_string (AsReleaseKind kind);
AsReleaseState as_release_state_from_string (const gchar *state);
const gchar *as_release_state_to_string (AsReleaseState state);
@@ -87,6 +108,7 @@ AsChecksum *as_release_get_checksum_by_target (AsRelease *release,
AsChecksumTarget target);
GPtrArray *as_release_get_checksums (AsRelease *release);
AsUrgencyKind as_release_get_urgency (AsRelease *release);
+AsReleaseKind as_release_get_kind (AsRelease *release);
AsReleaseState as_release_get_state (AsRelease *release);
guint64 as_release_get_size (AsRelease *release,
AsSizeKind kind);
@@ -108,6 +130,8 @@ void as_release_add_checksum (AsRelease *release,
AsChecksum *checksum);
void as_release_set_urgency (AsRelease *release,
AsUrgencyKind urgency);
+void as_release_set_kind (AsRelease *release,
+ AsReleaseKind kind);
void as_release_set_state (AsRelease *release,
AsReleaseState state);
void as_release_set_size (AsRelease *release,
diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c
index cde6fda..9800c03 100644
--- a/libappstream-glib/as-self-test.c
+++ b/libappstream-glib/as-self-test.c
@@ -1,6 +1,6 @@
/* -*- 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>
*
* Licensed under the GNU Lesser General Public License Version 2.1
*
@@ -455,7 +455,7 @@ as_test_release_func (void)
AsNode *n;
AsNode *root;
GString *xml;
- const gchar *src = "<release timestamp=\"123\" urgency=\"critical\" version=\"0.1.2\"/>";
+ const gchar *src = "<release type=\"stable\" timestamp=\"123\" urgency=\"critical\" version=\"0.1.2\"/>";
gboolean ret;
g_autoptr(AsNodeContext) ctx = NULL;
g_autoptr(AsRelease) release = NULL;
@@ -478,6 +478,7 @@ as_test_release_func (void)
g_assert_cmpint ((gint32) as_release_get_timestamp (release), ==, 123);
g_assert_cmpint (as_release_get_urgency (release), ==, AS_URGENCY_KIND_CRITICAL);
g_assert_cmpint (as_release_get_state (release), ==, AS_RELEASE_STATE_UNKNOWN);
+ g_assert_cmpint (as_release_get_kind (release), ==, AS_RELEASE_KIND_STABLE);
g_assert_cmpstr (as_release_get_version (release), ==, "0.1.2");
/* state is not stored in the XML */