[grilo-plugins] tracker: Merge tracker-media and tracker-metadata sources in one tracker-source



commit 19216d602dd4f1b0c7189b92830c3cf937f3f680
Author: Juan A. Suarez Romero <jasuarez igalia com>
Date:   Tue Jul 17 20:20:53 2012 +0000

    tracker: Merge tracker-media and tracker-metadata sources in one tracker-source

 src/media/tracker/Makefile.am                      |   28 +-
 src/media/tracker/grl-tracker-media-api.h          |   60 ---
 src/media/tracker/grl-tracker-media.h              |   97 -----
 src/media/tracker/grl-tracker-metadata.c           |  376 --------------------
 src/media/tracker/grl-tracker-metadata.h           |   98 -----
 ...racker-media-api.c => grl-tracker-source-api.c} |  227 ++++++++-----
 src/media/tracker/grl-tracker-source-api.h         |   66 ++++
 ...er-media-cache.c => grl-tracker-source-cache.c} |   34 +-
 ...er-media-cache.h => grl-tracker-source-cache.h} |   28 +-
 ...er-media-notif.c => grl-tracker-source-notif.c} |   89 +++---
 ...er-media-notif.h => grl-tracker-source-notif.h} |   14 +-
 ...cker-media-priv.h => grl-tracker-source-priv.h} |   45 ++--
 .../{grl-tracker-media.c => grl-tracker-source.c}  |  191 +++++-----
 src/media/tracker/grl-tracker-source.h             |   97 +++++
 src/media/tracker/grl-tracker-utils.c              |   24 +-
 src/media/tracker/grl-tracker-utils.h              |   17 +-
 src/media/tracker/grl-tracker.c                    |   20 +-
 17 files changed, 542 insertions(+), 969 deletions(-)
---
diff --git a/src/media/tracker/Makefile.am b/src/media/tracker/Makefile.am
index ea6aa18..1edee28 100644
--- a/src/media/tracker/Makefile.am
+++ b/src/media/tracker/Makefile.am
@@ -20,23 +20,21 @@ libgrltracker_la_LDFLAGS = \
 	-module		   \
 	-avoid-version
 
-libgrltracker_la_SOURCES = 		\
-	grl-tracker.c			\
-	grl-tracker.h			\
-	grl-tracker-media.c		\
-	grl-tracker-media.h		\
-	grl-tracker-media-api.c		\
-	grl-tracker-media-api.h		\
-	grl-tracker-media-cache.c	\
-	grl-tracker-media-cache.h	\
-	grl-tracker-media-notif.c	\
-	grl-tracker-media-notif.h	\
-	grl-tracker-media-priv.h	\
-	grl-tracker-metadata.c		\
-	grl-tracker-metadata.h		\
+libgrltracker_la_SOURCES =	 		\
+	grl-tracker.c						\
+	grl-tracker.h						\
+	grl-tracker-source.c				\
+	grl-tracker-source.h				\
+	grl-tracker-source-api.c		\
+	grl-tracker-source-api.h		\
+	grl-tracker-source-cache.c		\
+	grl-tracker-source-cache.h		\
+	grl-tracker-source-notif.c		\
+	grl-tracker-source-notif.h		\
+	grl-tracker-source-priv.h		\
 	grl-tracker-request-queue.c	\
 	grl-tracker-request-queue.h	\
-	grl-tracker-utils.c		\
+	grl-tracker-utils.c				\
 	grl-tracker-utils.h
 
 extdir				= $(GRL_PLUGINS_DIR)
diff --git a/src/media/tracker/grl-tracker-media-api.c b/src/media/tracker/grl-tracker-source-api.c
similarity index 82%
rename from src/media/tracker/grl-tracker-media-api.c
rename to src/media/tracker/grl-tracker-source-api.c
index 9082883..9304af2 100644
--- a/src/media/tracker/grl-tracker-media-api.c
+++ b/src/media/tracker/grl-tracker-source-api.c
@@ -1,10 +1,11 @@
 /*
- * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2011-2012 Igalia S.L.
  * Copyright (C) 2011 Intel Corporation.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -31,27 +32,27 @@
 #include <tracker-sparql.h>
 
 #include "grl-tracker.h"
-#include "grl-tracker-media-api.h"
-#include "grl-tracker-media-cache.h"
-#include "grl-tracker-media-priv.h"
+#include "grl-tracker-source-api.h"
+#include "grl-tracker-source-cache.h"
+#include "grl-tracker-source-priv.h"
 #include "grl-tracker-request-queue.h"
 #include "grl-tracker-utils.h"
 
 /* --------- Logging  -------- */
 
-#define GRL_LOG_DOMAIN_DEFAULT tracker_media_request_log_domain
+#define GRL_LOG_DOMAIN_DEFAULT tracker_source_request_log_domain
 
-GRL_LOG_DOMAIN_STATIC(tracker_media_request_log_domain);
-GRL_LOG_DOMAIN_STATIC(tracker_media_result_log_domain);
+GRL_LOG_DOMAIN_STATIC(tracker_source_request_log_domain);
+GRL_LOG_DOMAIN_STATIC(tracker_source_result_log_domain);
 
 /* Inputs/requests */
 #define GRL_IDEBUG(args...)                     \
