diff options
author | Richard Hughes <richard@hughsie.com> | 2015-10-06 16:54:02 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2015-10-06 16:54:02 +0100 |
commit | 6a9a29d1695b2d8b7be0f2df730fdc6f2fc12618 (patch) | |
tree | d0049a5ef6d9e7b180e11bb654210c0f89b5a622 | |
parent | 3fc4f1801752a54c95ea77c67ebd726a9c941958 (diff) | |
download | appstream-glib-6a9a29d1695b2d8b7be0f2df730fdc6f2fc12618.tar.gz |
Add the ability to set file blobs on the AsRelease objects
These are not stored in the XML for obvious reasons.
-rw-r--r-- | libappstream-glib/as-release.c | 44 | ||||
-rw-r--r-- | libappstream-glib/as-release.h | 5 |
2 files changed, 49 insertions, 0 deletions
diff --git a/libappstream-glib/as-release.c b/libappstream-glib/as-release.c index 2be9ff5..e192019 100644 --- a/libappstream-glib/as-release.c +++ b/libappstream-glib/as-release.c @@ -51,6 +51,7 @@ typedef struct guint64 size[AS_SIZE_KIND_LAST]; gchar *version; gchar *filename; + GHashTable *blobs; /* of gchar*:GBytes */ GHashTable *descriptions; guint64 timestamp; GPtrArray *locations; @@ -72,6 +73,7 @@ as_release_finalize (GObject *object) g_free (priv->version); g_free (priv->filename); + g_hash_table_unref (priv->blobs); g_ptr_array_unref (priv->checksums); g_ptr_array_unref (priv->locations); if (priv->descriptions != NULL) @@ -92,6 +94,8 @@ as_release_init (AsRelease *release) priv->urgency = AS_URGENCY_KIND_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, + g_free, (GDestroyNotify) g_bytes_unref); for (i = 0; i < AS_SIZE_KIND_LAST; i++) priv->size[i] = 0; } @@ -228,6 +232,25 @@ as_release_get_filename (AsRelease *release) } /** + * as_release_get_blob: + * @release: a #AsRelease instance. + * @filename: a filename + * + * Gets the release blob, which is typically firmware file data. + * + * Returns: a #GBytes, or %NULL for not set + * + * Since: 0.5.2 + **/ +GBytes * +as_release_get_blob (AsRelease *release, const gchar *filename) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + g_return_val_if_fail (filename != NULL, NULL); + return g_hash_table_lookup (priv->blobs, filename); +} + +/** * as_release_get_locations: * @release: a #AsRelease instance. * @@ -404,6 +427,27 @@ as_release_set_filename (AsRelease *release, const gchar *filename) } /** + * as_release_set_blob: + * @release: a #AsRelease instance. + * @filename: a filename + * @blob: the #GBytes data blob + * + * Sets a release blob, which is typically firmware data or a detached signature. + * + * NOTE: This is not stored in the XML file, and is only available in-memory. + * + * Since: 0.5.2 + **/ +void +as_release_set_blob (AsRelease *release, const gchar *filename, GBytes *blob) +{ + AsReleasePrivate *priv = GET_PRIVATE (release); + g_return_if_fail (filename != NULL); + g_return_if_fail (blob != NULL); + g_hash_table_insert (priv->blobs, g_strdup (filename), g_bytes_ref (blob)); +} + +/** * as_release_set_urgency: * @release: a #AsRelease instance. * @urgency: the release urgency, e.g. %AS_URGENCY_KIND_CRITICAL diff --git a/libappstream-glib/as-release.h b/libappstream-glib/as-release.h index d1d6462..7ba6e99 100644 --- a/libappstream-glib/as-release.h +++ b/libappstream-glib/as-release.h @@ -56,6 +56,8 @@ gint as_release_vercmp (AsRelease *rel1, /* getters */ const gchar *as_release_get_version (AsRelease *release); const gchar *as_release_get_filename (AsRelease *release); +GBytes *as_release_get_blob (AsRelease *release, + const gchar *filename); guint64 as_release_get_timestamp (AsRelease *release); const gchar *as_release_get_description (AsRelease *release, const gchar *locale); @@ -75,6 +77,9 @@ void as_release_set_version (AsRelease *release, const gchar *version); void as_release_set_filename (AsRelease *release, const gchar *filename); +void as_release_set_blob (AsRelease *release, + const gchar *filename, + GBytes *blob); void as_release_set_timestamp (AsRelease *release, guint64 timestamp); void as_release_set_description (AsRelease *release, |