static tracker_grl_sparql_t * insert_key_mapping (GrlKeyID grl_key, const gchar *sparql_key_attr, const gchar *sparql_key_attr_call, const gchar *sparql_key_flavor) { tracker_grl_sparql_t *assoc = g_new0 (tracker_grl_sparql_t, 1); GList *assoc_list = g_hash_table_lookup (grl_to_sparql_mapping, GRLKEYID_TO_POINTER (grl_key)); gchar *canon_name = g_strdup (GRL_METADATA_KEY_GET_NAME (grl_key)); assoc->grl_key = grl_key; assoc->sparql_key_name = build_flavored_key (canon_name, sparql_key_flavor); assoc->sparql_key_attr = sparql_key_attr; assoc->sparql_key_attr_call = sparql_key_attr_call; assoc->sparql_key_flavor = sparql_key_flavor; assoc_list = g_list_append (assoc_list, assoc); g_hash_table_insert (grl_to_sparql_mapping, GRLKEYID_TO_POINTER (grl_key), assoc_list); g_hash_table_insert (sparql_to_grl_mapping, (gpointer) assoc->sparql_key_name, assoc); g_hash_table_insert (sparql_to_grl_mapping, (gpointer) GRL_METADATA_KEY_GET_NAME (grl_key), assoc); g_free (canon_name); return assoc; }
/** * grl_related_keys_set: * @relkeys: set of related keys to modify * @key: (type GrlKeyID): key to change or add * @value: the new value * * Sets the value associated with @key into @relkeys. Old value is freed and * the new one is set. * * Also, checks that @value is compliant with @key specification, modifying it * accordingly. For instance, if @key requires a number between 0 and 10, but * value is outside this range, it will be adapted accordingly. * * Since: 0.1.10 **/ void grl_related_keys_set (GrlRelatedKeys *relkeys, GrlKeyID key, const GValue *value) { GValue *copy = NULL; GrlRegistry *registry; g_return_if_fail (GRL_IS_RELATED_KEYS (relkeys)); g_return_if_fail (key); if (!value) { return; } /* Dup value */ if (G_VALUE_TYPE (value) != GRL_METADATA_KEY_GET_TYPE (key)) { GRL_WARNING ("value has type %s, but expected %s", g_type_name (G_VALUE_TYPE (value)), g_type_name (GRL_METADATA_KEY_GET_TYPE (key))); return; } copy = g_new0 (GValue, 1); g_value_init (copy, G_VALUE_TYPE (value)); g_value_copy (value, copy); registry = grl_registry_get_default (); if (!grl_registry_metadata_key_validate (registry, key, copy)) { GRL_WARNING ("'%s' value invalid, adjusting", GRL_METADATA_KEY_GET_NAME (key)); } g_hash_table_insert (relkeys->priv->data, GRLKEYID_TO_POINTER (key), copy); }
static tracker_grl_sparql_t * insert_key_mapping (GrlKeyID grl_key, const gchar *sparql_key_attr, const gchar *sparql_key_attr_call, const gchar *sparql_key_flavor) { tracker_grl_sparql_t *assoc = g_new0 (tracker_grl_sparql_t, 1); GList *assoc_list = g_hash_table_lookup (grl_to_sparql_mapping, GRLKEYID_TO_POINTER (grl_key)); gchar *canon_name = g_strdup (GRL_METADATA_KEY_GET_NAME (grl_key)); assoc->grl_key = grl_key; assoc->sparql_key_name = build_flavored_key (canon_name, sparql_key_flavor); assoc->sparql_key_name_canon = g_strdup (canon_name); assoc->sparql_key_attr = sparql_key_attr; assoc->sparql_key_attr_call = sparql_key_attr_call; assoc->sparql_key_flavor = sparql_key_flavor; assoc_list = g_list_append (assoc_list, assoc); g_hash_table_insert (grl_to_sparql_mapping, GRLKEYID_TO_POINTER (grl_key), assoc_list); g_hash_table_insert (sparql_to_grl_mapping, (gpointer) assoc->sparql_key_name, assoc); g_hash_table_insert (sparql_to_grl_mapping, (gpointer) GRL_METADATA_KEY_GET_NAME (grl_key), assoc); /* Grilo maps key names to SPARQL variables. Key names can contain dashes, * however SPARQL does not allow dashes in variable names. So use the to * underscores converted canon_name as additional mapping. */ if (g_strrstr (assoc->sparql_key_name_canon, "_")) { g_hash_table_insert (sparql_to_grl_mapping, (gpointer) assoc->sparql_key_name_canon, assoc); } g_free (canon_name); return assoc; }