diff options
author | Juan A. Suarez Romero <jasuarez@igalia.com> | 2013-03-23 23:00:48 +0000 |
---|---|---|
committer | Juan A. Suarez Romero <jasuarez@igalia.com> | 2013-03-23 23:02:16 +0000 |
commit | d21a34b195dcb531af780a4ad83358259d3d9367 (patch) | |
tree | abe5591010f900698376f8ca90fecaa12977afa4 | |
parent | 4293c5f1a0faef96c2a7b690cf6e471838fe3d1a (diff) |
Tracker: Handle date-format keys
-rw-r--r-- | src/tracker/grl-tracker-source-api.c | 72 |
1 files changed, 40 insertions, 32 deletions
diff --git a/src/tracker/grl-tracker-source-api.c b/src/tracker/grl-tracker-source-api.c index c00d52b..8adea4c 100644 --- a/src/tracker/grl-tracker-source-api.c +++ b/src/tracker/grl-tracker-source-api.c @@ -182,13 +182,23 @@ fill_grilo_media_from_sparql (GrlTrackerSource *source, const gchar *str_val; } val; - if (assoc == NULL) - return; + GrlKeyID grl_key; + + if (assoc == NULL) { + /* Maybe the user is setting the key */ + GrlRegistry *registry = grl_registry_get_default (); + grl_key = grl_registry_lookup_metadata_key (registry, sparql_key); + if (grl_key == GRL_METADATA_KEY_INVALID) { + return; + } + } else { + grl_key = assoc->grl_key; + } GRL_ODEBUG ("\tSetting media prop (col=%i/var=%s/prop=%s) %s", column, sparql_key, - GRL_METADATA_KEY_GET_NAME (assoc->grl_key), + GRL_METADATA_KEY_GET_NAME (grl_key), tracker_sparql_cursor_get_string (cursor, column, NULL)); if (tracker_sparql_cursor_is_bound (cursor, column) == FALSE) { @@ -196,41 +206,39 @@ fill_grilo_media_from_sparql (GrlTrackerSource *source, return; } - if (grl_data_has_key (GRL_DATA (media), assoc->grl_key)) { + if (grl_data_has_key (GRL_DATA (media), grl_key)) { GRL_ODEBUG ("\t\tDropping, already here"); return; } - if (assoc->set_value) { + if (assoc && assoc->set_value) { assoc->set_value (cursor, column, media, assoc->grl_key); } else { - switch (GRL_METADATA_KEY_GET_TYPE (assoc->grl_key)) { - case G_TYPE_STRING: - /* Cache the source associated to this result. */ - if (assoc->grl_key == GRL_METADATA_KEY_ID) { - grl_tracker_source_cache_add_item (grl_tracker_item_cache, - tracker_sparql_cursor_get_integer (cursor, - column), - source); - } - val.str_val = tracker_sparql_cursor_get_string (cursor, column, NULL); - if (val.str_val != NULL) - grl_data_set_string (GRL_DATA (media), assoc->grl_key, val.str_val); - break; - - case G_TYPE_INT: - val.int_val = tracker_sparql_cursor_get_integer (cursor, column); - grl_data_set_int (GRL_DATA (media), assoc->grl_key, val.int_val); - break; - - case G_TYPE_FLOAT: - val.double_val = tracker_sparql_cursor_get_double (cursor, column); - grl_data_set_float (GRL_DATA (media), assoc->grl_key, (gfloat) val.double_val); - break; - - default: - GRL_ODEBUG ("\t\tUnexpected data type"); - break; + GType grl_type = GRL_METADATA_KEY_GET_TYPE (grl_key); + if (grl_type == G_TYPE_STRING) { + /* Cache the source associated to this result. */ + if (grl_key == GRL_METADATA_KEY_ID) { + grl_tracker_source_cache_add_item (grl_tracker_item_cache, + tracker_sparql_cursor_get_integer (cursor, + column), + source); + } + val.str_val = tracker_sparql_cursor_get_string (cursor, column, NULL); + if (val.str_val != NULL) + grl_data_set_string (GRL_DATA (media), grl_key, val.str_val); + } else if (grl_type == G_TYPE_INT) { + val.int_val = tracker_sparql_cursor_get_integer (cursor, column); + grl_data_set_int (GRL_DATA (media), grl_key, val.int_val); + } else if (grl_type == G_TYPE_FLOAT) { + val.double_val = tracker_sparql_cursor_get_double (cursor, column); + grl_data_set_float (GRL_DATA (media), grl_key, (gfloat) val.double_val); + } else if (grl_type == G_TYPE_DATE_TIME) { + val.str_val = tracker_sparql_cursor_get_string (cursor, column, NULL); + GDateTime *date_time = grl_date_time_from_iso8601 (val.str_val); + grl_data_set_boxed (GRL_DATA (media), grl_key, date_time); + g_date_time_unref (date_time); + } else { + GRL_ODEBUG ("\t\tUnexpected data type"); } } } |