[grilo-plugins] lua-factory: better organize grl.get_media_keys()
- From: Victor Toso de Carvalho <victortoso src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins] lua-factory: better organize grl.get_media_keys()
- Date: Mon, 12 Oct 2015 07:19:40 +0000 (UTC)
commit 0530a37bfb60af4647514250f374f2efc4b53589
Author: Victor Toso <me victortoso com>
Date: Sat Oct 10 12:48:54 2015 +0200
lua-factory: better organize grl.get_media_keys()
The logic around pushing the keys and its values are about to get a
little bit more complex. This commit is to prepare the code for it.
https://bugzilla.gnome.org/show_bug.cgi?id=755447
src/lua-factory/grl-lua-library.c | 90 +++++++++++++++++++++---------------
1 files changed, 52 insertions(+), 38 deletions(-)
---
diff --git a/src/lua-factory/grl-lua-library.c b/src/lua-factory/grl-lua-library.c
index e3a6a4b..014bb9e 100644
--- a/src/lua-factory/grl-lua-library.c
+++ b/src/lua-factory/grl-lua-library.c
@@ -901,6 +901,50 @@ grl_l_operation_get_keys (lua_State *L)
return 1;
}
+static gboolean
+push_grl_media_key (lua_State *L,
+ GrlMedia *media,
+ GrlKeyID key_id)
+{
+ GrlRegistry *registry;
+ GType type;
+ const gchar *key_name;
+
+ registry = grl_registry_get_default ();
+ type = grl_registry_lookup_metadata_key_type (registry, key_id);
+ key_name = grl_registry_lookup_metadata_key_name (registry, key_id);
+
+ switch (type) {
+ case G_TYPE_INT:
+ lua_pushinteger (L, grl_data_get_int (GRL_DATA (media), key_id));
+ break;
+ case G_TYPE_FLOAT:
+ lua_pushnumber (L, grl_data_get_float (GRL_DATA (media), key_id));
+ break;
+ case G_TYPE_STRING:
+ lua_pushstring (L, grl_data_get_string (GRL_DATA (media), key_id));
+ break;
+ case G_TYPE_INT64:
+ lua_pushinteger (L, grl_data_get_int64 (GRL_DATA (media), key_id));
+ break;
+ case G_TYPE_BOOLEAN:
+ lua_pushboolean (L, grl_data_get_boolean (GRL_DATA (media), key_id));
+ break;
+ default:
+ if (type == G_TYPE_DATE_TIME) {
+ GDateTime *date = grl_data_get_boxed (GRL_DATA (media), key_id);
+ gchar *date_str = g_date_time_format (date, "%F %T");
+ lua_pushstring (L, date_str);
+ g_free(date_str);
+ } else {
+ GRL_DEBUG ("Key %s has unhandled G_TYPE. Lua source will miss this data",
+ key_name);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
/**
* grl.get_media_keys
*
@@ -920,58 +964,28 @@ grl_l_media_get_keys (lua_State *L)
registry = grl_registry_get_default ();
lua_newtable (L);
list_keys = grl_data_get_keys (GRL_DATA (os->media));
- for (it = list_keys; it; it = g_list_next (it)) {
+ for (it = list_keys; it != NULL; it = it->next) {
GrlKeyID key_id;
gchar *key_name;
gchar *ptr = NULL;
- GType type = G_TYPE_NONE;
key_id = GRLPOINTER_TO_KEYID (it->data);
+ if (key_id == GRL_METADATA_KEY_INVALID)
+ continue;
+
key_name = g_strdup (grl_registry_lookup_metadata_key_name (registry,
key_id));
- key_id = grl_registry_lookup_metadata_key (registry, key_name);
-
/* Replace '-' to '_': as a convenience for the developer */
while ((ptr = strstr (key_name, "-")) != NULL) {
*ptr = '_';
}
lua_pushstring (L, key_name);
- if (key_id != GRL_METADATA_KEY_INVALID) {
- type = grl_registry_lookup_metadata_key_type (registry, key_id);
- switch (type) {
- case G_TYPE_INT:
- lua_pushinteger (L, grl_data_get_int (GRL_DATA (os->media), key_id));
- break;
- case G_TYPE_FLOAT:
- lua_pushnumber (L, grl_data_get_float (GRL_DATA (os->media), key_id));
- break;
- case G_TYPE_STRING:
- lua_pushstring (L, grl_data_get_string (GRL_DATA (os->media), key_id));
- break;
- case G_TYPE_INT64:
- lua_pushinteger (L, grl_data_get_int64 (GRL_DATA (os->media), key_id));
- break;
- case G_TYPE_BOOLEAN:
- lua_pushboolean (L, grl_data_get_boolean (GRL_DATA (os->media), key_id));
- break;
- default:
- if (type == G_TYPE_DATE_TIME) {
- GDateTime *date = grl_data_get_boxed (GRL_DATA (os->media), key_id);
- gchar *date_str = g_date_time_format (date, "%F %T");
- lua_pushstring (L, date_str);
- g_free(date_str);
-
- } else {
- GRL_DEBUG ("'%s' is being ignored as G_TYPE is not being handled.",
- key_name);
- g_free (key_name);
- lua_pop (L, 1);
- continue;
- }
- }
+ if (push_grl_media_key (L, os->media, key_id))
lua_settable (L, -3);
- }
+ else
+ lua_pop (L, 1);
+
g_free (key_name);
}
g_list_free (list_keys);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]