diff options
author | Richard Hughes <richard@hughsie.com> | 2016-01-26 11:27:19 +0000 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2016-01-26 11:27:19 +0000 |
commit | 50d31f68ffe161195f6aff606f824bdca7805ea9 (patch) | |
tree | a1654d60764c6d7101ad73238ea150e88ba1f5d7 | |
parent | 69bc75c5de948797d12e7534f12a9a83ba8d005d (diff) | |
download | appstream-glib-50d31f68ffe161195f6aff606f824bdca7805ea9.tar.gz |
Allow setting state on AsRelease objects
-rw-r--r-- | libappstream-glib/as-app.c | 6 | ||||
-rw-r--r-- | libappstream-glib/as-release.c | 37 | ||||
-rw-r--r-- | libappstream-glib/as-release.h | 23 | ||||
-rw-r--r-- | libappstream-glib/as-self-test.c | 5 | ||||
-rw-r--r-- | libappstream-glib/as-store.c | 26 |
5 files changed, 92 insertions, 5 deletions
diff --git a/libappstream-glib/as-app.c b/libappstream-glib/as-app.c index 0c03797..333e5af 100644 --- a/libappstream-glib/as-app.c +++ b/libappstream-glib/as-app.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * - * Copyright (C) 2014-2015 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com> * * Licensed under the GNU Lesser General Public License Version 2.1 * @@ -2129,6 +2129,10 @@ as_app_subsume_release (AsRelease *release, AsRelease *donor) if (tmp != NULL) as_release_set_description (release, NULL, tmp); + /* only installed is useful */ + if (as_release_get_state (donor) == AS_RELEASE_STATE_INSTALLED); + as_release_set_state (release, AS_RELEASE_STATE_INSTALLED); + /* overwrite the timestamp if the metadata is high quality, * or if no timestamp has already been set */ if (tmp != NULL || as_release_get_timestamp (release) == 0) diff --git a/libappstream-glib/as-release.c b/libappstream-glib/as-release.c index d5f0737..cce0eb7 100644 --- a/libappstream-glib/as-release.c +++ b/libappstream-glib/as-release.c @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * - * Copyright (C) 2014-2015 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com> * * Licensed under the GNU Lesser General Public License Version 2.1 * @@ -48,6 +48,7 @@ typedef struct { AsUrgencyKind urgency; + AsReleaseState state; guint64 size[AS_SIZE_KIND_LAST]; gchar *version; GHashTable *blobs; /* of gchar*:GBytes */ @@ -90,6 +91,7 @@ as_release_init (AsRelease *release) guint i; priv->urgency = AS_URGENCY_KIND_UNKNOWN; + priv->state = AS_RELEASE_STATE_UNKNOWN; priv->locations = g_ptr_array_new_with_free_func (g_free); priv->checksums = g_ptr_array_new_with_free_func ((GDestroyNotify) g_object_unref); priv->blobs = g_hash_table_new_full (g_str_hash, g_str_equal, @@ -196,6 +198,23 @@ as_release_get_urgency (AsRelease *release) } /** + * as_release_get_state: + * @release: a #AsRelease instance. + * + * Gets the release state. + * + * Returns: enumberated value, or %AS_RELEASE_STATE_UNKNOWN for not set or invalid + * + * Since: 0.5.8 + **/ +AsReleaseState +as_release_get_state (AsRelease *release) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + return priv->state; +} + +/** * as_release_get_version: * @release: a #AsRelease instance. * @@ -428,6 +447,22 @@ as_release_set_urgency (AsRelease *release, AsUrgencyKind urgency) } /** + * as_release_set_state: + * @release: a #AsRelease instance. + * @state: the release state, e.g. %AS_RELEASE_STATE_INSTALLED + * + * Sets the release state. + * + * Since: 0.5.8 + **/ +void +as_release_set_state (AsRelease *release, AsReleaseState state) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + priv->state = state; +} + +/** * as_release_add_location: * @release: a #AsRelease instance. * @location: the location string. diff --git a/libappstream-glib/as-release.h b/libappstream-glib/as-release.h index 171339d..402fbc7 100644 --- a/libappstream-glib/as-release.h +++ b/libappstream-glib/as-release.h @@ -1,6 +1,6 @@ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- * - * Copyright (C) 2014-2015 Richard Hughes <richard@hughsie.com> + * Copyright (C) 2014-2016 Richard Hughes <richard@hughsie.com> * * Licensed under the GNU Lesser General Public License Version 2.1 * @@ -49,6 +49,22 @@ struct _AsReleaseClass void (*_as_reserved8) (void); }; +/** + * AsReleaseState: + * @AS_RELEASE_STATE_UNKNOWN: Unknown state + * @AS_RELEASE_STATE_INSTALLED: Release is installed + * @AS_RELEASE_STATE_AVAILABLE: Release is available + * + * The release state. + **/ +typedef enum { + AS_RELEASE_STATE_UNKNOWN, /* Since: 0.5.8 */ + AS_RELEASE_STATE_INSTALLED, /* Since: 0.5.8 */ + AS_RELEASE_STATE_AVAILABLE, /* Since: 0.5.8 */ + /*< private >*/ + AS_RELEASE_STATE_LAST +} AsReleaseState; + AsRelease *as_release_new (void); gint as_release_vercmp (AsRelease *rel1, AsRelease *rel2); @@ -68,6 +84,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); +AsReleaseState as_release_get_state (AsRelease *release); guint64 as_release_get_size (AsRelease *release, AsSizeKind kind); @@ -87,7 +104,9 @@ void as_release_add_location (AsRelease *release, void as_release_add_checksum (AsRelease *release, AsChecksum *checksum); void as_release_set_urgency (AsRelease *release, - AsUrgencyKind urgency); + AsUrgencyKind urgency); +void as_release_set_state (AsRelease *release, + AsReleaseState state); void as_release_set_size (AsRelease *release, AsSizeKind kind, guint64 size); diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c index 9af9135..b79e219 100644 --- a/libappstream-glib/as-self-test.c +++ b/libappstream-glib/as-self-test.c @@ -441,8 +441,13 @@ as_test_release_func (void) /* verify */ g_assert_cmpint (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_cmpstr (as_release_get_version (release), ==, "0.1.2"); + /* state is not stored in the XML */ + as_release_set_state (release, AS_RELEASE_STATE_INSTALLED); + g_assert_cmpint (as_release_get_state (release), ==, AS_RELEASE_STATE_INSTALLED); + /* back to node */ root = as_node_new (); as_node_context_set_version (ctx, 0.4); diff --git a/libappstream-glib/as-store.c b/libappstream-glib/as-store.c index e80fa58..5b23c68 100644 --- a/libappstream-glib/as-store.c +++ b/libappstream-glib/as-store.c @@ -1974,6 +1974,27 @@ as_store_load_app_install (AsStore *store, } /** + * as_store_set_app_installed: + **/ +static void +as_store_set_app_installed (AsApp *app) +{ + AsRelease *rel; + GPtrArray *releases; + guint i; + + /* releases */ + releases = as_app_get_releases (app); + for (i = 0; i < releases->len; i++) { + rel = g_ptr_array_index (releases, i); + as_release_set_state (rel, AS_RELEASE_STATE_INSTALLED); + } + + /* app itself */ + as_app_set_state (app, AS_APP_STATE_INSTALLED); +} + +/** * as_store_load_installed: **/ static gboolean @@ -2048,9 +2069,12 @@ as_store_load_installed (AsStore *store, as_app_get_vetos(app)->len > 0) continue; + /* as these are added from installed AppData files then all the + * releases can also be marked as installed */ + as_store_set_app_installed (app); + /* set lower priority than AppStream entries */ as_app_set_priority (app, -1); - as_app_set_state (app, AS_APP_STATE_INSTALLED); as_store_add_app (store, app); } |