[PATCH 7/7] tracker: add browse support
- From: llandwerlin gmail com
- To: grilo-list gnome org
- Subject: [PATCH 7/7] tracker: add browse support
- Date: Tue, 18 Jan 2011 18:32:01 +0000
From: Lionel Landwerlin <lionel g landwerlin linux intel com>
Signed-off-by: Lionel Landwerlin <lionel g landwerlin linux intel com>
---
src/tracker/grl-tracker.c | 74 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 73 insertions(+), 1 deletions(-)
diff --git a/src/tracker/grl-tracker.c b/src/tracker/grl-tracker.c
index 7ba92a9..b733535 100644
--- a/src/tracker/grl-tracker.c
+++ b/src/tracker/grl-tracker.c
@@ -80,6 +80,15 @@ enum {
ORDER BY DESC(nfo:fileLastModified(?urn)) \
OFFSET %i LIMIT %i"
+#define TRACKER_BROWSE_CATEGORY_REQUEST " \
+ SELECT rdf:type(?urn) %s \
+ WHERE { \
+ ?urn a %s . \
+ ?urn tracker:available ?tr . \
+ } \
+ ORDER BY DESC(nfo:fileLastModified(?urn)) \
+ OFFSET %i LIMIT %i"
+
#define TRACKER_METADATA_REQUEST " \
SELECT %s \
WHERE { \
@@ -146,6 +155,9 @@ static void grl_tracker_source_metadata (GrlMediaSource *source,
static void grl_tracker_source_search (GrlMediaSource *source,
GrlMediaSourceSearchSpec *ss);
+static void grl_tracker_source_browse (GrlMediaSource *source,
+ GrlMediaSourceBrowseSpec *bs);
+
static void setup_key_mappings (void);
/* ===================== Globals ================= */
@@ -221,6 +233,7 @@ grl_tracker_source_class_init (GrlTrackerSourceClass * klass)
source_class->query = grl_tracker_source_query;
source_class->metadata = grl_tracker_source_metadata;
source_class->search = grl_tracker_source_search;
+ source_class->browse = grl_tracker_source_browse;
metadata_class->supported_keys = grl_tracker_source_supported_keys;
metadata_class->supported_operations = grl_tracker_source_supported_operations;
@@ -702,7 +715,7 @@ grl_tracker_source_supported_operations (GrlMetadataSource *metadata_source)
GrlTrackerSource *source;
source = GRL_TRACKER_SOURCE (metadata_source);
- caps = GRL_OP_METADATA | GRL_OP_QUERY | GRL_OP_SEARCH;
+ caps = GRL_OP_BROWSE | GRL_OP_METADATA | GRL_OP_QUERY | GRL_OP_SEARCH;
return caps;
}
@@ -888,3 +901,62 @@ grl_tracker_source_search (GrlMediaSource *source, GrlMediaSourceSearchSpec *ss)
ss->callback (ss->source, ss->search_id, NULL, 0, ss->user_data, error);
g_error_free (error);
}
+
+static void
+grl_tracker_source_browse (GrlMediaSource *source,
+ GrlMediaSourceBrowseSpec *bs)
+{
+ GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
+ gchar *sparql_select;
+ gchar *sparql_final;
+ struct OperationSpec *os;
+ GrlMedia *media;
+
+ GRL_DEBUG ("%s", __FUNCTION__);
+
+ if ((bs->container == NULL || grl_media_get_id (bs->container) == NULL)) {
+ /* Hardcoded categories */
+ media = grl_media_box_new ();
+ grl_media_set_title (media, "Music");
+ grl_media_set_id (media, "nmm:MusicPiece");
+ bs->callback (bs->source, bs->browse_id, media, 2, bs->user_data, NULL);
+
+ media = grl_media_box_new ();
+ grl_media_set_title (media, "Photo");
+ grl_media_set_id (media, "nmm:Photo");
+ bs->callback (bs->source, bs->browse_id, media, 1, bs->user_data, NULL);
+
+ media = grl_media_box_new ();
+ grl_media_set_title (media, "Video");
+ grl_media_set_id (media, "nmm:Video");
+ bs->callback (bs->source, bs->browse_id, media, 0, bs->user_data, NULL);
+ return;
+ }
+
+ sparql_select = get_select_string (bs->source, bs->keys);
+ sparql_final = g_strdup_printf (TRACKER_BROWSE_CATEGORY_REQUEST,
+ sparql_select,
+ grl_media_get_id (bs->container),
+ bs->skip, bs->count);
+
+ GRL_DEBUG ("select: '%s'", sparql_final);
+
+ os = g_slice_new0 (struct OperationSpec);
+ os->source = bs->source;
+ os->priv = priv;
+ os->operation_id = bs->browse_id;
+ os->keys = bs->keys;
+ os->skip = bs->skip;
+ os->count = bs->count;
+ os->callback = bs->callback;
+ os->user_data = bs->user_data;
+
+ tracker_sparql_connection_query_async (priv->tracker_connection,
+ sparql_final,
+ NULL,
+ (GAsyncReadyCallback) tracker_query_cb,
+ os);
+
+ g_free (sparql_select);
+ g_free (sparql_final);
+}
--
1.7.2.3
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]