diff options
author | Richard Hughes <richard@hughsie.com> | 2018-01-25 20:46:10 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2018-01-25 20:46:10 +0000 |
commit | bdcec1ecee0549e404fdf40dc4529b4380ef87ea (patch) | |
tree | 10d8806797812803165610f0417289ffe9699e41 | |
parent | 2dd6f02296f82cba60c1523d361d8250d9f43539 (diff) | |
download | appstream-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.c | 88 | ||||
-rw-r--r-- | libappstream-glib/as-release.h | 26 | ||||
-rw-r--r-- | libappstream-glib/as-self-test.c | 5 |
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 */ |