[grilo] core: Serialize/unserialize binary metadata keys
- From: Juan A. Suarez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo] core: Serialize/unserialize binary metadata keys
- Date: Thu, 1 Nov 2012 22:44:15 +0000 (UTC)
commit b6dd0e651ce0e65ae867f424dca60e87b88fab77
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date: Thu Nov 1 11:37:17 2012 +0000
core: Serialize/unserialize binary metadata keys
Values are encoded as (escaped) base64.
src/data/grl-media.c | 32 ++++++++++++++++++++++----------
1 files changed, 22 insertions(+), 10 deletions(-)
---
diff --git a/src/data/grl-media.c b/src/data/grl-media.c
index 5ab937b..e1a95fb 100644
--- a/src/data/grl-media.c
+++ b/src/data/grl-media.c
@@ -295,6 +295,7 @@ grl_media_serialize_extended (GrlMedia *media,
GrlMediaSerializeType serial_type,
...)
{
+ GByteArray *binary_blob;
GList *key;
GList *keylist;
GRegex *type_regex;
@@ -305,6 +306,7 @@ grl_media_serialize_extended (GrlMedia *media,
const gchar *id;
const gchar *source;
const gchar *type_name;
+ gchar *base64_blob;
gchar *protocol;
gchar *serial_media;
va_list va_serial;
@@ -380,6 +382,14 @@ grl_media_serialize_extended (GrlMedia *media,
g_string_append_printf (serial, "%f", g_value_get_float (value));
} else if (G_VALUE_HOLDS_BOOLEAN (value)) {
g_string_append_printf (serial, "%d", g_value_get_boolean (value));
+ } else if (G_VALUE_TYPE (value) == G_TYPE_BYTE_ARRAY) {
+ binary_blob = g_value_get_boxed (value);
+ base64_blob = g_base64_encode (binary_blob->data, binary_blob->len);
+ g_string_append_uri_escaped (serial,
+ base64_blob,
+ NULL,
+ TRUE);
+ g_free (base64_blob);
}
g_string_append_c (serial, '&');
}
@@ -416,7 +426,7 @@ grl_media_unserialize (const gchar *serial)
GRegex *protocol_regex;
GRegex *query_regex;
GRegex *uri_regex;
- GType type_media;
+ GType type_media, type_grlkey;
GrlKeyID grlkey;
GrlMedia *media;
GrlRegistry *registry;
@@ -426,6 +436,8 @@ grl_media_unserialize (const gchar *serial)
gchar *query;
gchar *type_name;
gchar *value;
+ gsize blob_size;
+ guchar *blob;
g_return_val_if_fail (serial, NULL);
@@ -494,19 +506,19 @@ grl_media_unserialize (const gchar *serial)
if (grlkey) {
escaped_value = g_match_info_fetch (match_info, 2);
value = g_uri_unescape_string (escaped_value, NULL);
- switch (GRL_METADATA_KEY_GET_TYPE (grlkey)) {
- case G_TYPE_STRING:
+ type_grlkey = GRL_METADATA_KEY_GET_TYPE (grlkey);
+ if (type_grlkey == G_TYPE_STRING) {
grl_data_set_string (GRL_DATA (media), grlkey, value);
- break;
- case G_TYPE_INT:
+ } else if (type_grlkey == G_TYPE_INT) {
grl_data_set_int (GRL_DATA (media), grlkey, atoi (value));
- break;
- case G_TYPE_FLOAT:
+ } else if (type_grlkey == G_TYPE_FLOAT) {
grl_data_set_float (GRL_DATA (media), grlkey, atof (value));
- break;
- case G_TYPE_BOOLEAN:
+ } else if (type_grlkey == G_TYPE_BOOLEAN) {
grl_data_set_boolean (GRL_DATA (media), grlkey, atoi (value) == 0? FALSE: TRUE);
- break;
+ } else if (type_grlkey == G_TYPE_BYTE_ARRAY) {
+ blob = g_base64_decode (value, &blob_size);
+ grl_data_set_binary (GRL_DATA (media), grlkey, blob, blob_size);
+ g_free (blob);
}
g_free (escaped_value);
g_free (value);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]