-  GRL_LOG (tracker_media_request_log_domain,    \
+  GRL_LOG (tracker_source_request_log_domain,   \
            GRL_LOG_LEVEL_DEBUG, args)
 
 /* Outputs/results */
 #define GRL_ODEBUG(args...)                     \
-  GRL_LOG (tracker_media_result_log_domain,     \
+  GRL_LOG (tracker_source_result_log_domain,    \
            GRL_LOG_LEVEL_DEBUG, args)
 
 /* ------- Definitions ------- */
@@ -136,7 +137,7 @@ GRL_LOG_DOMAIN_STATIC(tracker_media_result_log_domain);
   "OFFSET %i "                                                  \
   "LIMIT %i"
 
-#define TRACKER_METADATA_REQUEST                \
+#define TRACKER_RESOLVE_REQUEST                 \
   "SELECT %s "                                  \
   "WHERE "                                      \
   "{ "                                          \
@@ -145,6 +146,14 @@ GRL_LOG_DOMAIN_STATIC(tracker_media_result_log_domain);
   "FILTER (tracker:id(?urn) = %s) "             \
   "}"
 
+#define TRACKER_RESOLVE_URL_REQUEST             \
+  "SELECT %s "                                  \
+  "WHERE "                                      \
+  "{ "                                          \
+  "?urn a nie:DataObject . "                    \
+  "?urn nie:url \"%s\" "                        \
+  "}"
+
 #define TRACKER_SAVE_REQUEST                            \
   "DELETE { <%s> %s } WHERE { <%s> a nfo:Media . %s } " \
   "INSERT { <%s> a nfo:Media ; %s . }"
@@ -164,7 +173,7 @@ static GHashTable *grl_tracker_operations;
 /**/
 
 static void
-fill_grilo_media_from_sparql (GrlTrackerMedia    *source,
+fill_grilo_media_from_sparql (GrlTrackerSource    *source,
                               GrlMedia            *media,
                               TrackerSparqlCursor *cursor,
                               gint                 column)
@@ -205,10 +214,10 @@ fill_grilo_media_from_sparql (GrlTrackerMedia    *source,
       case G_TYPE_STRING:
         /* Cache the source associated to this result. */
         if (assoc->grl_key == GRL_METADATA_KEY_ID) {
-          grl_tracker_media_cache_add_item (grl_tracker_item_cache,
-                                            tracker_sparql_cursor_get_integer (cursor,
-                                                                               column),
-                                            source);
+          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)
@@ -307,7 +316,7 @@ fill_grilo_media_from_sparql (GrlTrackerMedia    *source,
       for (col = 1 ;                                                    \
            col < tracker_sparql_cursor_get_n_columns (os->cursor) ;     \
            col++) {                                                     \
-        fill_grilo_media_from_sparql (GRL_TRACKER_MEDIA (spec->source), \
+        fill_grilo_media_from_sparql (GRL_TRACKER_SOURCE (spec->source), \
                                       media, os->cursor, col);          \
       }                                                                 \
                                                                         \
@@ -337,7 +346,7 @@ fill_grilo_media_from_sparql (GrlTrackerMedia    *source,
     GError *tracker_error = NULL, *error = NULL;                        \
     spec_type *spec = (spec_type *) os->data;                           \
     TrackerSparqlConnection *connection =                               \
-      grl_tracker_media_get_tracker_connection (GRL_TRACKER_MEDIA (spec->source)); \
+      grl_tracker_source_get_tracker_connection (GRL_TRACKER_SOURCE (spec->source)); \
                                                                         \
     GRL_ODEBUG ("%s", __FUNCTION__);                                    \
                                                                         \
@@ -376,15 +385,15 @@ TRACKER_QUERY_CB(GrlSourceBrowseSpec, browse)
 TRACKER_QUERY_CB(GrlSourceSearchSpec, search)
 
 static void
-tracker_metadata_cb (GObject      *source_object,
-                     GAsyncResult *result,
-                     GrlTrackerOp *os)
+tracker_resolve_cb (GObject      *source_object,
+                    GAsyncResult *result,
+                    GrlTrackerOp *os)
 {
-  GrlSourceResolveSpec  *rs            = (GrlSourceResolveSpec *) os->data;
-  GrlTrackerMediaPriv   *priv          = GRL_TRACKER_MEDIA_GET_PRIVATE (rs->source);
+  GrlSourceResolveSpec *rs = (GrlSourceResolveSpec *) os->data;
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (rs->source);
   gint                  col;
-  GError                *tracker_error = NULL, *error = NULL;
-  TrackerSparqlCursor   *cursor;
+  GError               *tracker_error = NULL, *error = NULL;
+  TrackerSparqlCursor  *cursor;
 
   GRL_ODEBUG ("%s", __FUNCTION__);
 
@@ -392,12 +401,12 @@ tracker_metadata_cb (GObject      *source_object,
                                                    result, &tracker_error);
 
   if (tracker_error) {
-    GRL_WARNING ("Could not execute sparql query id=%u : %s",
-                 rs->operation_id, tracker_error->message);
+    GRL_WARNING ("Could not execute sparql resolve query : %s",
+                 tracker_error->message);
 
     error = g_error_new (GRL_CORE_ERROR,
-			 GRL_CORE_ERROR_BROWSE_FAILED,
-			 "Failed to start metadata action : %s",
+                        GRL_CORE_ERROR_BROWSE_FAILED,
+                        "Failed to start resolve action : %s",
                          tracker_error->message);
 
     rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, error);
@@ -412,11 +421,13 @@ tracker_metadata_cb (GObject      *source_object,
   if (tracker_sparql_cursor_next (cursor, NULL, NULL)) {
     /* Translate Sparql result into Grilo result */
     for (col = 0 ; col < tracker_sparql_cursor_get_n_columns (cursor) ; col++) {
-      fill_grilo_media_from_sparql (GRL_TRACKER_MEDIA (rs->source),
+      fill_grilo_media_from_sparql (GRL_TRACKER_SOURCE (rs->source),
                                     rs->media, cursor, col);
     }
 
     rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
+  } else {
+    rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
   }
 
  end_operation:
@@ -433,7 +444,7 @@ tracker_store_metadata_cb (GObject      *source_object,
 {
   GrlSourceStoreMetadataSpec *sms =
     (GrlSourceStoreMetadataSpec *) os->data;
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (sms->source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (sms->source);
   GError *tracker_error = NULL, *error = NULL;
 
   tracker_sparql_connection_update_finish (priv->tracker_connection,
@@ -463,7 +474,7 @@ tracker_store_metadata_cb (GObject      *source_object,
 /**/
 
 const GList *
-grl_tracker_media_writable_keys (GrlSource *source)
+grl_tracker_source_writable_keys (GrlSource *source)
 {
   static GList *keys = NULL;
   if (!keys) {
@@ -546,11 +557,11 @@ grl_tracker_media_writable_keys (GrlSource *source)
  * the query spec.
  */
 void
-grl_tracker_media_query (GrlSource *source,
-                         GrlSourceQuerySpec *qs)
+grl_tracker_source_query (GrlSource *source,
+                          GrlSourceQuerySpec *qs)
 {
   GError               *error = NULL;
-  GrlTrackerMediaPriv *priv  = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv  = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
   gchar                *constraint;
   gchar                *sparql_final;
   gchar                *sparql_select;
@@ -569,8 +580,8 @@ grl_tracker_media_query (GrlSource *source,
 
   /* Check if it is a full sparql query */
   if (g_ascii_strncasecmp (qs->query, "select ", 7) != 0) {
-    constraint = grl_tracker_media_get_device_constraint (priv);
-    sparql_select = grl_tracker_media_get_select_string (qs->keys);
+    constraint = grl_tracker_source_get_device_constraint (priv);
+    sparql_select = grl_tracker_source_get_select_string (qs->keys);
     sparql_final = g_strdup_printf (TRACKER_QUERY_REQUEST,
                                     sparql_select,
                                     qs->query,
@@ -581,7 +592,7 @@ grl_tracker_media_query (GrlSource *source,
     g_free (qs->query);
     g_free (sparql_select);
     qs->query = sparql_final;
-    grl_tracker_media_query (source, qs);
+    grl_tracker_source_query (source, qs);
     return;
   }
 
@@ -609,37 +620,50 @@ grl_tracker_media_query (GrlSource *source,
 }
 
 void
-grl_tracker_media_resolve (GrlSource *source,
-                           GrlSourceResolveSpec *rs)
+grl_tracker_source_resolve (GrlSource *source,
+                            GrlSourceResolveSpec *rs)
 {
-  GrlTrackerMediaPriv *priv       = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
-  gchar               *constraint = NULL, *sparql_select, *sparql_final;
-  GrlTrackerOp        *os;
+  GrlTrackerSourcePriv *priv       = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
+  gchar                *constraint = NULL, *sparql_select, *sparql_final;
+  const gchar          *url        = grl_media_get_url (rs->media);
+  GrlTrackerOp         *os;
 
   GRL_IDEBUG ("%s: id=%i", __FUNCTION__, rs->operation_id);
 
-  if (grl_media_get_id (rs->media) == NULL) {
-    if (grl_tracker_per_device_source) {
-      constraint = grl_tracker_media_get_device_constraint (priv);
-      sparql_select = grl_tracker_media_get_select_string (rs->keys);
-      sparql_final = g_strdup_printf (TRACKER_BROWSE_FILESYSTEM_ROOT_REQUEST,
-                                      sparql_select,
-                                      grl_tracker_show_documents? TRACKER_BROWSE_SHOW_DOCUMENTS: "",
-                                      constraint, 0, 1);
+  /* Check if the media comes from this source or another */
+  if (g_strcmp0 (priv->tracker_datasource, grl_source_get_id (rs->source)) == 0) {
+    if (grl_media_get_id (rs->media) == NULL) {
+      if (grl_tracker_per_device_source) {
+        constraint = grl_tracker_source_get_device_constraint (priv);
+        sparql_select = grl_tracker_source_get_select_string (rs->keys);
+        sparql_final = g_strdup_printf (TRACKER_BROWSE_FILESYSTEM_ROOT_REQUEST,
+                                        sparql_select,
+                                        grl_tracker_show_documents? TRACKER_BROWSE_SHOW_DOCUMENTS: "",
+                                        constraint, 0, 1);
+      } else {
+        rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
+        return;
+      }
+    } else {
+      sparql_select = grl_tracker_source_get_select_string (rs->keys);
+      sparql_final = g_strdup_printf (TRACKER_RESOLVE_REQUEST, sparql_select,
+                                      grl_media_get_id (rs->media));
+    }
+  } else {
+    if (url) {
+      sparql_select = grl_tracker_source_get_select_string (rs->keys);
+      sparql_final = g_strdup_printf (TRACKER_RESOLVE_URL_REQUEST,
+                                      sparql_select, url);
     } else {
       rs->callback (rs->source, rs->operation_id, rs->media, rs->user_data, NULL);
       return;
     }
-  } else {
-    sparql_select = grl_tracker_media_get_select_string (rs->keys);
-    sparql_final = g_strdup_printf (TRACKER_METADATA_REQUEST, sparql_select,
-                                    grl_media_get_id (rs->media));
   }
 
-  GRL_IDEBUG ("\tselect: '%s'", sparql_final);
+  GRL_IDEBUG ("\request: '%s'", sparql_final);
 
   os = grl_tracker_op_initiate_metadata (sparql_final,
-                                         (GAsyncReadyCallback) tracker_metadata_cb,
+                                         (GAsyncReadyCallback) tracker_resolve_cb,
                                          rs);
   os->keys = rs->keys;
 
@@ -651,11 +675,40 @@ grl_tracker_media_resolve (GrlSource *source,
     g_free (sparql_select);
 }
 
+gboolean
+grl_tracker_source_may_resolve (GrlSource *source,
+                                GrlMedia  *media,
+                                GrlKeyID   key_id,
+                                GList    **missing_keys)
+{
+  GRL_IDEBUG ("%s: key=%s", __FUNCTION__, GRL_METADATA_KEY_GET_NAME (key_id));
+
+  if (media && grl_tracker_source_find_source (grl_media_get_source (media))) {
+    return TRUE;
+  }
+
+  if (!grl_tracker_key_is_supported (key_id)) {
+    return FALSE;
+  }
+
+  if (media) {
+    if (grl_media_get_url (media)) {
+      return TRUE;
+    } else {
+      if (missing_keys) {
+        *missing_keys = g_list_append (*missing_keys,
+                                       GRLKEYID_TO_POINTER (GRL_METADATA_KEY_URL));
+      }
+    }
+  }
+
+  return FALSE;
+}
+
 void
-grl_tracker_media_store_metadata (GrlSource *source,
-                                  GrlSourceStoreMetadataSpec *sms)
+grl_tracker_source_store_metadata (GrlSource *source,
+                                   GrlSourceStoreMetadataSpec *sms)
 {
-  /* GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source); */
   gchar *sparql_delete, *sparql_cdelete, *sparql_insert, *sparql_final;
   const gchar *urn = grl_data_get_string (GRL_DATA (sms->media),
                                           grl_metadata_key_tracker_urn);
@@ -686,9 +739,9 @@ grl_tracker_media_store_metadata (GrlSource *source,
 }
 
 void
-grl_tracker_media_search (GrlSource *source, GrlSourceSearchSpec *ss)
+grl_tracker_source_search (GrlSource *source, GrlSourceSearchSpec *ss)
 {
-  GrlTrackerMediaPriv *priv  = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv  = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
   gchar                *constraint;
   gchar                *sparql_select;
   gchar                *sparql_final;
@@ -698,8 +751,8 @@ grl_tracker_media_search (GrlSource *source, GrlSourceSearchSpec *ss)
 
   GRL_IDEBUG ("%s: id=%u", __FUNCTION__, ss->operation_id);
 
-  constraint = grl_tracker_media_get_device_constraint (priv);
-  sparql_select = grl_tracker_media_get_select_string (ss->keys);
+  constraint = grl_tracker_source_get_device_constraint (priv);
+  sparql_select = grl_tracker_source_get_select_string (ss->keys);
   if (!ss->text || ss->text[0] == '\0') {
     /* Search all */
     sparql_final = g_strdup_printf (TRACKER_SEARCH_ALL_REQUEST, sparql_select,
@@ -726,10 +779,10 @@ grl_tracker_media_search (GrlSource *source, GrlSourceSearchSpec *ss)
 }
 
 static void
-grl_tracker_media_browse_category (GrlSource *source,
-                                   GrlSourceBrowseSpec *bs)
+grl_tracker_source_browse_category (GrlSource *source,
+                                    GrlSourceBrowseSpec *bs)
 {
-  GrlTrackerMediaPriv *priv  = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv  = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
   gchar                *constraint;
   gchar                *sparql_select;
   gchar                *sparql_final;
@@ -780,8 +833,8 @@ grl_tracker_media_browse_category (GrlSource *source,
   category = grl_data_get_string (GRL_DATA (bs->container),
                                   grl_metadata_key_tracker_category);
 
-  constraint = grl_tracker_media_get_device_constraint (priv);
-  sparql_select = grl_tracker_media_get_select_string (bs->keys);
+  constraint = grl_tracker_source_get_device_constraint (priv);
+  sparql_select = grl_tracker_source_get_select_string (bs->keys);
   sparql_final = g_strdup_printf (TRACKER_BROWSE_CATEGORY_REQUEST,
                                   sparql_select,
                                   category,
@@ -805,10 +858,10 @@ grl_tracker_media_browse_category (GrlSource *source,
 }
 
 static void
-grl_tracker_media_browse_filesystem (GrlSource *source,
-                                     GrlSourceBrowseSpec *bs)
+grl_tracker_source_browse_filesystem (GrlSource *source,
+                                      GrlSourceBrowseSpec *bs)
 {
-  GrlTrackerMediaPriv *priv  = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv  = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
   gchar                *constraint;
   gchar                *sparql_select;
   gchar                *sparql_final;
@@ -818,8 +871,8 @@ grl_tracker_media_browse_filesystem (GrlSource *source,
 
   GRL_IDEBUG ("%s: id=%u", __FUNCTION__, bs->operation_id);
 
-  sparql_select = grl_tracker_media_get_select_string (bs->keys);
-  constraint = grl_tracker_media_get_device_constraint (priv);
+  sparql_select = grl_tracker_source_get_select_string (bs->keys);
+  constraint = grl_tracker_source_get_device_constraint (priv);
 
   if (bs->container == NULL ||
       !grl_media_get_id (bs->container)) {
@@ -855,17 +908,17 @@ grl_tracker_media_browse_filesystem (GrlSource *source,
 }
 
 void
-grl_tracker_media_browse (GrlSource *source,
-                          GrlSourceBrowseSpec *bs)
+grl_tracker_source_browse (GrlSource *source,
+                           GrlSourceBrowseSpec *bs)
 {
   if (grl_tracker_browse_filesystem)
-    grl_tracker_media_browse_filesystem (source, bs);
+    grl_tracker_source_browse_filesystem (source, bs);
   else
-    grl_tracker_media_browse_category (source, bs);
+    grl_tracker_source_browse_category (source, bs);
 }
 
 void
-grl_tracker_media_cancel (GrlSource *source, guint operation_id)
+grl_tracker_source_cancel (GrlSource *source, guint operation_id)
 {
   GrlTrackerOp *os;
 
@@ -879,9 +932,9 @@ grl_tracker_media_cancel (GrlSource *source, guint operation_id)
 }
 
 gboolean
-grl_tracker_media_change_start (GrlSource *source, GError **error)
+grl_tracker_source_change_start (GrlSource *source, GError **error)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   priv->notify_changes = TRUE;
 
@@ -889,9 +942,9 @@ grl_tracker_media_change_start (GrlSource *source, GError **error)
 }
 
 gboolean
-grl_tracker_media_change_stop (GrlSource *source, GError **error)
+grl_tracker_source_change_stop (GrlSource *source, GError **error)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   priv->notify_changes = FALSE;
 
@@ -899,7 +952,7 @@ grl_tracker_media_change_stop (GrlSource *source, GError **error)
 }
 
 void
-grl_tracker_media_init_requests (void)
+grl_tracker_source_init_requests (void)
 {
   GrlPluginRegistry *registry = grl_plugin_registry_get_default ();
 
@@ -921,8 +974,8 @@ grl_tracker_media_init_requests (void)
 
   grl_tracker_operations = g_hash_table_new (g_direct_hash, g_direct_equal);
 
-  GRL_LOG_DOMAIN_INIT (tracker_media_request_log_domain,
-                       "tracker-media-request");
-  GRL_LOG_DOMAIN_INIT (tracker_media_result_log_domain,
-                       "tracker-media-result");
+  GRL_LOG_DOMAIN_INIT (tracker_source_request_log_domain,
+                       "tracker-source-request");
+  GRL_LOG_DOMAIN_INIT (tracker_source_result_log_domain,
+                       "tracker-source-result");
 }
diff --git a/src/media/tracker/grl-tracker-source-api.h b/src/media/tracker/grl-tracker-source-api.h
new file mode 100644
index 0000000..5a49841
--- /dev/null
+++ b/src/media/tracker/grl-tracker-source-api.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2011-2012 Igalia S.L.
+ * Copyright (C) 2011 Intel Corporation.
+ *
+ * Contact: Iago Toral Quiroga <itoral igalia com>
+ *
+ * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef _GRL_TRACKER_SOURCE_API_H_
+#define _GRL_TRACKER_SOURCE_API_H_
+
+#include "grl-tracker-source.h"
+
+/**/
+
+void grl_tracker_source_init_requests (void);
+
+const GList *grl_tracker_source_writable_keys (GrlSource *source);
+
+void grl_tracker_source_query (GrlSource *source,
+                               GrlSourceQuerySpec *qs);
+
+void grl_tracker_source_resolve (GrlSource *source,
+                                 GrlSourceResolveSpec *rs);
+
+gboolean grl_tracker_source_may_resolve (GrlSource *source,
+                                         GrlMedia *media,
+                                         GrlKeyID key_id,
+                                         GList **missing_keys);
+
+void grl_tracker_source_store_metadata (GrlSource *source,
+                                        GrlSourceStoreMetadataSpec *sms);
+
+void grl_tracker_source_cancel (GrlSource *source, guint operation_id);
+
+void grl_tracker_source_search (GrlSource *source,
+                                GrlSourceSearchSpec *ss);
+
+void grl_tracker_source_browse (GrlSource *source,
+                                GrlSourceBrowseSpec *bs);
+
+gboolean grl_tracker_source_change_start (GrlSource *source,
+                                          GError **error);
+
+gboolean grl_tracker_source_change_stop (GrlSource *source,
+                                         GError **error);
+
+#endif /* _GRL_TRACKER_SOURCE_API_H_ */
diff --git a/src/media/tracker/grl-tracker-media-cache.c b/src/media/tracker/grl-tracker-source-cache.c
similarity index 82%
rename from src/media/tracker/grl-tracker-media-cache.c
rename to src/media/tracker/grl-tracker-source-cache.c
index 057c3ca..0ad04b2 100644
--- a/src/media/tracker/grl-tracker-media-cache.c
+++ b/src/media/tracker/grl-tracker-source-cache.c
@@ -1,9 +1,11 @@
 /*
  * Copyright (C) 2011 Intel Corporation.
+ * Copyright (C) 2011 Igalia S.L.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -24,10 +26,10 @@
 
 #include <glib.h>
 
-#include "grl-tracker-media-cache.h"
+#include "grl-tracker-source-cache.h"
 
 typedef struct {
-  GrlTrackerMedia *source;
+  GrlTrackerSource *source;
 
   GHashTable *id_table;
 } GrlTrackerCacheSource;
@@ -42,7 +44,7 @@ struct _GrlTrackerCache {
 };
 
 static GrlTrackerCacheSource *
-grl_tracker_cache_media_new (GrlTrackerMedia *source)
+grl_tracker_cache_source_new (GrlTrackerSource *source)
 {
   GrlTrackerCacheSource *csource = g_slice_new0 (GrlTrackerCacheSource);
 
@@ -53,7 +55,7 @@ grl_tracker_cache_media_new (GrlTrackerMedia *source)
 }
 
 static void
-grl_tracker_cache_media_free (GrlTrackerCacheSource *csource)
+grl_tracker_cache_source_free (GrlTrackerCacheSource *csource)
 {
   g_hash_table_destroy (csource->id_table);
 
@@ -63,7 +65,7 @@ grl_tracker_cache_media_free (GrlTrackerCacheSource *csource)
 /**/
 
 GrlTrackerCache *
-grl_tracker_media_cache_new (gsize size)
+grl_tracker_source_cache_new (gsize size)
 {
   GrlTrackerCache *cache;
 
@@ -82,7 +84,7 @@ grl_tracker_media_cache_new (gsize size)
 }
 
 void
-grl_tracker_media_cache_free (GrlTrackerCache *cache)
+grl_tracker_source_cache_free (GrlTrackerCache *cache)
 {
   GHashTableIter iter;
   gpointer key, value;
@@ -91,7 +93,7 @@ grl_tracker_media_cache_free (GrlTrackerCache *cache)
 
   g_hash_table_iter_init (&iter, cache->source_table);
   while (g_hash_table_iter_next (&iter, &key, &value)) {
-    grl_tracker_media_cache_del_source (cache, key);
+    grl_tracker_source_cache_del_source (cache, key);
   }
 
   if (cache->id_list) {
@@ -105,9 +107,9 @@ grl_tracker_media_cache_free (GrlTrackerCache *cache)
 }
 
 void
-grl_tracker_media_cache_add_item (GrlTrackerCache *cache,
-                                  guint id,
-                                  GrlTrackerMedia *source)
+grl_tracker_source_cache_add_item (GrlTrackerCache *cache,
+                                   guint id,
+                                   GrlTrackerSource *source)
 {
   GList *lid;
   GrlTrackerCacheSource *csource;
@@ -120,7 +122,7 @@ grl_tracker_media_cache_add_item (GrlTrackerCache *cache,
   csource = g_hash_table_lookup (cache->source_table, source);
 
   if (!csource) {
-    csource = grl_tracker_cache_media_new (source);
+    csource = grl_tracker_cache_source_new (source);
     g_hash_table_insert (cache->source_table, source, csource);
   }
 
@@ -144,8 +146,8 @@ grl_tracker_media_cache_add_item (GrlTrackerCache *cache,
 }
 
 void
-grl_tracker_media_cache_del_source (GrlTrackerCache *cache,
-                                    GrlTrackerMedia *source)
+grl_tracker_source_cache_del_source (GrlTrackerCache *cache,
+                                     GrlTrackerSource *source)
 {
   GrlTrackerCacheSource *csource;
   GHashTableIter iter;
@@ -167,11 +169,11 @@ grl_tracker_media_cache_del_source (GrlTrackerCache *cache,
   }
 
   g_hash_table_remove (cache->source_table, source);
-  grl_tracker_cache_media_free (csource);
+  grl_tracker_cache_source_free (csource);
 }
 
-GrlTrackerMedia *
-grl_tracker_media_cache_get_source (GrlTrackerCache *cache, guint id)
+GrlTrackerSource *
+grl_tracker_source_cache_get_source (GrlTrackerCache *cache, guint id)
 {
   GrlTrackerCacheSource *csource;
 
diff --git a/src/media/tracker/grl-tracker-media-cache.h b/src/media/tracker/grl-tracker-source-cache.h
similarity index 54%
rename from src/media/tracker/grl-tracker-media-cache.h
rename to src/media/tracker/grl-tracker-source-cache.h
index 1b5329e..a84930b 100644
--- a/src/media/tracker/grl-tracker-media-cache.h
+++ b/src/media/tracker/grl-tracker-source-cache.h
@@ -1,9 +1,11 @@
 /*
  * Copyright (C) 2011 Intel Corporation.
+ * Copyright (C) 2011-2012 Igalia S.L.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -22,24 +24,24 @@
  *
  */
 
-#ifndef _GRL_TRACKER_MEDIA_CACHE_H_
-#define _GRL_TRACKER_MEDIA_CACHE_H_
+#ifndef _GRL_TRACKER_SOURCE_CACHE_H_
+#define _GRL_TRACKER_SOURCE_CACHE_H_
 
-#include "grl-tracker-media.h"
+#include "grl-tracker-source.h"
 
 typedef struct _GrlTrackerCache GrlTrackerCache;
 
-GrlTrackerCache *grl_tracker_media_cache_new (gsize size);
+GrlTrackerCache *grl_tracker_source_cache_new (gsize size);
 
-void grl_tracker_media_cache_free (GrlTrackerCache *cache);
+void grl_tracker_source_cache_free (GrlTrackerCache *cache);
 
-void grl_tracker_media_cache_add_item (GrlTrackerCache *cache,
-                                       guint id,
-                                       GrlTrackerMedia *source);
-void grl_tracker_media_cache_del_source (GrlTrackerCache *cache,
-                                         GrlTrackerMedia *source);
+void grl_tracker_source_cache_add_item (GrlTrackerCache *cache,
+                                        guint id,
+                                        GrlTrackerSource *source);
+void grl_tracker_source_cache_del_source (GrlTrackerCache *cache,
+                                          GrlTrackerSource *source);
 
-GrlTrackerMedia *grl_tracker_media_cache_get_source (GrlTrackerCache *cache,
-                                                     guint id);
+GrlTrackerSource *grl_tracker_source_cache_get_source (GrlTrackerCache *cache,
+                                                       guint id);
 
-#endif /* _GRL_TRACKER_MEDIA_CACHE_H_ */
+#endif /* _GRL_TRACKER_SOURCE_CACHE_H_ */
diff --git a/src/media/tracker/grl-tracker-media-notif.c b/src/media/tracker/grl-tracker-source-notif.c
similarity index 88%
rename from src/media/tracker/grl-tracker-media-notif.c
rename to src/media/tracker/grl-tracker-source-notif.c
index dc5e3aa..7a2d32b 100644
--- a/src/media/tracker/grl-tracker-media-notif.c
+++ b/src/media/tracker/grl-tracker-source-notif.c
@@ -1,10 +1,11 @@
 /*
- * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2011-2012 Igalia S.L.
  * Copyright (C) 2011 Intel Corporation.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -26,8 +27,8 @@
 #include <tracker-sparql.h>
 
 #include "grl-tracker.h"
-#include "grl-tracker-media-notif.h"
-#include "grl-tracker-media-priv.h"
+#include "grl-tracker-source-notif.h"
+#include "grl-tracker-source-priv.h"
 #include "grl-tracker-utils.h"
 
 /* --------- Logging  -------- */
@@ -38,7 +39,7 @@ GRL_LOG_DOMAIN_STATIC(tracker_notif_log_domain);
 /* ------- Definitions ------- */
 
 #define TRACKER_MEDIA_ITEM                                              \
-  "SELECT rdf:type(?urn) tracker:id(?urn) nie:dataSource(?urn) "	\
+  "SELECT rdf:type(?urn) tracker:id(?urn) nie:dataSource(?urn) "        \
   "WHERE { ?urn a nfo:FileDataObject . "                                \
   "FILTER (tracker:id(?urn) IN (%s)) }"
 
@@ -103,29 +104,29 @@ tracker_evt_update_free (tracker_evt_update_t *evt)
 }
 
 static void
-tracker_evt_update_media_add (tracker_evt_update_t *evt,
-                              const gchar *id,
-                              const gchar *source_name)
+tracker_evt_update_source_add (tracker_evt_update_t *evt,
+                               const gchar *id,
+                               const gchar *source_name)
 {
-  GrlTrackerMedia *source;
-  GrlTrackerMediaPriv *priv;
+  GrlTrackerSource *source;
+  GrlTrackerSourcePriv *priv;
 
-  source = g_hash_table_lookup (grl_tracker_media_sources_modified, id);
+  source = g_hash_table_lookup (grl_tracker_source_sources_modified, id);
   if (!source) {
-    source = g_object_new (GRL_TRACKER_MEDIA_TYPE,
+    source = g_object_new (GRL_TRACKER_SOURCE_TYPE,
 			   "source-id", id,
 			   "source-name", source_name,
-			   "source-desc", GRL_TRACKER_MEDIA_DESC,
+			   "source-desc", GRL_TRACKER_SOURCE_DESC,
 			   "tracker-connection", grl_tracker_connection,
                            "tracker-datasource", id,
 			   NULL);
-    g_hash_table_insert (grl_tracker_media_sources_modified,
-                         (gpointer) grl_tracker_media_get_tracker_source (source),
+    g_hash_table_insert (grl_tracker_source_sources_modified,
+                         (gpointer) grl_tracker_source_get_tracker_source (source),
                         source);
   }
 
-  priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
-  priv->state = GRL_TRACKER_MEDIA_STATE_INSERTING;
+  priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
+  priv->state = GRL_TRACKER_SOURCE_STATE_INSERTING;
   priv->notification_ref++;
 
   evt->new_sources = g_list_append (evt->new_sources, source);
@@ -135,19 +136,19 @@ tracker_evt_update_media_add (tracker_evt_update_t *evt,
 }
 
 static void
-tracker_evt_update_media_del (tracker_evt_update_t *evt,
-                              GrlTrackerMedia *source)
+tracker_evt_update_source_del (tracker_evt_update_t *evt,
+                               GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   priv->notification_ref++;
-  priv->state = GRL_TRACKER_MEDIA_STATE_DELETING;
+  priv->state = GRL_TRACKER_SOURCE_STATE_DELETING;
 
   evt->old_sources = g_list_append (evt->old_sources, source);
 
   GRL_DEBUG ("Predel source p=%p name=%s id=%s count=%u", source,
              grl_source_get_name (GRL_SOURCE (source)),
-             grl_tracker_media_get_tracker_source (source),
+             grl_tracker_source_get_tracker_source (source),
              priv->notification_ref);
 }
 
@@ -160,13 +161,13 @@ tracker_evt_postupdate_sources (tracker_evt_update_t *evt)
 
   source = evt->old_sources;
   while (source != NULL) {
-    grl_tracker_del_source (GRL_TRACKER_MEDIA (source->data));
+    grl_tracker_del_source (GRL_TRACKER_SOURCE (source->data));
     source = source->next;
   }
 
   source = evt->new_sources;
   while (source != NULL) {
-    grl_tracker_add_source (GRL_TRACKER_MEDIA (source->data));
+    grl_tracker_add_source (GRL_TRACKER_SOURCE (source->data));
     source = source->next;
   }
 
@@ -180,7 +181,7 @@ tracker_evt_update_orphan_item_cb (GObject              *object,
 {
   guint id;
   const gchar *type, *datasource;
-  GrlTrackerMedia *source = NULL;
+  GrlTrackerSource *source = NULL;
   GError *error = NULL;
 
   GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt);
@@ -214,15 +215,15 @@ tracker_evt_update_orphan_item_cb (GObject              *object,
   GRL_DEBUG ("\tOrphan item: id=%u datasource=%s", id, datasource);
 
   if (datasource)
-    source = grl_tracker_media_find (datasource);
+    source = grl_tracker_source_find (datasource);
 
-  if (source && GRL_IS_TRACKER_MEDIA (source)) {
+  if (source && GRL_IS_TRACKER_SOURCE (source)) {
     GrlMedia *media;
 
     GRL_DEBUG (" \tAdding to cache id=%u", id);
-    grl_tracker_media_cache_add_item (grl_tracker_item_cache, id, source);
+    grl_tracker_source_cache_add_item (grl_tracker_item_cache, id, source);
 
-    if (grl_tracker_media_can_notify (source)) {
+    if (grl_tracker_source_can_notify (source)) {
       media = grl_tracker_build_grilo_media (type);
       if (media) {
         gchar *str_id = g_strdup_printf ("%i", id);
@@ -311,11 +312,11 @@ tracker_evt_update_orphans (tracker_evt_update_t *evt)
       /* Notify all sources that a media been removed */
       source = sources;
       while (source != NULL) {
-        if (GRL_IS_TRACKER_MEDIA (source->data)) {
+        if (GRL_IS_TRACKER_SOURCE (source->data)) {
           GRL_DEBUG ("\tNotify id=%u source=%s p=%p", id,
                      grl_source_get_name (GRL_SOURCE (source->data)),
                      source->data);
-          if (grl_tracker_media_can_notify (GRL_TRACKER_MEDIA (source->data))) {
+          if (grl_tracker_source_can_notify (GRL_TRACKER_SOURCE (source->data))) {
             GrlMedia *media = grl_media_new ();
             gchar *str_id = g_strdup_printf ("%u", id);
 
@@ -363,7 +364,7 @@ tracker_evt_update_items_cb (gpointer              key,
 {
   guint id = GPOINTER_TO_INT (key);
   gchar *str_id;
-  GrlTrackerMedia *source = (GrlTrackerMedia *) value;
+  GrlTrackerSource *source = (GrlTrackerSource *) value;
   GrlMedia *media;
 
   GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt);
@@ -373,7 +374,7 @@ tracker_evt_update_items_cb (gpointer              key,
     return;
   }
 
-  if (!grl_tracker_media_can_notify (source)) {
+  if (!grl_tracker_source_can_notify (source)) {
     GRL_DEBUG ("\tno notification for source %s...",
 	       grl_source_get_name (GRL_SOURCE (source)));
     return;
@@ -412,7 +413,7 @@ tracker_evt_preupdate_sources_item_cb (GObject              *object,
 {
   const gchar *type, *datasource, *uri, *datasource_name;
   gboolean source_available = FALSE;
-  GrlTrackerMedia *source;
+  GrlTrackerSource *source;
   GError *error = NULL;
 
   GRL_DEBUG ("%s: evt=%p", __FUNCTION__, evt);
@@ -443,25 +444,25 @@ tracker_evt_preupdate_sources_item_cb (GObject              *object,
   if (tracker_sparql_cursor_is_bound (evt->cursor, 4))
     source_available = tracker_sparql_cursor_get_boolean (evt->cursor, 4);
 
-  source = grl_tracker_media_find (datasource);
+  source = grl_tracker_source_find (datasource);
 
   GRL_DEBUG ("\tdatasource=%s uri=%s available=%i source=%p",
              datasource, uri, source_available, source);
 
   if (source_available) {
     if (source == NULL) {
-      gchar *source_name = grl_tracker_get_media_name (type, uri, datasource,
-                                                       datasource_name);
+      gchar *source_name = grl_tracker_get_source_name (type, uri, datasource,
+                                                        datasource_name);
       /* Defer source creation until we have processed all sources */
       if (source_name) {
-        tracker_evt_update_media_add (evt, datasource, source_name);
+        tracker_evt_update_source_add (evt, datasource, source_name);
         g_free (source_name);
       }
     } else {
       GRL_DEBUG ("\tChanges on source %p / %s", source, datasource);
     }
   } else if (!source_available && source != NULL) {
-    tracker_evt_update_media_del (evt, GRL_TRACKER_MEDIA (source));
+    tracker_evt_update_source_del (evt, GRL_TRACKER_SOURCE (source));
   }
 
   tracker_sparql_cursor_next_async (evt->cursor, NULL,
@@ -533,8 +534,8 @@ tracker_dbus_signal_cb (GDBusConnection *connection,
   while (g_variant_iter_loop (iter1, "(iiii)", &graph,
                               &subject, &predicate, &object)) {
     gpointer psubject = GSIZE_TO_POINTER (subject);
-    GrlTrackerMedia *source =
-      grl_tracker_media_cache_get_source (grl_tracker_item_cache, subject);
+    GrlTrackerSource *source =
+      grl_tracker_source_cache_get_source (grl_tracker_item_cache, subject);
 
     /* GRL_DEBUG ("\tdelete=> subject=%i", subject); */
 
@@ -550,8 +551,8 @@ tracker_dbus_signal_cb (GDBusConnection *connection,
   while (g_variant_iter_loop (iter2, "(iiii)", &graph,
                               &subject, &predicate, &object)) {
     gpointer psubject = GSIZE_TO_POINTER (subject);
-    GrlTrackerMedia *source =
-      grl_tracker_media_cache_get_source (grl_tracker_item_cache, subject);
+    GrlTrackerSource *source =
+      grl_tracker_source_cache_get_source (grl_tracker_item_cache, subject);
 
     /* GRL_DEBUG ("\tinsert=> subject=%i", subject); */
 
@@ -598,7 +599,7 @@ tracker_dbus_signal_cb (GDBusConnection *connection,
 }
 
 void
-grl_tracker_media_dbus_start_watch (void)
+grl_tracker_source_dbus_start_watch (void)
 {
   GDBusConnection *connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL);
 
@@ -615,7 +616,7 @@ grl_tracker_media_dbus_start_watch (void)
 }
 
 void
-grl_tracker_media_init_notifs (void)
+grl_tracker_source_init_notifs (void)
 {
   GRL_LOG_DOMAIN_INIT (tracker_notif_log_domain, "tracker-notif");
 }
diff --git a/src/media/tracker/grl-tracker-media-notif.h b/src/media/tracker/grl-tracker-source-notif.h
similarity index 85%
rename from src/media/tracker/grl-tracker-media-notif.h
rename to src/media/tracker/grl-tracker-source-notif.h
index 67eeba8..8ba3e3d 100644
--- a/src/media/tracker/grl-tracker-media-notif.h
+++ b/src/media/tracker/grl-tracker-source-notif.h
@@ -1,9 +1,11 @@
 /*
  * Copyright (C) 2011 Intel Corporation.
+ * Copyright (C) 2011-2012 Igalia S.L.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -22,10 +24,10 @@
  *
  */
 
-#ifndef _GRL_TRACKER_MEDIA_NOTIF_H_
-#define _GRL_TRACKER_MEDIA_NOTIF_H_
+#ifndef _GRL_TRACKER_SOURCE_NOTIF_H_
+#define _GRL_TRACKER_SOURCE_NOTIF_H_
 
-#include "grl-tracker-media.h"
+#include "grl-tracker-source.h"
 
 /* ------- Definitions ------- */
 
@@ -47,8 +49,8 @@
 
 /**/
 
-void grl_tracker_media_dbus_start_watch (void);
+void grl_tracker_source_dbus_start_watch (void);
 
-void grl_tracker_media_init_notifs (void);
+void grl_tracker_source_init_notifs (void);
 
-#endif /* _GRL_TRACKER_MEDIA_NOTIF_H_ */
+#endif /* _GRL_TRACKER_SOURCE_NOTIF_H_ */
diff --git a/src/media/tracker/grl-tracker-media-priv.h b/src/media/tracker/grl-tracker-source-priv.h
similarity index 62%
rename from src/media/tracker/grl-tracker-media-priv.h
rename to src/media/tracker/grl-tracker-source-priv.h
index aa8c46a..2af7ef9 100644
--- a/src/media/tracker/grl-tracker-media-priv.h
+++ b/src/media/tracker/grl-tracker-source-priv.h
@@ -1,10 +1,11 @@
 /*
- * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2011-2012 Igalia S.L.
  * Copyright (C) 2011 Intel Corporation.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
  *
  * Authors: Lionel Landwerlin <lionel g landwerlin linux intel com>
+ *          Juan A. Suarez Romero <jasuarez igalia com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -23,19 +24,19 @@
  *
  */
 
-#ifndef _GRL_TRACKER_MEDIA_PRIV_H_
-#define _GRL_TRACKER_MEDIA_PRIV_H_
+#ifndef _GRL_TRACKER_SOURCE_PRIV_H_
+#define _GRL_TRACKER_SOURCE_PRIV_H_
 
-#include "grl-tracker-media.h"
-#include "grl-tracker-media-cache.h"
+#include "grl-tracker-source.h"
+#include "grl-tracker-source-cache.h"
 
 #include <tracker-sparql.h>
 
-/* ---- MediaSource information ---- */
+/* ---- Source information ---- */
 
-#define GRL_TRACKER_MEDIA_ID   "grl-tracker-media"
-#define GRL_TRACKER_MEDIA_NAME "Tracker"
-#define GRL_TRACKER_MEDIA_DESC                  \
+#define GRL_TRACKER_SOURCE_ID   "grl-tracker-source"
+#define GRL_TRACKER_SOURCE_NAME "Tracker"
+#define GRL_TRACKER_SOURCE_DESC                 \
   "A plugin for searching multimedia "          \
   "content using Tracker"
 
@@ -45,19 +46,19 @@
 
 /**/
 
-#define GRL_TRACKER_MEDIA_GET_PRIVATE(object)		\
-  (G_TYPE_INSTANCE_GET_PRIVATE((object),                \
-                               GRL_TRACKER_MEDIA_TYPE,	\
-                               GrlTrackerMediaPriv))
+#define GRL_TRACKER_SOURCE_GET_PRIVATE(object)           \
+  (G_TYPE_INSTANCE_GET_PRIVATE((object),                 \
+                               GRL_TRACKER_SOURCE_TYPE,	\
+                               GrlTrackerSourcePriv))
 
 typedef enum {
-  GRL_TRACKER_MEDIA_STATE_INSERTING,
-  GRL_TRACKER_MEDIA_STATE_RUNNING,
-  GRL_TRACKER_MEDIA_STATE_DELETING,
-  GRL_TRACKER_MEDIA_STATE_DELETED,
-} GrlTrackerMediaState;
+  GRL_TRACKER_SOURCE_STATE_INSERTING,
+  GRL_TRACKER_SOURCE_STATE_RUNNING,
+  GRL_TRACKER_SOURCE_STATE_DELETING,
+  GRL_TRACKER_SOURCE_STATE_DELETED,
+} GrlTrackerSourceState;
 
-struct _GrlTrackerMediaPriv {
+struct _GrlTrackerSourcePriv {
   TrackerSparqlConnection *tracker_connection;
 
   GHashTable *operations;
@@ -65,7 +66,7 @@ struct _GrlTrackerMediaPriv {
   gchar *tracker_datasource;
   gboolean notify_changes;
 
-  GrlTrackerMediaState state;
+  GrlTrackerSourceState state;
   guint notification_ref;
 };
 
@@ -75,7 +76,7 @@ extern GrlPlugin *grl_tracker_plugin;
 
 /* shared data across  */
 extern GrlTrackerCache *grl_tracker_item_cache;
-extern GHashTable *grl_tracker_media_sources_modified;
+extern GHashTable *grl_tracker_source_sources_modified;
 extern gboolean grl_tracker_upnp_present;
 
 /* tracker plugin config */
@@ -83,4 +84,4 @@ extern gboolean grl_tracker_per_device_source;
 extern gboolean grl_tracker_browse_filesystem;
 extern gboolean grl_tracker_show_documents;
 
-#endif /* _GRL_TRACKER_MEDIA_PRIV_H_ */
+#endif /* _GRL_TRACKER_SOURCE_PRIV_H_ */
diff --git a/src/media/tracker/grl-tracker-media.c b/src/media/tracker/grl-tracker-source.c
similarity index 62%
rename from src/media/tracker/grl-tracker-media.c
rename to src/media/tracker/grl-tracker-source.c
index ae5b391..5a7bfe6 100644
--- a/src/media/tracker/grl-tracker-media.c
+++ b/src/media/tracker/grl-tracker-source.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2011-2012 Igalia S.L.
  * Copyright (C) 2011 Intel Corporation.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
@@ -32,17 +32,17 @@
 #include <tracker-sparql.h>
 
 #include "grl-tracker.h"
-#include "grl-tracker-media.h"
-#include "grl-tracker-media-priv.h"
-#include "grl-tracker-media-api.h"
-#include "grl-tracker-media-cache.h"
-#include "grl-tracker-media-notif.h"
+#include "grl-tracker-source.h"
+#include "grl-tracker-source-priv.h"
+#include "grl-tracker-source-api.h"
+#include "grl-tracker-source-cache.h"
+#include "grl-tracker-source-notif.h"
 #include "grl-tracker-utils.h"
 
 /* --------- Logging  -------- */
 
-#define GRL_LOG_DOMAIN_DEFAULT tracker_media_log_domain
-GRL_LOG_DOMAIN_STATIC(tracker_media_log_domain);
+#define GRL_LOG_DOMAIN_DEFAULT tracker_source_log_domain
+GRL_LOG_DOMAIN_STATIC(tracker_source_log_domain);
 
 /* ------- Definitions ------- */
 
@@ -58,57 +58,58 @@ enum {
   PROP_TRACKER_DATASOURCE,
 };
 
-static void grl_tracker_media_set_property (GObject      *object,
+static void grl_tracker_source_set_property (GObject      *object,
                                              guint         propid,
                                              const GValue *value,
                                              GParamSpec   *pspec);
 
-static void grl_tracker_media_finalize (GObject *object);
+static void grl_tracker_source_finalize (GObject *object);
 
 /* ===================== Globals  ================= */
 
 /* shared data across  */
 GrlTrackerCache *grl_tracker_item_cache;
-GHashTable *grl_tracker_media_sources_modified;
-GHashTable *grl_tracker_media_sources;
+GHashTable *grl_tracker_source_sources_modified;
+GHashTable *grl_tracker_source_sources;
 
-/* ================== TrackerMedia GObject ================ */
+/* ================== TrackerSource GObject ================ */
 
-G_DEFINE_TYPE (GrlTrackerMedia, grl_tracker_media, GRL_TYPE_SOURCE);
+G_DEFINE_TYPE (GrlTrackerSource, grl_tracker_source, GRL_TYPE_SOURCE);
 
-static GrlTrackerMedia *
-grl_tracker_media_new (TrackerSparqlConnection *connection)
+static GrlTrackerSource *
+grl_tracker_source_new (TrackerSparqlConnection *connection)
 {
   GRL_DEBUG ("%s", __FUNCTION__);
 
-  return g_object_new (GRL_TRACKER_MEDIA_TYPE,
-                       "source-id", GRL_TRACKER_MEDIA_ID,
-                       "source-name", GRL_TRACKER_MEDIA_NAME,
-                       "source-desc", GRL_TRACKER_MEDIA_DESC,
+  return g_object_new (GRL_TRACKER_SOURCE_TYPE,
+                       "source-id", GRL_TRACKER_SOURCE_ID,
+                       "source-name", GRL_TRACKER_SOURCE_NAME,
+                       "source-desc", GRL_TRACKER_SOURCE_DESC,
                        "tracker-connection", connection,
                        "tracker-datasource", "",
                        NULL);
 }
 
 static void
-grl_tracker_media_class_init (GrlTrackerMediaClass * klass)
+grl_tracker_source_class_init (GrlTrackerSourceClass * klass)
 {
   GObjectClass        *g_class      = G_OBJECT_CLASS (klass);
   GrlSourceClass      *source_class = GRL_SOURCE_CLASS (klass);
 
-  g_class->finalize     = grl_tracker_media_finalize;
-  g_class->set_property = grl_tracker_media_set_property;
+  g_class->finalize     = grl_tracker_source_finalize;
+  g_class->set_property = grl_tracker_source_set_property;
 
-  source_class->cancel              = grl_tracker_media_cancel;
+  source_class->cancel              = grl_tracker_source_cancel;
   source_class->supported_keys      = grl_tracker_supported_keys;
-  source_class->writable_keys       = grl_tracker_media_writable_keys;
-  source_class->store_metadata      = grl_tracker_media_store_metadata;
-  source_class->query               = grl_tracker_media_query;
-  source_class->resolve             = grl_tracker_media_resolve;
-  source_class->search              = grl_tracker_media_search;
-  source_class->browse              = grl_tracker_media_browse;
-  source_class->notify_change_start = grl_tracker_media_change_start;
-  source_class->notify_change_stop  = grl_tracker_media_change_stop;
+  source_class->writable_keys       = grl_tracker_source_writable_keys;
+  source_class->store_metadata      = grl_tracker_source_store_metadata;
+  source_class->query               = grl_tracker_source_query;
+  source_class->resolve             = grl_tracker_source_resolve;
+  source_class->may_resolve         = grl_tracker_source_may_resolve;
+  source_class->search              = grl_tracker_source_search;
+  source_class->browse              = grl_tracker_source_browse;
+  source_class->notify_change_start = grl_tracker_source_change_start;
+  source_class->notify_change_stop  = grl_tracker_source_change_stop;
 
 
   g_object_class_install_property (g_class,
@@ -131,13 +132,13 @@ grl_tracker_media_class_init (GrlTrackerMediaClass * klass)
                                                        | G_PARAM_CONSTRUCT_ONLY
                                                        | G_PARAM_STATIC_NAME));
 
-  g_type_class_add_private (klass, sizeof (GrlTrackerMediaPriv));
+  g_type_class_add_private (klass, sizeof (GrlTrackerSourcePriv));
 }
 
 static void
-grl_tracker_media_init (GrlTrackerMedia *source)
+grl_tracker_source_init (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   source->priv = priv;
 
@@ -145,25 +146,25 @@ grl_tracker_media_init (GrlTrackerMedia *source)
 }
 
 static void
-grl_tracker_media_finalize (GObject *object)
+grl_tracker_source_finalize (GObject *object)
 {
-  GrlTrackerMedia *self;
+  GrlTrackerSource *self;
 
-  self = GRL_TRACKER_MEDIA (object);
+  self = GRL_TRACKER_SOURCE (object);
   if (self->priv->tracker_connection)
     g_object_unref (self->priv->tracker_connection);
 
-  G_OBJECT_CLASS (grl_tracker_media_parent_class)->finalize (object);
+  G_OBJECT_CLASS (grl_tracker_source_parent_class)->finalize (object);
 }
 
 static void
-grl_tracker_media_set_property (GObject      *object,
-                                guint         propid,
-                                const GValue *value,
-                                GParamSpec   *pspec)
+grl_tracker_source_set_property (GObject      *object,
+                                 guint         propid,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
 
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (object);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (object);
 
   switch (propid) {
     case PROP_TRACKER_CONNECTION:
@@ -184,11 +185,11 @@ grl_tracker_media_set_property (GObject      *object,
 }
 
 const gchar *
-grl_tracker_media_get_tracker_source (GrlTrackerMedia *source)
+grl_tracker_source_get_tracker_source (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv;
+  GrlTrackerSourcePriv *priv;
 
-  g_return_val_if_fail (GRL_IS_TRACKER_MEDIA (source), NULL);
+  g_return_val_if_fail (GRL_IS_TRACKER_SOURCE (source), NULL);
 
   priv = source->priv;
 
@@ -196,23 +197,23 @@ grl_tracker_media_get_tracker_source (GrlTrackerMedia *source)
 }
 
 TrackerSparqlConnection *
-grl_tracker_media_get_tracker_connection (GrlTrackerMedia *source)
+grl_tracker_source_get_tracker_connection (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv;
+  GrlTrackerSourcePriv *priv;
 
-  g_return_val_if_fail (GRL_IS_TRACKER_MEDIA (source), NULL);
+  g_return_val_if_fail (GRL_IS_TRACKER_SOURCE (source), NULL);
 
   priv = source->priv;
 
   return priv->tracker_connection;
 }
 
-/* =================== TrackerMedia Plugin  =============== */
+/* =================== TrackerSource Plugin  =============== */
 
 void
-grl_tracker_add_source (GrlTrackerMedia *source)
+grl_tracker_add_source (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   GRL_DEBUG ("====================>add source '%s' count=%u",
              grl_source_get_name (GRL_SOURCE (source)),
@@ -222,12 +223,12 @@ grl_tracker_add_source (GrlTrackerMedia *source)
     priv->notification_ref--;
   }
   if (priv->notification_ref == 0) {
-    g_hash_table_remove (grl_tracker_media_sources_modified,
-                         grl_tracker_media_get_tracker_source (source));
-    g_hash_table_insert (grl_tracker_media_sources,
-                         (gpointer) grl_tracker_media_get_tracker_source (source),
+    g_hash_table_remove (grl_tracker_source_sources_modified,
+                         grl_tracker_source_get_tracker_source (source));
+    g_hash_table_insert (grl_tracker_source_sources,
+                         (gpointer) grl_tracker_source_get_tracker_source (source),
                          source);
-    priv->state = GRL_TRACKER_MEDIA_STATE_RUNNING;
+    priv->state = GRL_TRACKER_SOURCE_STATE_RUNNING;
     grl_plugin_registry_register_source (grl_plugin_registry_get_default (),
                                          grl_tracker_plugin,
                                          GRL_SOURCE (source),
@@ -236,9 +237,9 @@ grl_tracker_add_source (GrlTrackerMedia *source)
 }
 
 void
-grl_tracker_del_source (GrlTrackerMedia *source)
+grl_tracker_del_source (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
   GRL_DEBUG ("==================>del source '%s' count=%u",
              grl_source_get_name (GRL_SOURCE (source)),
@@ -247,12 +248,12 @@ grl_tracker_del_source (GrlTrackerMedia *source)
     priv->notification_ref--;
   }
   if (priv->notification_ref == 0) {
-    g_hash_table_remove (grl_tracker_media_sources_modified,
-                         grl_tracker_media_get_tracker_source (source));
-    g_hash_table_remove (grl_tracker_media_sources,
-                         grl_tracker_media_get_tracker_source (source));
-    grl_tracker_media_cache_del_source (grl_tracker_item_cache, source);
-    priv->state = GRL_TRACKER_MEDIA_STATE_DELETED;
+    g_hash_table_remove (grl_tracker_source_sources_modified,
+                         grl_tracker_source_get_tracker_source (source));
+    g_hash_table_remove (grl_tracker_source_sources,
+                         grl_tracker_source_get_tracker_source (source));
+    grl_tracker_source_cache_del_source (grl_tracker_item_cache, source);
+    priv->state = GRL_TRACKER_SOURCE_STATE_DELETED;
     grl_plugin_registry_unregister_source (grl_plugin_registry_get_default (),
                                            GRL_SOURCE (source),
                                            NULL);
@@ -260,29 +261,29 @@ grl_tracker_del_source (GrlTrackerMedia *source)
 }
 
 gboolean
-grl_tracker_media_can_notify (GrlTrackerMedia *source)
+grl_tracker_source_can_notify (GrlTrackerSource *source)
 {
-  GrlTrackerMediaPriv *priv = GRL_TRACKER_MEDIA_GET_PRIVATE (source);
+  GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
 
-  if (priv->state == GRL_TRACKER_MEDIA_STATE_RUNNING)
+  if (priv->state == GRL_TRACKER_SOURCE_STATE_RUNNING)
     return priv->notify_changes;
 
   return FALSE;
 }
 
-GrlTrackerMedia *
-grl_tracker_media_find (const gchar *id)
+GrlTrackerSource *
+grl_tracker_source_find (const gchar *id)
 {
-  GrlTrackerMedia *source;
+  GrlTrackerSource *source;
 
-  source = g_hash_table_lookup (grl_tracker_media_sources, id);
+  source = g_hash_table_lookup (grl_tracker_source_sources, id);
 
   if (source)
-    return (GrlTrackerMedia *) source;
+    return (GrlTrackerSource *) source;
 
   return
-    (GrlTrackerMedia *) g_hash_table_lookup (grl_tracker_media_sources_modified,
-                                             id);
+    (GrlTrackerSource *) g_hash_table_lookup (grl_tracker_source_sources_modified,
+                                              id);
 }
 
 static gboolean
@@ -299,19 +300,19 @@ match_plugin_id (gpointer key,
 }
 
 /* Search for registered plugin with @id */
-GrlTrackerMedia *
-grl_tracker_media_find_source (const gchar *id)
+GrlTrackerSource *
+grl_tracker_source_find_source (const gchar *id)
 {
-  GrlTrackerMedia *source;
+  GrlTrackerSource *source;
 
-  source = g_hash_table_find (grl_tracker_media_sources,
+  source = g_hash_table_find (grl_tracker_source_sources,
                               match_plugin_id,
                               (gpointer) id);
   if (source) {
     return source;
   }
 
-  return g_hash_table_find (grl_tracker_media_sources_modified,
+  return g_hash_table_find (grl_tracker_source_sources_modified,
                             match_plugin_id,
                             (gpointer) id);
 }
@@ -324,7 +325,7 @@ tracker_get_datasource_cb (GObject             *object,
   const gchar *type, *datasource, *datasource_name, *uri;
   gboolean source_available = FALSE;
   GError *error = NULL;
-  GrlTrackerMedia *source;
+  GrlTrackerSource *source;
 
   GRL_DEBUG ("%s", __FUNCTION__);
 
@@ -346,18 +347,18 @@ tracker_get_datasource_cb (GObject             *object,
   if (tracker_sparql_cursor_is_bound (cursor, 4))
     source_available = tracker_sparql_cursor_get_boolean (cursor, 4);
 
-  source = grl_tracker_media_find (datasource);
+  source = grl_tracker_source_find (datasource);
 
   if ((source == NULL) && source_available) {
-    gchar *source_name = grl_tracker_get_media_name (type, uri, datasource,
-                                                     datasource_name);
+    gchar *source_name = grl_tracker_get_source_name (type, uri, datasource,
+                                                      datasource_name);
     if (source_name) {
       GRL_DEBUG ("\tnew datasource: urn=%s name=%s uri=%s => name=%s\n",
                  datasource, datasource_name, uri, source_name);
-      source = g_object_new (GRL_TRACKER_MEDIA_TYPE,
+      source = g_object_new (GRL_TRACKER_SOURCE_TYPE,
                              "source-id", datasource,
                              "source-name", source_name,
-                             "source-desc", GRL_TRACKER_MEDIA_DESC,
+                             "source-desc", GRL_TRACKER_SOURCE_DESC,
                              "tracker-connection", grl_tracker_connection,
                              "tracker-datasource", datasource,
                              NULL);
@@ -396,22 +397,22 @@ tracker_get_datasources_cb (GObject      *object,
 }
 
 void
-grl_tracker_media_sources_init (void)
+grl_tracker_source_sources_init (void)
 {
 
-  GRL_LOG_DOMAIN_INIT (tracker_media_log_domain, "tracker-media");
+  GRL_LOG_DOMAIN_INIT (tracker_source_log_domain, "tracker-source");
 
   GRL_DEBUG ("%s", __FUNCTION__);
 
   grl_tracker_item_cache =
-    grl_tracker_media_cache_new (TRACKER_ITEM_CACHE_SIZE);
-  grl_tracker_media_sources = g_hash_table_new (g_str_hash, g_str_equal);
-  grl_tracker_media_sources_modified = g_hash_table_new (g_str_hash,
-                                                         g_str_equal);
+    grl_tracker_source_cache_new (TRACKER_ITEM_CACHE_SIZE);
+  grl_tracker_source_sources = g_hash_table_new (g_str_hash, g_str_equal);
+  grl_tracker_source_sources_modified = g_hash_table_new (g_str_hash,
+                                                          g_str_equal);
 
 
   if (grl_tracker_connection != NULL) {
-    grl_tracker_media_dbus_start_watch ();
+    grl_tracker_source_dbus_start_watch ();
 
     if (grl_tracker_per_device_source == TRUE) {
       /* Let's discover available data sources. */
@@ -425,7 +426,7 @@ grl_tracker_media_sources_init (void)
                                              NULL);
     } else {
       /* One source to rule them all. */
-      grl_tracker_add_source (grl_tracker_media_new (grl_tracker_connection));
+      grl_tracker_add_source (grl_tracker_source_new (grl_tracker_connection));
     }
   }
 }
diff --git a/src/media/tracker/grl-tracker-source.h b/src/media/tracker/grl-tracker-source.h
new file mode 100644
index 0000000..a615726
--- /dev/null
+++ b/src/media/tracker/grl-tracker-source.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2011-2012 Igalia S.L.
+ *
+ * Contact: Iago Toral Quiroga <itoral igalia com>
+ *
+ * Authors: Juan A. Suarez Romero <jasuarez igalia com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef _GRL_TRACKER_SOURCE_H_
+#define _GRL_TRACKER_SOURCE_H_
+
+#include <grilo.h>
+#include <tracker-sparql.h>
+
+#define GRL_TRACKER_SOURCE_TYPE                 \
+  (grl_tracker_source_get_type ())
+
+#define GRL_TRACKER_SOURCE(obj)                         \
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj),                   \
+                               GRL_TRACKER_SOURCE_TYPE, \
+                               GrlTrackerSource))
+
+#define GRL_IS_TRACKER_SOURCE(obj)                      \
+  (G_TYPE_CHECK_INSTANCE_TYPE ((obj),                   \
+                               GRL_TRACKER_SOURCE_TYPE))
+
+#define GRL_TRACKER_SOURCE_CLASS(klass)                 \
+  (G_TYPE_CHECK_CLASS_CAST((klass),                     \
+                           GRL_TRACKER_SOURCE_TYPE,     \
+                           GrlTrackerSourceClass))
+
+#define GRL_IS_TRACKER_SOURCE_CLASS(klass)              \
+  (G_TYPE_CHECK_CLASS_TYPE((klass),                     \
+                           GRL_TRACKER_SOURCE_TYPE))
+
+#define GRL_TRACKER_SOURCE_GET_CLASS(obj)               \
+  (G_TYPE_INSTANCE_GET_CLASS ((obj),                    \
+                              GRL_TRACKER_SOURCE_TYPE,  \
+                              GrlTrackerSourceClass))
+
+typedef struct _GrlTrackerSource GrlTrackerSource;
+typedef struct _GrlTrackerSourcePriv GrlTrackerSourcePriv;
+
+struct _GrlTrackerSource {
+
+  GrlSource parent;
+
+  /*< private >*/
+  GrlTrackerSourcePriv *priv;
+
+};
+
+typedef struct _GrlTrackerSourceClass GrlTrackerSourceClass;
+
+struct _GrlTrackerSourceClass {
+
+  GrlSourceClass parent_class;
+
+};
+
+GType grl_tracker_source_get_type (void);
+
+gboolean grl_tracker_source_can_notify (GrlTrackerSource *source);
+
+const gchar *grl_tracker_source_get_tracker_source (GrlTrackerSource *source);
+
+TrackerSparqlConnection *grl_tracker_source_get_tracker_connection (GrlTrackerSource *source);
+
+/**/
+
+void grl_tracker_source_sources_init (void);
+
+void grl_tracker_add_source (GrlTrackerSource *source);
+
+void grl_tracker_del_source (GrlTrackerSource *source);
+
+GrlTrackerSource *grl_tracker_source_find (const gchar *id);
+
+GrlTrackerSource *grl_tracker_source_find_source (const gchar *id);
+
+#endif /* _GRL_TRACKER_SOURCE_H_ */
diff --git a/src/media/tracker/grl-tracker-utils.c b/src/media/tracker/grl-tracker-utils.c
index 76bf021..8030d8f 100644
--- a/src/media/tracker/grl-tracker-utils.c
+++ b/src/media/tracker/grl-tracker-utils.c
@@ -351,7 +351,7 @@ grl_tracker_key_is_supported (const GrlKeyID key)
 /**/
 
 gchar *
-grl_tracker_media_get_device_constraint (GrlTrackerMediaPriv *priv)
+grl_tracker_source_get_device_constraint (GrlTrackerSourcePriv *priv)
 {
   if (priv->tracker_datasource == NULL ||
       priv->tracker_datasource[0] == '\0')
@@ -362,7 +362,7 @@ grl_tracker_media_get_device_constraint (GrlTrackerMediaPriv *priv)
 }
 
 gchar *
-grl_tracker_media_get_select_string (const GList *keys)
+grl_tracker_source_get_select_string (const GList *keys)
 {
   const GList *key = keys;
   GString *gstr = g_string_new ("");
@@ -627,10 +627,10 @@ get_tracker_upnp_name (const gchar *datasource_name)
 }
 
 gchar *
-grl_tracker_get_media_name (const gchar *rdf_type,
-                            const gchar *uri,
-                            const gchar *datasource,
-                            const gchar *datasource_name)
+grl_tracker_get_source_name (const gchar *rdf_type,
+                             const gchar *uri,
+                             const gchar *datasource,
+                             const gchar *datasource_name)
 {
   gchar *source_name = NULL;
   gchar **rdf_single_type;
@@ -667,15 +667,3 @@ grl_tracker_supported_keys (GrlSource *source)
 
   return supported_keys;
 }
-
-GrlCaps *
-grl_tracker_get_caps (GrlSource *source,
-                      GrlSupportedOps operation)
-{
-  static GrlCaps *caps = NULL;
-
-  if (caps == NULL)
-    caps = grl_caps_new ();
-
-  return caps;
-}
diff --git a/src/media/tracker/grl-tracker-utils.h b/src/media/tracker/grl-tracker-utils.h
index 14862ca..797d7e2 100644
--- a/src/media/tracker/grl-tracker-utils.h
+++ b/src/media/tracker/grl-tracker-utils.h
@@ -26,7 +26,7 @@
 #ifndef _GRL_TRACKER_UTILS_H_
 #define _GRL_TRACKER_UTILS_H_
 
-#include "grl-tracker-media-priv.h"
+#include "grl-tracker-source-priv.h"
 
 /* ------- Definitions ------- */
 
@@ -64,9 +64,6 @@ extern GrlKeyID grl_metadata_key_tracker_urn;
 
 const GList *grl_tracker_supported_keys (GrlSource *source);
 
-GrlCaps * grl_tracker_get_caps (GrlSource *source,
-                                GrlSupportedOps operation);
-
 gboolean grl_tracker_key_is_supported (const GrlKeyID key);
 
 void grl_tracker_setup_key_mappings (void);
@@ -75,9 +72,9 @@ tracker_grl_sparql_t *grl_tracker_get_mapping_from_sparql (const gchar *key);
 
 GrlMedia *grl_tracker_build_grilo_media (const gchar *rdf_type);
 
-gchar *grl_tracker_media_get_device_constraint (GrlTrackerMediaPriv *priv);
+gchar *grl_tracker_source_get_device_constraint (GrlTrackerSourcePriv *priv);
 
-gchar *grl_tracker_media_get_select_string (const GList *keys);
+gchar *grl_tracker_source_get_select_string (const GList *keys);
 
 gchar *grl_tracker_tracker_get_insert_string (GrlMedia *media,
                                               const GList *keys);
@@ -87,9 +84,9 @@ gchar *grl_tracker_get_delete_string (const GList *keys);
 gchar *grl_tracker_get_delete_conditional_string (const gchar *urn,
                                                   const GList *keys);
 
-gchar *grl_tracker_get_media_name (const gchar *rdf_type,
-                                   const gchar *uri,
-                                   const gchar *datasource,
-                                   const gchar *datasource_name);
+gchar *grl_tracker_get_source_name (const gchar *rdf_type,
+                                    const gchar *uri,
+                                    const gchar *datasource,
+                                    const gchar *datasource_name);
 
 #endif /* _GRL_TRACKER_UTILS_H_ */
diff --git a/src/media/tracker/grl-tracker.c b/src/media/tracker/grl-tracker.c
index 69d8621..3e0293a 100644
--- a/src/media/tracker/grl-tracker.c
+++ b/src/media/tracker/grl-tracker.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Igalia S.L.
+ * Copyright (C) 2011-2012 Igalia S.L.
  * Copyright (C) 2011 Intel Corporation.
  *
  * Contact: Iago Toral Quiroga <itoral igalia com>
@@ -32,10 +32,9 @@
 #include <tracker-sparql.h>
 
 #include "grl-tracker.h"
-#include "grl-tracker-media.h"
-#include "grl-tracker-media-api.h"
-#include "grl-tracker-media-notif.h"
-#include "grl-tracker-metadata.h"
+#include "grl-tracker-source.h"
+#include "grl-tracker-source-api.h"
+#include "grl-tracker-source-notif.h"
 #include "grl-tracker-request-queue.h"
 #include "grl-tracker-utils.h"
 
@@ -94,10 +93,9 @@ init_sources (void)
   grl_tracker_queue = grl_tracker_queue_new ();
 
   if (grl_tracker_connection != NULL) {
-    grl_tracker_media_dbus_start_watch ();
+    grl_tracker_source_dbus_start_watch ();
 
-    grl_tracker_metadata_source_init ();
-    grl_tracker_media_sources_init ();
+    grl_tracker_source_sources_init ();
   }
 }
 
@@ -189,7 +187,6 @@ tracker_get_connection_cb (GObject      *object,
                            GrlPlugin    *plugin)
 {
   GError *error = NULL;
-  /* GrlTrackerMedia *source; */
 
   GRL_DEBUG ("%s", __FUNCTION__);
 
@@ -219,9 +216,8 @@ grl_tracker_plugin_init (GrlPluginRegistry *registry,
   gint config_count;
 
   GRL_LOG_DOMAIN_INIT (tracker_general_log_domain, "tracker-general");
-  grl_tracker_media_init_notifs ();
-  grl_tracker_media_init_requests ();
-  grl_tracker_metadata_init_requests ();
+  grl_tracker_source_init_notifs ();
+  grl_tracker_source_init_requests ();
 
   grl_tracker_plugin = plugin;
 



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