[gnome-photos] base-manager: Add a get_filter method
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] base-manager: Add a get_filter method
- Date: Sat, 5 May 2012 20:22:30 +0000 (UTC)
commit 376acd5eb99ff5359c4935f723471732cd4f733c
Author: Debarshi Ray <debarshir gnome org>
Date: Sat May 5 21:42:42 2012 +0200
base-manager: Add a get_filter method
src/photos-base-manager.c | 65 ++++++++++++++++++++++++++++++++++++++++++++
src/photos-base-manager.h | 2 +
src/photos-query-builder.c | 31 +++++++++++++++++++++
3 files changed, 98 insertions(+), 0 deletions(-)
---
diff --git a/src/photos-base-manager.c b/src/photos-base-manager.c
index cc52b7a..8397917 100644
--- a/src/photos-base-manager.c
+++ b/src/photos-base-manager.c
@@ -24,6 +24,7 @@
#include <glib.h>
#include "photos-base-manager.h"
+#include "photos-filterable.h"
struct _PhotosBaseManagerPrivate
@@ -66,6 +67,46 @@ photos_base_manager_default_set_active_object (PhotosBaseManager *self, GObject
}
+static gchar *
+photos_base_manager_get_all_filter (PhotosBaseManager *self)
+{
+ GList *l;
+ GList *values;
+ gchar *filter;
+ gchar **strv;
+ gchar *tmp;
+ guint i;
+ guint length;
+
+ values = g_hash_table_get_values (self->priv->objects);
+ length = g_list_length (values);
+ strv = (gchar **) g_malloc0_n (length + 1, sizeof (gchar *));
+
+ for (i = 0, l = values; l != NULL; l = l->next)
+ {
+ gchar *id;
+
+ g_object_get (l->data, "id", &id, NULL);
+ if (g_strcmp0 (id, "all") != 0)
+ {
+ strv[i] = photos_filterable_get_filter (PHOTOS_FILTERABLE (l->data));
+ i++;
+ }
+ g_free (id);
+ }
+
+ filter = g_strjoinv (" || ", strv);
+ g_strfreev (strv);
+
+ tmp = filter;
+ filter = g_strconcat ("(", filter, ")", NULL);
+ g_free (tmp);
+
+ g_list_free (values);
+ return filter;
+}
+
+
static void
photos_base_manager_dispose (GObject *object)
{
@@ -174,6 +215,30 @@ photos_base_manager_get_active_object (PhotosBaseManager *self)
}
+gchar *
+photos_base_manager_get_filter (PhotosBaseManager *self)
+{
+ PhotosBaseManagerPrivate *priv = self->priv;
+ const gchar *blank = "(true)";
+ gchar *filter;
+ gchar *id;
+
+ if (priv->active_object == NULL)
+ return g_strdup (blank);
+
+ g_return_val_if_fail (PHOTOS_IS_FILTERABLE (priv->active_object), g_strdup (blank));
+
+ g_object_get (self, "id", &id, NULL);
+ if (g_strcmp0 (id, "all") == 0)
+ filter = photos_base_manager_get_all_filter (self);
+ else
+ filter = photos_filterable_get_filter (PHOTOS_FILTERABLE (priv->active_object));
+
+ g_free (id);
+ return filter;
+}
+
+
GObject *
photos_base_manager_get_object_by_id (PhotosBaseManager *self, const gchar *id)
{
diff --git a/src/photos-base-manager.h b/src/photos-base-manager.h
index 4348f13..7bda012 100644
--- a/src/photos-base-manager.h
+++ b/src/photos-base-manager.h
@@ -78,6 +78,8 @@ void photos_base_manager_clear (PhotosBaseMana
GObject *photos_base_manager_get_active_object (PhotosBaseManager *self);
+gchar *photos_base_manager_get_filter (PhotosBaseManager *self);
+
GObject *photos_base_manager_get_object_by_id (PhotosBaseManager *self, const gchar *id);
GHashTable *photos_base_manager_get_objects (PhotosBaseManager *self);
diff --git a/src/photos-query-builder.c b/src/photos-query-builder.c
index 9562584..24bb4a7 100644
--- a/src/photos-query-builder.c
+++ b/src/photos-query-builder.c
@@ -25,6 +25,7 @@
#include "photos-offset-controller.h"
#include "photos-query-builder.h"
+#include "photos-source-manager.h"
static gchar *
@@ -45,6 +46,25 @@ photos_query_builder_convert_path_to_uri (const gchar *path)
static gchar *
+photos_query_builder_filter (void)
+{
+ PhotosBaseManager *src_mngr;
+ gchar *sparql;
+ gchar *src_mngr_filter;
+
+ src_mngr = photos_source_manager_new ();
+ src_mngr_filter = photos_base_manager_get_filter (src_mngr);
+
+ sparql = g_strdup_printf ("FILTER (%s)", src_mngr_filter);
+
+ g_free (src_mngr_filter);
+ g_object_unref (src_mngr);
+
+ return sparql;
+}
+
+
+static gchar *
photos_query_builder_optional (void)
{
return g_strdup ("OPTIONAL { ?urn nco:creator ?creater . } "
@@ -55,6 +75,7 @@ photos_query_builder_optional (void)
static gchar *
photos_query_builder_query (gboolean global, gint flags)
{
+ gchar *filter;
gchar *global_sparql;
gchar *optional;
gchar *sparql;
@@ -71,6 +92,11 @@ photos_query_builder_query (gboolean global, gint flags)
if (!(flags & PHOTOS_QUERY_FLAGS_UNFILTERED))
{
+ filter = photos_query_builder_filter ();
+ tmp = global_sparql;
+ global_sparql = g_strconcat (global_sparql, filter, NULL);
+ g_free (tmp);
+ g_free (filter);
}
offset_cntrlr = photos_offset_controller_new ();
@@ -89,6 +115,11 @@ photos_query_builder_query (gboolean global, gint flags)
{
if (!(flags & PHOTOS_QUERY_FLAGS_UNFILTERED))
{
+ filter = photos_query_builder_filter ();
+ tmp = global_sparql;
+ global_sparql = g_strconcat (global_sparql, filter, NULL);
+ g_free (tmp);
+ g_free (filter);
}
tmp = global_sparql;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]