[grilo] core: merge key and relation functions



commit a9a7101b805082987e222a97fe1edada61038517
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date:   Tue Dec 15 17:34:51 2015 +0100

    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

 bindings/vala/grilo-0.3.vapi |    5 +-
 src/grl-metadata-key.c       |  151 +++++++++++++++++++++++-------------------
 src/grl-registry-priv.h      |    1 +
 src/grl-registry.c           |   96 ++++++++++----------------
 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);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]