diff options
author | Juan A. Suarez Romero <jasuarez@igalia.com> | 2015-12-15 17:34:51 +0100 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2015-12-16 13:52:54 +0100 |
commit | a9a7101b805082987e222a97fe1edada61038517 (patch) | |
tree | 3c106d77288c6c8252a63f59e729d155fdbb1f2e | |
parent | efd52bb9bda14863fdd475d63ef56ea4a66d3037 (diff) |
core: merge key and relation functions
Merge register_relation function into register_key, so when creating a new key
make explicitly if the key is related with other.
https://bugzilla.gnome.org/show_bug.cgi?id=755551
-rw-r--r-- | bindings/vala/grilo-0.3.vapi | 5 | ||||
-rw-r--r-- | src/grl-metadata-key.c | 151 | ||||
-rw-r--r-- | src/grl-registry-priv.h | 1 | ||||
-rw-r--r-- | src/grl-registry.c | 96 | ||||
-rw-r--r-- | src/grl-registry.h | 5 |
5 files changed, 124 insertions, 134 deletions
diff --git a/bindings/vala/grilo-0.3.vapi b/bindings/vala/grilo-0.3.vapi index 16a93bf..57f5485 100644 --- a/bindings/vala/grilo-0.3.vapi +++ b/bindings/vala/grilo-0.3.vapi @@ -370,9 +370,8 @@ namespace Grl { public unowned Grl.Plugin lookup_plugin (string plugin_id); public unowned Grl.Source lookup_source (string source_id); public bool metadata_key_validate (Grl.KeyID key, GLib.Value value); - public Grl.KeyID register_metadata_key (owned GLib.ParamSpec param_spec) throws GLib.Error; - public void register_metadata_key_relation (Grl.KeyID key1, Grl.KeyID key2); - public Grl.KeyID register_metadata_key_system (GLib.ParamSpec param_spec, Grl.KeyID key) throws GLib.Error; + public Grl.KeyID register_metadata_key (owned GLib.ParamSpec param_spec, Grl.KeyID bind_key) throws GLib.Error; + public Grl.KeyID register_metadata_key_system (GLib.ParamSpec param_spec, Grl.KeyID key, Grl.KeyID bind_key) throws GLib.Error; public bool register_source (Grl.Plugin plugin, owned Grl.Source source) throws GLib.Error; public void restrict_plugins (string plugins); public void shutdown (); diff --git a/src/grl-metadata-key.c b/src/grl-metadata-key.c index e70cf49..b49ef09 100644 --- a/src/grl-metadata-key.c +++ b/src/grl-metadata-key.c @@ -44,6 +44,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ALBUM, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -53,6 +54,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ARTIST, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -62,15 +64,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_AUTHOR, - NULL); - - grl_registry_register_metadata_key_system (registry, - g_param_spec_boxed ("publication-date", - "Publication date", - "When the media was originally published", - G_TYPE_DATE_TIME, - G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), - GRL_METADATA_KEY_PUBLICATION_DATE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -80,6 +74,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_DESCRIPTION, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -89,6 +84,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_GENRE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -98,6 +94,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ID, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -107,6 +104,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) G_TYPE_DATE_TIME, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_LAST_PLAYED, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -116,15 +114,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_LYRICS, - NULL); - - grl_registry_register_metadata_key_system (registry, - g_param_spec_string ("mime-type", - "MimeType", - "Media mime type", - NULL, - G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), - GRL_METADATA_KEY_MIME, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -134,6 +124,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_SITE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -143,6 +134,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_SOURCE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -152,6 +144,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_THUMBNAIL, + GRL_METADATA_KEY_INVALID, NULL); @@ -162,7 +155,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) G_TYPE_BYTE_ARRAY, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_THUMBNAIL_BINARY, - + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -172,6 +165,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_TITLE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -181,8 +175,18 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_URL, + GRL_METADATA_KEY_INVALID, NULL); + grl_registry_register_metadata_key_system (registry, + g_param_spec_string ("mime-type", + "MimeType", + "Media mime type", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), + GRL_METADATA_KEY_MIME, + GRL_METADATA_KEY_URL, + NULL); grl_registry_register_metadata_key_system (registry, g_param_spec_string ("external-url", @@ -191,6 +195,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_EXTERNAL_URL, + GRL_METADATA_KEY_INVALID, NULL); @@ -201,6 +206,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_EXTERNAL_PLAYER, + GRL_METADATA_KEY_INVALID, NULL); @@ -211,19 +217,9 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_STUDIO, + GRL_METADATA_KEY_INVALID, NULL); - - grl_registry_register_metadata_key_system (registry, - g_param_spec_string ("certificate", - "Certificate", - "Age certificate of the media", - NULL, - G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), - GRL_METADATA_KEY_CERTIFICATE, - NULL); - - grl_registry_register_metadata_key_system (registry, g_param_spec_string ("license", "License", @@ -231,6 +227,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_LICENSE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -241,6 +238,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_BITRATE, + GRL_METADATA_KEY_URL, NULL); grl_registry_register_metadata_key_system (registry, @@ -251,6 +249,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) GRL_METADATA_KEY_CHILDCOUNT_UNKNOWN, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_CHILDCOUNT, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -261,6 +260,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_DURATION, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -271,6 +271,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_HEIGHT, + GRL_METADATA_KEY_URL, NULL); grl_registry_register_metadata_key_system (registry, @@ -281,6 +282,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_LAST_POSITION, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -291,6 +293,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_PLAY_COUNT, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -301,6 +304,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_WIDTH, + GRL_METADATA_KEY_URL, NULL); @@ -312,6 +316,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_FRAMERATE, + GRL_METADATA_KEY_URL, NULL); grl_registry_register_metadata_key_system (registry, @@ -322,6 +327,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_RATING, + GRL_METADATA_KEY_INVALID, NULL); @@ -333,6 +339,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_SEASON, + GRL_METADATA_KEY_INVALID, NULL); @@ -344,6 +351,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_EPISODE, + GRL_METADATA_KEY_INVALID, NULL); @@ -354,6 +362,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_EPISODE_TITLE, + GRL_METADATA_KEY_INVALID, NULL); @@ -364,6 +373,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_SHOW, + GRL_METADATA_KEY_INVALID, NULL); @@ -374,6 +384,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) G_TYPE_DATE_TIME, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_CREATION_DATE, + GRL_METADATA_KEY_INVALID, NULL); @@ -384,6 +395,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_CAMERA_MODEL, + GRL_METADATA_KEY_INVALID, NULL); @@ -395,6 +407,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ORIENTATION, + GRL_METADATA_KEY_INVALID, NULL); @@ -405,6 +418,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_FLASH_USED, + GRL_METADATA_KEY_INVALID, NULL); @@ -416,6 +430,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_EXPOSURE_TIME, + GRL_METADATA_KEY_INVALID, NULL); @@ -427,6 +442,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ISO_SPEED, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -437,6 +453,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 1, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_TRACK_NUMBER, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -446,6 +463,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) G_TYPE_DATE_TIME, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_MODIFICATION_DATE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -456,6 +474,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) 0.0, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_START_TIME, + GRL_METADATA_KEY_URL, NULL); grl_registry_register_metadata_key_system (registry, @@ -465,6 +484,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_FAVOURITE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -474,8 +494,29 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_REGION, + GRL_METADATA_KEY_INVALID, NULL); + grl_registry_register_metadata_key_system (registry, + g_param_spec_boxed ("publication-date", + "Publication date", + "When the media was originally published", + G_TYPE_DATE_TIME, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), + GRL_METADATA_KEY_PUBLICATION_DATE, + GRL_METADATA_KEY_REGION, + NULL); + + grl_registry_register_metadata_key_system (registry, + g_param_spec_string ("certificate", + "Certificate", + "Age certificate of the media", + NULL, + G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), + GRL_METADATA_KEY_CERTIFICATE, + GRL_METADATA_KEY_REGION, + NULL); + grl_registry_register_metadata_key_system (registry, g_param_spec_string ("keyword", "keyword", @@ -483,6 +524,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_KEYWORD, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -492,6 +534,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_PERFORMER, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -501,6 +544,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_PRODUCER, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -510,6 +554,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_DIRECTOR, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -519,6 +564,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_ORIGINAL_TITLE, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -529,6 +575,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) -1, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_SIZE, + GRL_METADATA_KEY_URL, NULL); grl_registry_register_metadata_key_system (registry, @@ -538,6 +585,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) FALSE, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_TITLE_FROM_FILENAME, + GRL_METADATA_KEY_TITLE, NULL); grl_registry_register_metadata_key_system (registry, @@ -547,6 +595,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_MB_ALBUM_ID, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -556,6 +605,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_MB_TRACK_ID, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -565,6 +615,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_MB_ARTIST_ID, + GRL_METADATA_KEY_ARTIST, NULL); grl_registry_register_metadata_key_system (registry, @@ -574,6 +625,7 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) NULL, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_MB_RECORDING_ID, + GRL_METADATA_KEY_INVALID, NULL); grl_registry_register_metadata_key_system (registry, @@ -584,45 +636,8 @@ grl_metadata_key_setup_system_keys (GrlRegistry *registry) -1, G_PARAM_STATIC_STRINGS | G_PARAM_READWRITE), GRL_METADATA_KEY_AUDIO_TRACK, + GRL_METADATA_KEY_URL, NULL); - - /* Create the relations */ - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_TITLE, - GRL_METADATA_KEY_TITLE_FROM_FILENAME); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_ARTIST, - GRL_METADATA_KEY_MB_ARTIST_ID); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_AUDIO_TRACK); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_MIME); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_BITRATE); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_FRAMERATE); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_HEIGHT); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_WIDTH); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_START_TIME); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_URL, - GRL_METADATA_KEY_SIZE); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_REGION, - GRL_METADATA_KEY_PUBLICATION_DATE); - grl_registry_register_metadata_key_relation (registry, - GRL_METADATA_KEY_REGION, - GRL_METADATA_KEY_CERTIFICATE); } /** diff --git a/src/grl-registry-priv.h b/src/grl-registry-priv.h index 378ecbd..b86a37c 100644 --- a/src/grl-registry-priv.h +++ b/src/grl-registry-priv.h @@ -32,6 +32,7 @@ grl_registry_restrict_plugins (GrlRegistry *registry, GrlKeyID grl_registry_register_metadata_key_system (GrlRegistry *registry, GParamSpec *param_spec, GrlKeyID key, + GrlKeyID bind_key, GError **error); void grl_registry_shutdown (GrlRegistry *registry); diff --git a/src/grl-registry.c b/src/grl-registry.c index 910dbd6..88bb11f 100644 --- a/src/grl-registry.c +++ b/src/grl-registry.c @@ -501,8 +501,11 @@ static GrlKeyID grl_registry_register_metadata_key_full (GrlRegistry *registry, GParamSpec *param_spec, GrlKeyID key, + GrlKeyID bind_key, GError **error) { + GList *bound_partners; + GList *partner; const gchar *key_name; g_return_val_if_fail (GRL_IS_REGISTRY (registry), 0); @@ -547,11 +550,24 @@ grl_registry_register_metadata_key_full (GrlRegistry *registry, (gpointer) key_name, param_spec); - /* Each key is related to itself */ - g_hash_table_insert (registry->priv->related_keys, - GRLKEYID_TO_POINTER (registered_key), - g_list_prepend (NULL, - GRLKEYID_TO_POINTER (registered_key))); + if (bind_key == GRL_METADATA_KEY_INVALID) { + /* Key is only related to itself */ + g_hash_table_insert (registry->priv->related_keys, + GRLKEYID_TO_POINTER (registered_key), + g_list_prepend (NULL, + GRLKEYID_TO_POINTER (registered_key))); + } else { + /* Add the new key to the partners */ + bound_partners = g_hash_table_lookup (registry->priv->related_keys, GRLKEYID_TO_POINTER (bind_key)); + bound_partners = g_list_append (bound_partners, GRLKEYID_TO_POINTER (registered_key)); + for (partner = bound_partners; + partner; + partner = g_list_next (partner)) { + g_hash_table_insert (registry->priv->related_keys, + partner->data, + bound_partners); + } + } return registered_key; } @@ -1598,10 +1614,21 @@ grl_registry_unload_plugin (GrlRegistry *registry, * grl_registry_register_metadata_key: * @registry: The plugin registry * @param_spec: (transfer full): The definition of the key to register + * @bind_key: The key the new key is bind to, or #GRL_METADATA_KEY_INVALID if it is not bound. * @error: error return location or @NULL to ignore * - * Registers a metadata key + * Registers a new metadata key, creating a relation between the new key and + * @bind_key. + * + * Two keys are related when the values of both keys are somehow related. + * + * One example of a relation would be the one between the URI of a media + * resource and its mime-type: they are both tied together and one does not make + * sense without the other. * + * Relations between keys allow the framework to provide all the data that is + * somehow related when any of the related keys are requested. + * Returns: The #GrlKeyID registered. * * Since: 0.2.0 @@ -1609,6 +1636,7 @@ grl_registry_unload_plugin (GrlRegistry *registry, GrlKeyID grl_registry_register_metadata_key (GrlRegistry *registry, GParamSpec *param_spec, + GrlKeyID bind_key, GError **error) { GrlKeyID key; @@ -1616,6 +1644,7 @@ grl_registry_register_metadata_key (GrlRegistry *registry, key = grl_registry_register_metadata_key_full (registry, param_spec, GRL_METADATA_KEY_INVALID, + bind_key, error); if (key != GRL_METADATA_KEY_INVALID) { @@ -1640,6 +1669,7 @@ GrlKeyID grl_registry_register_metadata_key_system (GrlRegistry *registry, GParamSpec *param_spec, GrlKeyID key, + GrlKeyID bind_key, GError **error) { GrlKeyID registered_key; @@ -1647,65 +1677,13 @@ grl_registry_register_metadata_key_system (GrlRegistry *registry, registered_key = grl_registry_register_metadata_key_full (registry, param_spec, key, + bind_key, error); return registered_key; } /** - * grl_registry_register_metadata_key_relation: - * @registry: the plugin registry - * @key1: key involved in relationship - * @key2: key involved in relationship - * - * Creates a relation between @key1 and @key2, meaning that the values of both - * keys are somehow related. - * - * One example of a relation would be the one between the URI of a media - * resource and its mime-type: they are both tied together and one does not make - * sense without the other. - * - * Relations between keys allow the framework to provide all the data that is - * somehow related when any of the related keys are requested. - * - * Since: 0.2.0 - */ -void -grl_registry_register_metadata_key_relation (GrlRegistry *registry, - GrlKeyID key1, - GrlKeyID key2) -{ - GList *key1_partners, *key1_peer; - GList *key2_partners; - - g_return_if_fail (GRL_IS_REGISTRY (registry)); - g_return_if_fail (key1); - g_return_if_fail (key2); - - if (key1 == key2) { - return; - } - - /* Search for keys related with each key */ - key1_partners = g_hash_table_lookup (registry->priv->related_keys, GRLKEYID_TO_POINTER (key1)); - key2_partners = g_hash_table_lookup (registry->priv->related_keys, GRLKEYID_TO_POINTER (key2)); - - /* Check if they are already related */ - if (!key1_partners || !key2_partners || key1_partners == key2_partners) { - return; - } - - /* Merge both relations [related(key1), related(key2)] */ - key1_partners = g_list_concat(key1_partners, key2_partners); - - for (key1_peer = key1_partners; - key1_peer; - key1_peer = g_list_next (key1_peer)) { - g_hash_table_insert (registry->priv->related_keys, key1_peer->data, key1_partners); - } -} - -/** * grl_registry_lookup_metadata_key: * @registry: the registry instance * @key_name: the key name diff --git a/src/grl-registry.h b/src/grl-registry.h index bb5fd8f..2de5200 100644 --- a/src/grl-registry.h +++ b/src/grl-registry.h @@ -291,12 +291,9 @@ GList *grl_registry_get_plugins (GrlRegistry *registry, GrlKeyID grl_registry_register_metadata_key (GrlRegistry *registry, GParamSpec *param_spec, + GrlKeyID bind_key, GError **error); -void grl_registry_register_metadata_key_relation (GrlRegistry *registry, - GrlKeyID key1, - GrlKeyID key2); - GrlKeyID grl_registry_lookup_metadata_key (GrlRegistry *registry, const gchar *key_name); |