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;
}
Beispiel #2
0
/**
 * 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);
}
Beispiel #3
0
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;
}