diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2020-05-25 12:44:30 +0200 |
---|---|---|
committer | Jean Felder <jean.felder@gmail.com> | 2020-08-21 15:05:10 +0000 |
commit | 8d2e2567355d19c2c13162bfe10376d21de95bae (patch) | |
tree | ff9b449697bf090fd589d4daf4b3a9ce2dd0176c | |
parent | f8e14b922b31d66c28e95715ebaa11669b5bdc28 (diff) | |
download | grilo-plugins-8d2e2567355d19c2c13162bfe10376d21de95bae.tar.gz |
tracker3: Simplify rdf:type to GrlTypeFilter conversion
Do things straight from the query, so we get a proper media type
for the given row.
-rw-r--r-- | src/tracker3/grl-tracker-source-api.c | 20 | ||||
-rw-r--r-- | src/tracker3/grl-tracker-source-notif.c | 3 | ||||
-rw-r--r-- | src/tracker3/grl-tracker-source-statements.c | 11 | ||||
-rw-r--r-- | src/tracker3/grl-tracker-utils.c | 63 | ||||
-rw-r--r-- | src/tracker3/grl-tracker-utils.h | 19 |
5 files changed, 22 insertions, 94 deletions
diff --git a/src/tracker3/grl-tracker-source-api.c b/src/tracker3/grl-tracker-source-api.c index ad1e964..f24ec29 100644 --- a/src/tracker3/grl-tracker-source-api.c +++ b/src/tracker3/grl-tracker-source-api.c @@ -220,8 +220,7 @@ grl_tracker_op_free (GrlTrackerOp *os) GrlTrackerOp *os) \ { \ TrackerSparqlCursor *cursor = TRACKER_SPARQL_CURSOR (source_object);\ - gint col; \ - const gchar *sparql_type; \ + gint col, type; \ GError *tracker_error = NULL, *error = NULL; \ GrlMedia *media; \ spec_type *spec = \ @@ -263,14 +262,12 @@ grl_tracker_op_free (GrlTrackerOp *os) return; \ } \ \ - sparql_type = tracker_sparql_cursor_get_string (cursor, \ - 0, \ - NULL); \ + type = tracker_sparql_cursor_get_integer (cursor, 0); \ \ - GRL_ODEBUG ("\tParsing line of type %s", \ - sparql_type); \ + GRL_ODEBUG ("\tParsing line of type %x", \ + type); \ \ - media = grl_tracker_build_grilo_media (sparql_type, os->type_filter);\ + media = grl_tracker_build_grilo_media ((GrlMediaType ) type); \ \ if (media != NULL) { \ for (col = 1 ; \ @@ -403,8 +400,7 @@ tracker_media_from_uri_cb (GObject *source_object, GError *tracker_error = NULL, *error = NULL; GrlMedia *media; TrackerSparqlCursor *cursor; - const gchar *sparql_type; - gint col; + gint col, type; GRL_ODEBUG ("%s", __FUNCTION__); @@ -431,8 +427,8 @@ tracker_media_from_uri_cb (GObject *source_object, if (tracker_sparql_cursor_next (cursor, NULL, NULL)) { /* Build grilo media */ - sparql_type = tracker_sparql_cursor_get_string (cursor, 0, NULL); - media = grl_tracker_build_grilo_media (sparql_type, GRL_TYPE_FILTER_NONE); + type = tracker_sparql_cursor_get_integer (cursor, 0); + media = grl_tracker_build_grilo_media ((GrlMediaType) type); /* Translate Sparql result into Grilo result */ for (col = 0 ; col < tracker_sparql_cursor_get_n_columns (cursor) ; col++) { diff --git a/src/tracker3/grl-tracker-source-notif.c b/src/tracker3/grl-tracker-source-notif.c index c3d7e96..d77fb41 100644 --- a/src/tracker3/grl-tracker-source-notif.c +++ b/src/tracker3/grl-tracker-source-notif.c @@ -64,8 +64,7 @@ media_for_event (GrlTrackerSourceNotify *self, id_str = g_strdup_printf ("%" G_GINT64_FORMAT, tracker_notifier_event_get_id (event)); // FIXME - media = grl_tracker_build_grilo_media (NULL,//tracker_notifier_event_get_type (event), - GRL_TYPE_FILTER_NONE); + media = grl_tracker_build_grilo_media (GRL_MEDIA_TYPE_UNKNOWN); grl_media_set_id (media, id_str); grl_media_set_url (media, tracker_notifier_event_get_urn (event)); diff --git a/src/tracker3/grl-tracker-source-statements.c b/src/tracker3/grl-tracker-source-statements.c index 83cacb2..d85d71b 100644 --- a/src/tracker3/grl-tracker-source-statements.c +++ b/src/tracker3/grl-tracker-source-statements.c @@ -216,7 +216,7 @@ create_query_string (GrlTrackerQueryType type, else filter = GRL_TYPE_FILTER_ALL; - str = g_string_new ("SELECT ?resourceType ?urn "); + str = g_string_new ("SELECT ?mediaType ?urn "); append_query_variables (str, keys, filter); g_string_append (str, "WHERE { "); @@ -231,7 +231,8 @@ create_query_string (GrlTrackerQueryType type, g_string_append (str, "{ "); if (filter & GRL_TYPE_FILTER_AUDIO) { - g_string_append (str, "{ GRAPH tracker:Audio { SELECT (rdf:type(?urn) AS ?resourceType) ?urn "); + g_string_append_printf (str, "{ GRAPH tracker:Audio { SELECT (%d AS ?mediaType) ?urn ", + GRL_MEDIA_TYPE_AUDIO); append_subselect_bindings (str, merged_list, GRL_TYPE_FILTER_AUDIO); g_string_append_printf (str, "{ ?urn a nfo:Audio . %s } } } ", query_bases[type]); @@ -241,7 +242,8 @@ create_query_string (GrlTrackerQueryType type, } if (filter & GRL_TYPE_FILTER_VIDEO) { - g_string_append (str, "{ GRAPH tracker:Video { SELECT (rdf:type(?urn) AS ?resourceType) ?urn "); + g_string_append_printf (str, "{ GRAPH tracker:Video { SELECT (%d AS ?mediaType) ?urn ", + GRL_MEDIA_TYPE_VIDEO); append_subselect_bindings (str, merged_list, GRL_TYPE_FILTER_VIDEO); g_string_append_printf (str, "{ ?urn a nfo:Video . %s } } } ", query_bases[type]); @@ -251,7 +253,8 @@ create_query_string (GrlTrackerQueryType type, } if (filter & GRL_TYPE_FILTER_IMAGE) { - g_string_append (str, "{ GRAPH tracker:Pictures { SELECT (rdf:type(?urn) AS ?resourceType) ?urn "); + g_string_append_printf (str, "{ GRAPH tracker:Pictures { SELECT (%d AS ?mediaType) ?urn ", + GRL_MEDIA_TYPE_IMAGE); append_subselect_bindings (str, merged_list, GRL_TYPE_FILTER_IMAGE); g_string_append_printf (str, "{ ?urn a nfo:Image . %s } } } ", query_bases[type]); diff --git a/src/tracker3/grl-tracker-utils.c b/src/tracker3/grl-tracker-utils.c index b12baab..83c04d5 100644 --- a/src/tracker3/grl-tracker-utils.c +++ b/src/tracker3/grl-tracker-utils.c @@ -428,73 +428,20 @@ grl_tracker_key_is_supported (const GrlKeyID key) /**/ -static GrlMedia * -grl_tracker_build_grilo_media_default (GHashTable *ht) -{ - if (g_hash_table_lookup (ht, RDF_TYPE_MUSIC)) { - return grl_media_audio_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_VIDEO)) { - return grl_media_video_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_IMAGE)) { - return grl_media_image_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_ARTIST)) { - return grl_media_container_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_ALBUM)) { - return grl_media_container_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_CONTAINER)) { - return grl_media_container_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_FOLDER)) { - return grl_media_container_new (); - } else if (g_hash_table_lookup (ht, RDF_TYPE_PLAYLIST)) { - return grl_media_container_new (); - } - - return NULL; -} - -/**/ - -/* Builds an appropriate GrlMedia based on ontology type returned by - tracker, or NULL if unknown */ +/* Builds an appropriate GrlMedia based on tracker query results */ GrlMedia * -grl_tracker_build_grilo_media (const gchar *rdf_type, - GrlTypeFilter type_filter) +grl_tracker_build_grilo_media (GrlMediaType type) { GrlMedia *media = NULL; - gchar **rdf_single_type; - int i; - GHashTable *ht; - if (!rdf_type) { - return NULL; - } - - /* As rdf_type can be formed by several types, split them */ - rdf_single_type = g_strsplit (rdf_type, ",", -1); - i = g_strv_length (rdf_single_type) - 1; - ht = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); - for (; i>= 0; i--) - g_hash_table_insert (ht, g_path_get_basename (rdf_single_type[i]), GINT_TO_POINTER(TRUE)); - - if (type_filter == GRL_TYPE_FILTER_NONE || - type_filter == GRL_TYPE_FILTER_ALL) { - media = grl_tracker_build_grilo_media_default (ht); - } else if ((type_filter & GRL_TYPE_FILTER_AUDIO) && - g_hash_table_lookup (ht, RDF_TYPE_MUSIC)) { + if (type == GRL_MEDIA_TYPE_AUDIO) { media = grl_media_audio_new (); - } else if ((type_filter & GRL_TYPE_FILTER_VIDEO) && - g_hash_table_lookup (ht, RDF_TYPE_VIDEO)) { + } else if (type == GRL_MEDIA_TYPE_VIDEO) { media = grl_media_video_new (); - } else if ((type_filter & GRL_TYPE_FILTER_IMAGE) && - g_hash_table_lookup (ht, RDF_TYPE_IMAGE)) { + } else if (type == GRL_MEDIA_TYPE_IMAGE) { media = grl_media_image_new (); - } else { - media = grl_tracker_build_grilo_media_default (ht); } - g_hash_table_destroy (ht); - g_strfreev (rdf_single_type); - if (!media) media = grl_media_new (); diff --git a/src/tracker3/grl-tracker-utils.h b/src/tracker3/grl-tracker-utils.h index 9371832..a756eb8 100644 --- a/src/tracker3/grl-tracker-utils.h +++ b/src/tracker3/grl-tracker-utils.h @@ -28,22 +28,6 @@ #include "grl-tracker-source-priv.h" -/* ------- Definitions ------- */ - -#define RDF_TYPE_ALBUM "nmm#MusicAlbum" -#define RDF_TYPE_ARTIST "nmm#Artist" -#define RDF_TYPE_AUDIO "nfo#Audio" -#define RDF_TYPE_MUSIC "nmm#MusicPiece" -#define RDF_TYPE_IMAGE "nmm#Photo" -#define RDF_TYPE_VIDEO "nmm#Video" -#define RDF_TYPE_FOLDER "nfo#Folder" -#define RDF_TYPE_DOCUMENT "nfo#Document" -#define RDF_TYPE_CONTAINER "grilo#Container" -#define RDF_TYPE_PLAYLIST "nmm#Playlist" - -#define RDF_TYPE_VOLUME "tracker#Volume" -#define RDF_TYPE_UPNP "upnp#ContentDirectory" - /**/ typedef void (*tracker_grl_sparql_setter_cb_t) (TrackerSparqlCursor *cursor, @@ -76,7 +60,6 @@ TrackerResource * grl_tracker_build_resource_from_media (GrlMedia *media, GList tracker_grl_sparql_t *grl_tracker_get_mapping_from_sparql (const gchar *key); -GrlMedia *grl_tracker_build_grilo_media (const gchar *rdf_type, - GrlTypeFilter type_filter); +GrlMedia *grl_tracker_build_grilo_media (GrlMediaType type); #endif /* _GRL_TRACKER_UTILS_H_ */ |