[PATCH 1/5] core: Use numbers to identify Grilo keys
- From: Guillaume Emont <guijemont igalia com>
- To: grilo-list gnome org
- Subject: [PATCH 1/5] core: Use numbers to identify Grilo keys
- Date: Wed, 4 May 2011 19:01:59 +0200
From: Juan A. Suarez Romero <jasuarez igalia com>
Use guint32 instead of GParamSpec for Grilo keys.
Mostly the API remains the same.
New functions to get the name or type of a Grilo key has been introduced.
Main changes are:
- Introduced GRL_METADATA_KEY_INVALID definition
- grl_metadata_key_list_new() needs to end with GRL_METADATA_KEY_INVALID
instead of NULL.
- Introduced GRLKEYID_TO_POINTER and GRLPOINTER_TO_KEYID macros to
convert between GrlKeyID and gpointers.
---
src/data/grl-data.c | 11 ++-
src/data/grl-media.c | 2 +-
src/grl-metadata-key.c | 131 +++++++++++++++++++-------
src/grl-metadata-key.h | 20 +++--
src/grl-metadata-source.c | 15 ++--
src/grl-plugin-registry.c | 182 +++++++++++++++++++++++++++++++++----
src/grl-plugin-registry.h | 13 +++
tools/grilo-inspect/grl-inspect.c | 3 +-
tools/grilo-test-ui/main.c | 14 ++-
9 files changed, 310 insertions(+), 81 deletions(-)
diff --git a/src/data/grl-data.c b/src/data/grl-data.c
index 45723b9..55d2418 100644
--- a/src/data/grl-data.c
+++ b/src/data/grl-data.c
@@ -533,7 +533,7 @@ grl_data_has_key (GrlData *data, GrlKeyID key)
return FALSE;
}
- related_keys = g_hash_table_lookup (data->priv->data, sample_key);
+ related_keys = g_hash_table_lookup (data->priv->data, GRLKEYID_TO_POINTER (sample_key));
while (related_keys && !found) {
found = grl_related_keys_has_key (related_keys->data, key);
related_keys = g_list_next (related_keys);
@@ -636,7 +636,7 @@ grl_data_add_related_keys (GrlData *data,
return;
}
- sample_key = get_sample_key (keys->data);
+ sample_key = get_sample_key (GRLPOINTER_TO_KEYID (keys->data));
g_list_free (keys);
if (!sample_key) {
@@ -644,9 +644,12 @@ grl_data_add_related_keys (GrlData *data,
return;
}
- list_relkeys = g_hash_table_lookup (data->priv->data, sample_key);
+ list_relkeys = g_hash_table_lookup (data->priv->data,
+ GRLKEYID_TO_POINTER (sample_key));
list_relkeys = g_list_append (list_relkeys, relkeys);
- g_hash_table_insert (data->priv->data, sample_key, list_relkeys);
+ g_hash_table_insert (data->priv->data,
+ GRLKEYID_TO_POINTER (sample_key),
+ list_relkeys);
}
/**
diff --git a/src/data/grl-media.c b/src/data/grl-media.c
index d467920..0757a06 100644
--- a/src/data/grl-media.c
+++ b/src/data/grl-media.c
@@ -339,7 +339,7 @@ grl_media_serialize_extended (GrlMedia *media,
va_start (va_serial, serial_type);
keylist = va_arg (va_serial, GList *);
for (key = keylist; key; key = g_list_next (key)) {
- grlkey = key->data;
+ grlkey = GRLPOINTER_TO_KEYID (key->data);
/* Skip id and source keys */
if (grlkey == GRL_METADATA_KEY_ID ||
grlkey == GRL_METADATA_KEY_SOURCE) {
diff --git a/src/grl-metadata-key.c b/src/grl-metadata-key.c
index 848186d..e561a04 100644
--- a/src/grl-metadata-key.c
+++ b/src/grl-metadata-key.c
@@ -26,40 +26,40 @@
#include <stdarg.h>
-GrlKeyID GRL_METADATA_KEY_ALBUM = NULL;
-GrlKeyID GRL_METADATA_KEY_ARTIST = NULL;
-GrlKeyID GRL_METADATA_KEY_AUTHOR = NULL;
-GrlKeyID GRL_METADATA_KEY_DATE = NULL;
-GrlKeyID GRL_METADATA_KEY_DESCRIPTION = NULL;
-GrlKeyID GRL_METADATA_KEY_GENRE = NULL;
-GrlKeyID GRL_METADATA_KEY_ID = NULL;
-GrlKeyID GRL_METADATA_KEY_LAST_PLAYED = NULL;
-GrlKeyID GRL_METADATA_KEY_LYRICS = NULL;
-GrlKeyID GRL_METADATA_KEY_MIME = NULL;
-GrlKeyID GRL_METADATA_KEY_SITE = NULL;
-GrlKeyID GRL_METADATA_KEY_SOURCE = NULL;
-GrlKeyID GRL_METADATA_KEY_THUMBNAIL = NULL;
-GrlKeyID GRL_METADATA_KEY_THUMBNAIL_BINARY = NULL;
-GrlKeyID GRL_METADATA_KEY_TITLE = NULL;
-
-GrlKeyID GRL_METADATA_KEY_URL = NULL;
-GrlKeyID GRL_METADATA_KEY_EXTERNAL_URL = NULL;
-GrlKeyID GRL_METADATA_KEY_EXTERNAL_PLAYER = NULL;
-
-GrlKeyID GRL_METADATA_KEY_BITRATE = NULL;
-GrlKeyID GRL_METADATA_KEY_CHILDCOUNT = NULL;
-GrlKeyID GRL_METADATA_KEY_DURATION = NULL;
-GrlKeyID GRL_METADATA_KEY_HEIGHT = NULL;
-GrlKeyID GRL_METADATA_KEY_LAST_POSITION = NULL;
-GrlKeyID GRL_METADATA_KEY_PLAY_COUNT = NULL;
-GrlKeyID GRL_METADATA_KEY_WIDTH = NULL;
-
-GrlKeyID GRL_METADATA_KEY_FRAMERATE = NULL;
-GrlKeyID GRL_METADATA_KEY_RATING = NULL;
-
-GrlKeyID GRL_METADATA_KEY_STUDIO = NULL;
-GrlKeyID GRL_METADATA_KEY_CERTIFICATE = NULL;
-GrlKeyID GRL_METADATA_KEY_LICENSE = NULL;
+GrlKeyID GRL_METADATA_KEY_ALBUM = 0;
+GrlKeyID GRL_METADATA_KEY_ARTIST = 0;
+GrlKeyID GRL_METADATA_KEY_AUTHOR = 0;
+GrlKeyID GRL_METADATA_KEY_DATE = 0;
+GrlKeyID GRL_METADATA_KEY_DESCRIPTION = 0;
+GrlKeyID GRL_METADATA_KEY_GENRE = 0;
+GrlKeyID GRL_METADATA_KEY_ID = 0;
+GrlKeyID GRL_METADATA_KEY_LAST_PLAYED = 0;
+GrlKeyID GRL_METADATA_KEY_LYRICS = 0;
+GrlKeyID GRL_METADATA_KEY_MIME = 0;
+GrlKeyID GRL_METADATA_KEY_SITE = 0;
+GrlKeyID GRL_METADATA_KEY_SOURCE = 0;
+GrlKeyID GRL_METADATA_KEY_THUMBNAIL = 0;
+GrlKeyID GRL_METADATA_KEY_THUMBNAIL_BINARY = 0;
+GrlKeyID GRL_METADATA_KEY_TITLE = 0;
+
+GrlKeyID GRL_METADATA_KEY_URL = 0;
+GrlKeyID GRL_METADATA_KEY_EXTERNAL_URL = 0;
+GrlKeyID GRL_METADATA_KEY_EXTERNAL_PLAYER = 0;
+
+GrlKeyID GRL_METADATA_KEY_BITRATE = 0;
+GrlKeyID GRL_METADATA_KEY_CHILDCOUNT = 0;
+GrlKeyID GRL_METADATA_KEY_DURATION = 0;
+GrlKeyID GRL_METADATA_KEY_HEIGHT = 0;
+GrlKeyID GRL_METADATA_KEY_LAST_POSITION = 0;
+GrlKeyID GRL_METADATA_KEY_PLAY_COUNT = 0;
+GrlKeyID GRL_METADATA_KEY_WIDTH = 0;
+
+GrlKeyID GRL_METADATA_KEY_FRAMERATE = 0;
+GrlKeyID GRL_METADATA_KEY_RATING = 0;
+
+GrlKeyID GRL_METADATA_KEY_STUDIO = 0;
+GrlKeyID GRL_METADATA_KEY_CERTIFICATE = 0;
+GrlKeyID GRL_METADATA_KEY_LICENSE = 0;
GrlKeyID GRL_METADATA_KEY_SEASON = NULL;
GrlKeyID GRL_METADATA_KEY_EPISODE = NULL;
@@ -452,7 +452,13 @@ GRL_METADATA_KEY_STUDIO =
const gchar *
grl_metadata_key_get_name (GrlKeyID key)
{
- return GRL_METADATA_KEY_GET_NAME (key);
+ GrlPluginRegistry *registry = grl_plugin_registry_get_default ();
+
+ if (registry) {
+ return grl_plugin_registry_lookup_metadata_key_name (registry, key);
+ } else {
+ return NULL;
+ }
}
/**
@@ -468,5 +474,58 @@ grl_metadata_key_get_name (GrlKeyID key)
const gchar *
grl_metadata_key_get_desc (GrlKeyID key)
{
- return GRL_METADATA_KEY_GET_DESC (key);
+ GrlPluginRegistry *registry = grl_plugin_registry_get_default ();
+
+ if (registry) {
+ return grl_plugin_registry_lookup_metadata_key_desc (registry, key);
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * grl_metadata_key_get_type:
+ * @key: key to look up
+ *
+ * Retrieves the expected type for values associated with this key
+ *
+ * Returns: the expected value type
+ **/
+GType grl_metadata_key_get_type (GrlKeyID key)
+{
+ GrlPluginRegistry *registry = grl_plugin_registry_get_default ();
+
+ if (registry) {
+ return grl_plugin_registry_lookup_metadata_key_type (registry, key);
+ } else {
+ return G_TYPE_INVALID;
+ }
+}
+
+/**
+ * grl_metadata_key_list_new: (skip)
+ * @first_key: first key
+ * @...: va_list keys
+ *
+ * Returns a #GList containing the va_list keys. Use #GRL_METADATA_KEY_INVALID
+ * to finalize them.
+ *
+ * Returns: a #GList
+ **/
+GList *
+grl_metadata_key_list_new(GrlKeyID first_key, ...)
+{
+ GList *key_list = NULL;
+ GrlKeyID next_key;
+ va_list va_keys;
+
+ va_start (va_keys, first_key);
+ next_key = first_key;
+ while (next_key) {
+ key_list = g_list_prepend (key_list, GRLKEYID_TO_POINTER (next_key));
+ next_key = va_arg (va_keys, GrlKeyID);
+ }
+ va_end (va_keys);
+
+ return g_list_reverse (key_list);
}
diff --git a/src/grl-metadata-key.h b/src/grl-metadata-key.h
index 35474a7..c13046e 100644
--- a/src/grl-metadata-key.h
+++ b/src/grl-metadata-key.h
@@ -31,17 +31,17 @@
#include <glib-object.h>
#define GRL_METADATA_KEY_GET_ID(key) (key)
-#define GRL_METADATA_KEY_GET_NAME(key) (g_param_spec_get_name (key))
-#define GRL_METADATA_KEY_GET_DESC(key) (g_param_spec_get_blurb(key))
-#define GRL_METADATA_KEY_GET_TYPE(key) (G_PARAM_SPEC_VALUE_TYPE(key))
+#define GRL_METADATA_KEY_GET_NAME(key) (grl_metadata_key_get_name (key))
+#define GRL_METADATA_KEY_GET_DESC(key) (grl_metadata_key_get_desc (key))
+#define GRL_METADATA_KEY_GET_TYPE(key) (grl_metadata_key_get_type (key))
-#define GRL_KEYID_FORMAT "p"
+#define GRL_KEYID_FORMAT "u"
+#define GRL_METADATA_KEY_INVALID 0
-#define grl_metadata_key_list_new(first_key, ...) \
- grl_list_from_va(first_key, ##__VA_ARGS__)
+#define GRLPOINTER_TO_KEYID(p) (GPOINTER_TO_UINT(p))
+#define GRLKEYID_TO_POINTER(k) (GUINT_TO_POINTER(k))
-
-typedef GParamSpec* GrlKeyID;
+typedef guint32 GrlKeyID;
extern GrlKeyID GRL_METADATA_KEY_ALBUM;
extern GrlKeyID GRL_METADATA_KEY_ARTIST;
@@ -87,4 +87,8 @@ const gchar *grl_metadata_key_get_name (GrlKeyID key);
const gchar *grl_metadata_key_get_desc (GrlKeyID key);
+GType grl_metadata_key_get_type (GrlKeyID key);
+
+GList *grl_metadata_key_list_new(GrlKeyID first_key, ...);
+
#endif /* _GRL_METADATA_KEY_H_ */
diff --git a/src/grl-metadata-source.c b/src/grl-metadata-source.c
index c7a73e7..cc50850 100644
--- a/src/grl-metadata-source.c
+++ b/src/grl-metadata-source.c
@@ -275,7 +275,7 @@ print_keys (gchar *label, const GList *keys)
{
g_print ("%s: [", label);
while (keys) {
- g_print (" %" GRL_KEYID_FORMAT, keys->data);
+ g_print (" %" GRL_KEYID_FORMAT, GRLPOINTER_TO_KEYID (keys->data));
keys = g_list_next (keys);
}
g_print (" ]\n");
@@ -623,7 +623,7 @@ missing_in_data (GrlData *data, const GList *deps)
return g_list_copy ((GList *) deps);
for (iter = (GList *)deps; iter; iter = g_list_next (iter)) {
- if (!grl_data_has_key (data, iter->data))
+ if (!grl_data_has_key (data, GRLPOINTER_TO_KEYID (iter->data)))
result = g_list_append (result, iter->data);
}
@@ -640,7 +640,7 @@ may_directly_resolve (GrlMetadataSource *source,
{
const GList *iter;
for (iter = keys; iter; iter = g_list_next (iter)) {
- GrlKeyID key = (GrlKeyID)iter->data;
+ GrlKeyID key = GRLPOINTER_TO_KEYID (iter->data);
if (!grl_metadata_source_may_resolve (source, media, key, NULL))
return FALSE;
@@ -884,7 +884,8 @@ grl_metadata_source_may_resolve (GrlMetadataSource *source,
* all of their supported_keys() in that case. If a media source wants to
* behave differently, it should implement may_resolve().*/
const GList *supported_keys = grl_metadata_source_supported_keys (source);
- ret = NULL != g_list_find ((GList *)supported_keys, key_id);
+ ret = NULL != g_list_find ((GList *)supported_keys,
+ GRLKEYID_TO_POINTER (key_id));
} else {
GRL_WARNING ("Source %s does not implement may_resolve(), considering it "
"can't resolve %s",
@@ -1165,13 +1166,13 @@ grl_metadata_source_expand_operation_keys (GrlMetadataSource *source,
* have to ask from other sources.
*/
for (iter = keys; iter; iter = g_list_next (iter)) {
- GrlKeyID key = (GrlKeyID) iter->data;
+ GrlKeyID key = GRLPOINTER_TO_KEYID (iter->data);
if (grl_metadata_source_may_resolve (source, media, key, NULL)) {
GRL_INFO ("We (%s) can resolve %s",
grl_metadata_source_get_name (source),
GRL_METADATA_KEY_GET_NAME (key));
} else {
- remaining_keys = g_list_append (remaining_keys, key);
+ remaining_keys = g_list_append (remaining_keys, iter->data);
}
}
@@ -1227,7 +1228,7 @@ grl_metadata_source_get_additional_sources (GrlMetadataSource *source,
TRUE);
for (iter = missing_keys; iter; iter = g_list_next (iter)) {
- GrlKeyID key = (GrlKeyID) iter->data;
+ GrlKeyID key = GRLPOINTER_TO_KEYID (iter->data);
GrlMetadataSource *_source;
GList *needed_keys = NULL;
diff --git a/src/grl-plugin-registry.c b/src/grl-plugin-registry.c
index 583523e..fee2ee1 100644
--- a/src/grl-plugin-registry.c
+++ b/src/grl-plugin-registry.c
@@ -956,8 +956,7 @@ grl_plugin_registry_unload (GrlPluginRegistry *registry,
*
* Registers a metadata key
*
- * Returns: (type GObject.ParamSpec) (transfer none): The #GrlKeyID registered
- * or @NULL on error.
+ * Returns: The #GrlKeyID registered.
*
* Since: 0.1.7
*/
@@ -966,12 +965,16 @@ grl_plugin_registry_register_metadata_key (GrlPluginRegistry *registry,
GParamSpec *key,
GError **error)
{
- g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), NULL);
- g_return_val_if_fail (G_IS_PARAM_SPEC (key), NULL);
+ const gchar *key_name;
+
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), 0);
+ g_return_val_if_fail (G_IS_PARAM_SPEC (key), 0);
+
+ key_name = g_param_spec_get_name (key);
/* Check if key is already registered */
if (g_param_spec_pool_lookup (registry->priv->system_keys,
- g_param_spec_get_name (key),
+ key_name,
GRL_TYPE_MEDIA,
FALSE)) {
GRL_WARNING ("metadata key '%s' already registered",
@@ -981,16 +984,16 @@ grl_plugin_registry_register_metadata_key (GrlPluginRegistry *registry,
GRL_CORE_ERROR_REGISTER_METADATA_KEY_FAILED,
"Metadata key '%s' was already registered",
g_param_spec_get_name (key));
- return NULL;
+ return 0;
} else {
g_param_spec_pool_insert (registry->priv->system_keys,
key,
GRL_TYPE_MEDIA);
/* Each key is related with itself */
g_hash_table_insert (registry->priv->related_keys,
- key,
+ GRLKEYID_TO_POINTER (key),
g_list_prepend (NULL, key));
- return key;
+ return (GrlKeyID) g_quark_from_static_string (key_name);
}
}
@@ -1054,7 +1057,7 @@ grl_plugin_registry_register_metadata_key_relation (GrlPluginRegistry *registry,
*
* Look up for the metadata key with name @key_name.
*
- * Returns: (type GObject.ParamSpec) (transfer none): The metadata key, or @NULL if not found
+ * Returns: The metadata key, or 0 if not found
*
* Since: 0.1.6
*/
@@ -1062,13 +1065,154 @@ GrlKeyID
grl_plugin_registry_lookup_metadata_key (GrlPluginRegistry *registry,
const gchar *key_name)
{
- g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), NULL);
- g_return_val_if_fail (key_name, NULL);
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), 0);
+ g_return_val_if_fail (key_name, 0);
+
+ if (g_param_spec_pool_lookup (registry->priv->system_keys,
+ key_name,
+ GRL_TYPE_MEDIA,
+ FALSE)) {
+ return (GrlKeyID) g_quark_try_string (key_name);
+ } else {
+ return 0;
+ }
+}
+
+/**
+ * grl_plugin_registry_lookup_metadata_key_name:
+ * @registry: the registry instance
+ * @key: a metadata key
+ *
+ * Returns @key name.
+ *
+ * Returns: metadata key name, or @NULL if not found
+ */
+const gchar *
+grl_plugin_registry_lookup_metadata_key_name (GrlPluginRegistry *registry,
+ GrlKeyID key)
+{
+ const gchar *key_name;
+ GParamSpec *key_pspec;
+
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), 0);
+
+ key_name = g_quark_to_string (key);
+ if (!key_name) {
+ return NULL;
+ }
+ key_pspec = g_param_spec_pool_lookup (registry->priv->system_keys,
+ key_name,
+ GRL_TYPE_MEDIA,
+ FALSE);
+ if (key_pspec) {
+ return g_param_spec_get_name (key_pspec);
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * grl_plugin_registry_lookup_metadata_key_desc:
+ * @registry: the registry instance
+ * @key: a metadata key
+ *
+ * Returns @key description.
+ *
+ * Returns: metadata key description, or @NULL if not found
+ */
+const gchar *
+grl_plugin_registry_lookup_metadata_key_desc (GrlPluginRegistry *registry,
+ GrlKeyID key)
+{
+ const gchar *key_name;
+ GParamSpec *key_pspec;
+
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), 0);
- return g_param_spec_pool_lookup (registry->priv->system_keys,
- key_name,
- GRL_TYPE_MEDIA,
- FALSE);
+ key_name = g_quark_to_string (key);
+ if (!key_name) {
+ return NULL;
+ }
+ key_pspec = g_param_spec_pool_lookup (registry->priv->system_keys,
+ key_name,
+ GRL_TYPE_MEDIA,
+ FALSE);
+ if (key_pspec) {
+ return g_param_spec_get_blurb (key_pspec);
+ } else {
+ return NULL;
+ }
+}
+
+/**
+ * grl_plugin_registry_lookup_metadata_key_type:
+ * @registry: the registry instance
+ * @key: a metadata key
+ *
+ * Returns @key expected value type.
+ *
+ * Returns: metadata key type, or @G_TYPE_INVALID if not found
+ */
+GType
+grl_plugin_registry_lookup_metadata_key_type (GrlPluginRegistry *registry,
+ GrlKeyID key)
+{
+ const gchar *key_name;
+ GParamSpec *key_pspec;
+
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), 0);
+
+ key_name = g_quark_to_string (key);
+ if (!key_name) {
+ return G_TYPE_INVALID;
+ }
+ key_pspec = g_param_spec_pool_lookup (registry->priv->system_keys,
+ key_name,
+ GRL_TYPE_MEDIA,
+ FALSE);
+ if (key_pspec) {
+ return G_PARAM_SPEC_VALUE_TYPE (key_pspec);
+ } else {
+ return G_TYPE_INVALID;
+ }
+}
+
+/**
+ * grl_plugin_registry_metadata_key_validate:
+ * @registry: the registry instance
+ * @key: a metadata key
+ * @value: value to be validate
+ *
+ * Validates @value content complies with the key specification. That is, it has
+ * the expected type, and value are within the range specified in key (for
+ * integer values).
+ *
+ * Returns: %TRUE if complies
+ **/
+gboolean
+grl_plugin_registry_metadata_key_validate (GrlPluginRegistry *registry,
+ GrlKeyID key,
+ GValue *value)
+{
+ const gchar *key_name;
+ GParamSpec *key_pspec;
+
+ g_return_val_if_fail (GRL_IS_PLUGIN_REGISTRY (registry), FALSE);
+ g_return_val_if_fail (G_IS_VALUE (value), FALSE);
+
+ key_name = g_quark_to_string (key);
+ if (!key_name) {
+ return FALSE;
+ }
+ key_pspec = g_param_spec_pool_lookup (registry->priv->system_keys,
+ key_name,
+ GRL_TYPE_MEDIA,
+ FALSE);
+ if (key_pspec) {
+ return g_param_value_validate (key_pspec, value);
+ } else {
+ return FALSE;
+ }
}
/**
@@ -1100,9 +1244,9 @@ grl_plugin_registry_lookup_metadata_key_relation (GrlPluginRegistry *registry,
*
* Returns a list with all registered keys in system.
*
- * Returns: (element-type GObject.ParamSpec) (transfer container): a #GList
- * with all the available #GrlKeyID<!-- -->s. The content of the list should
- * not be modified or freed. Use g_list_free() when done using the list.
+ * Returns: (transfer container): a #GList with all the available
+ * #GrlKeyID<!-- -->s. The content of the list should not be modified or freed.
+ * Use g_list_free() when done using the list.
*
* Since: 0.1.6
**/
@@ -1121,7 +1265,7 @@ grl_plugin_registry_get_metadata_keys (GrlPluginRegistry *registry)
&keys_length);
for (i = 0; i < keys_length; i++) {
- key_list = g_list_prepend (key_list, keys[i]);
+ key_list = g_list_prepend (key_list, GRLKEYID_TO_POINTER (keys[i]));
}
g_free (keys);
diff --git a/src/grl-plugin-registry.h b/src/grl-plugin-registry.h
index 3a957eb..2f5e641 100644
--- a/src/grl-plugin-registry.h
+++ b/src/grl-plugin-registry.h
@@ -257,6 +257,19 @@ GrlKeyID grl_plugin_registry_lookup_metadata_key (GrlPluginRegistry *registry,
const GList *grl_plugin_registry_lookup_metadata_key_relation (GrlPluginRegistry *registry,
GrlKeyID key);
+const gchar *grl_plugin_registry_lookup_metadata_key_name (GrlPluginRegistry *registry,
+ GrlKeyID key);
+
+const gchar *grl_plugin_registry_lookup_metadata_key_desc (GrlPluginRegistry *registry,
+ GrlKeyID key);
+
+GType grl_plugin_registry_lookup_metadata_key_type (GrlPluginRegistry *registry,
+ GrlKeyID key);
+
+gboolean grl_plugin_registry_metadata_key_validate (GrlPluginRegistry *registry,
+ GrlKeyID key,
+ GValue *value);
+
GList *grl_plugin_registry_get_metadata_keys (GrlPluginRegistry *registry);
gboolean grl_plugin_registry_add_config (GrlPluginRegistry *registry,
diff --git a/tools/grilo-inspect/grl-inspect.c b/tools/grilo-inspect/grl-inspect.c
index 967bc44..8be16bf 100644
--- a/tools/grilo-inspect/grl-inspect.c
+++ b/tools/grilo-inspect/grl-inspect.c
@@ -72,7 +72,8 @@ static void
print_keys (const GList *keys)
{
while (keys) {
- g_print ("%s", GRL_METADATA_KEY_GET_NAME (keys->data));
+ g_print ("%s",
+ GRL_METADATA_KEY_GET_NAME (GRLPOINTER_TO_KEYID (keys->data)));
keys = g_list_next (keys);
if (keys) {
g_print (", ");
diff --git a/tools/grilo-test-ui/main.c b/tools/grilo-test-ui/main.c
index 37ac2fd..77ea9b6 100644
--- a/tools/grilo-test-ui/main.c
+++ b/tools/grilo-test-ui/main.c
@@ -361,7 +361,7 @@ browse_keys (void)
keys = grl_metadata_key_list_new (GRL_METADATA_KEY_ID,
GRL_METADATA_KEY_TITLE,
GRL_METADATA_KEY_CHILDCOUNT,
- NULL);
+ GRL_METADATA_KEY_INVALID);
}
return keys;
@@ -526,6 +526,8 @@ metadata_cb (GrlMediaSource *source,
GList *keys, *i;
GtkTreeIter iter;
GrlPluginRegistry *registry;
+ GrlKeyID key;
+ const gchar *key_name;
/* Not interested if not the last media we
requested metadata for */
@@ -557,17 +559,19 @@ metadata_cb (GrlMediaSource *source,
keys = grl_data_get_keys (GRL_DATA (media));
i = keys;
while (i) {
- if (grl_data_has_key (GRL_DATA (media), i->data)) {
- const GValue *g_value = grl_data_get (GRL_DATA (media), i->data);
+ key = GRLPOINTER_TO_KEYID (i->data);
+ key_name = grl_metadata_key_get_name (key);
+ if (grl_data_has_key (GRL_DATA (media), key)) {
+ const GValue *g_value = grl_data_get (GRL_DATA (media), key);
gchar *value = g_value ? g_strdup_value_contents (g_value) : "";
gtk_list_store_append (GTK_LIST_STORE (view->metadata_model), &iter);
gtk_list_store_set (GTK_LIST_STORE (view->metadata_model),
&iter,
METADATA_MODEL_NAME,
- GRL_METADATA_KEY_GET_NAME (i->data),
+ key_name,
METADATA_MODEL_VALUE, value,
-1);
- GRL_DEBUG (" %s: %s", GRL_METADATA_KEY_GET_NAME (i->data), value);
+ GRL_DEBUG (" %s: %s", key_name, value);
}
i = g_list_next (i);
}
--
1.7.1
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]