summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan A. Suarez Romero <jasuarez@igalia.com>2015-12-15 17:34:51 +0100
committerJuan A. Suarez Romero <jasuarez@igalia.com>2015-12-16 13:52:54 +0100
commita9a7101b805082987e222a97fe1edada61038517 (patch)
tree3c106d77288c6c8252a63f59e729d155fdbb1f2e
parentefd52bb9bda14863fdd475d63ef56ea4a66d3037 (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.vapi5
-rw-r--r--src/grl-metadata-key.c151
-rw-r--r--src/grl-registry-priv.h1
-rw-r--r--src/grl-registry.c96
-rw-r--r--src/grl-registry.h5
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);