[grilo-plugins] tracker: Add test_media_from_uri



commit f60d9e7e24370686302f91c6f34f53cce1a57c41
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date:   Mon Jul 28 12:24:41 2014 +0000

    tracker: Add test_media_from_uri
    
    Given an URL, tests if Tracker source can create a media out of it.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=678519

 src/tracker/grl-tracker-source-api.c |   69 ++++++++++++++++++++++++++++++++++
 src/tracker/grl-tracker-source-api.h |    3 +
 src/tracker/grl-tracker-source.c     |    2 +-
 3 files changed, 73 insertions(+), 1 deletions(-)
---
diff --git a/src/tracker/grl-tracker-source-api.c b/src/tracker/grl-tracker-source-api.c
index ff863c0..47d9245 100644
--- a/src/tracker/grl-tracker-source-api.c
+++ b/src/tracker/grl-tracker-source-api.c
@@ -159,6 +159,26 @@ GRL_LOG_DOMAIN_STATIC(tracker_source_result_log_domain);
   "DELETE { <%s> %s } WHERE { <%s> a nfo:Media . %s } " \
   "INSERT { <%s> a nfo:Media ; %s . }"
 
+#define TRACKER_TEST_MEDIA_FROM_URI_REQUEST             \
+  "SELECT ?urn "                                        \
+  "WHERE "                                              \
+  "{ "                                                  \
+  "?urn nie:url \"%s\" ; "                              \
+  "tracker:available true ; "                           \
+  "a nfo:Media . "                                      \
+  "%s "                                                 \
+  "}"
+
+#define TRACKER_TEST_MEDIA_FROM_URI_REQUEST_WITH_DOCUMENTS  \
+  "SELECT ?urn "                                            \
+  "WHERE "                                                  \
+  "{ "                                                      \
+  "?urn nie:url \"%s\" ; "                                  \
+  "tracker:available true . "                               \
+  "%s "                                                     \
+  "FILTER (?type IN ( nfo:Media, nfo:Document ))"           \
+  "}"
+
 /**/
 
 /**/
@@ -1110,3 +1130,52 @@ grl_tracker_source_get_caps (GrlSource *source,
 
   return caps;
 }
+
+gboolean
+grl_tracker_source_test_media_from_uri (GrlSource *source,
+                                        const gchar *uri)
+{
+  GrlTrackerSourcePriv *priv  = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
+  GError               *error = NULL;
+  TrackerSparqlCursor  *cursor;
+  gboolean              empty;
+  gchar                *constraint;
+  gchar                *sparql_final;
+
+  constraint = grl_tracker_source_get_device_constraint (priv);
+  if (grl_tracker_show_documents) {
+    sparql_final = g_strdup_printf (TRACKER_TEST_MEDIA_FROM_URI_REQUEST_WITH_DOCUMENTS,
+                                    uri,
+                                    constraint);
+  } else {
+    sparql_final = g_strdup_printf (TRACKER_TEST_MEDIA_FROM_URI_REQUEST,
+                                    uri,
+                                    constraint);
+  }
+
+  cursor = tracker_sparql_connection_query (grl_tracker_connection,
+                                            sparql_final,
+                                            NULL,
+                                            &error);
+  g_free (constraint);
+  g_free (sparql_final);
+
+  if (error) {
+    GRL_WARNING ("Error when executig sparql query: %s",
+                 error->message);
+    g_error_free (error);
+    return FALSE;
+  }
+
+  /* Check if there are results */
+  if (tracker_sparql_cursor_next (cursor, NULL, NULL)) {
+    empty = FALSE;
+  } else {
+    empty = TRUE;
+  }
+
+  g_object_unref (cursor);
+
+  return !empty;
+}
+
diff --git a/src/tracker/grl-tracker-source-api.h b/src/tracker/grl-tracker-source-api.h
index 7e7f9a6..7814344 100644
--- a/src/tracker/grl-tracker-source-api.h
+++ b/src/tracker/grl-tracker-source-api.h
@@ -66,4 +66,7 @@ gboolean grl_tracker_source_change_stop (GrlSource *source,
 GrlCaps *grl_tracker_source_get_caps (GrlSource *source,
                                       GrlSupportedOps operation);
 
+gboolean grl_tracker_source_test_media_from_uri (GrlSource *source,
+                                                 const gchar *uri);
+
 #endif /* _GRL_TRACKER_SOURCE_API_H_ */
diff --git a/src/tracker/grl-tracker-source.c b/src/tracker/grl-tracker-source.c
index bf06e30..686ac14 100644
--- a/src/tracker/grl-tracker-source.c
+++ b/src/tracker/grl-tracker-source.c
@@ -111,7 +111,7 @@ grl_tracker_source_class_init (GrlTrackerSourceClass * klass)
   source_class->notify_change_start = grl_tracker_source_change_start;
   source_class->notify_change_stop  = grl_tracker_source_change_stop;
   source_class->get_caps            = grl_tracker_source_get_caps;
-
+  source_class->test_media_from_uri = grl_tracker_source_test_media_from_uri;
 
   g_object_class_install_property (g_class,
                                    PROP_TRACKER_CONNECTION,


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