summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2015-10-06 16:54:02 +0100
committerRichard Hughes <richard@hughsie.com>2015-10-06 16:54:02 +0100
commit6a9a29d1695b2d8b7be0f2df730fdc6f2fc12618 (patch)
treed0049a5ef6d9e7b180e11bb654210c0f89b5a622
parent3fc4f1801752a54c95ea77c67ebd726a9c941958 (diff)
downloadappstream-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.c44
-rw-r--r--libappstream-glib/as-release.h5
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,