summaryrefslogtreecommitdiff
path: root/gdata/services/freebase/gdata-freebase-search-query.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdata/services/freebase/gdata-freebase-search-query.c')
-rw-r--r--gdata/services/freebase/gdata-freebase-search-query.c624
1 files changed, 0 insertions, 624 deletions
diff --git a/gdata/services/freebase/gdata-freebase-search-query.c b/gdata/services/freebase/gdata-freebase-search-query.c
deleted file mode 100644
index 3b680e07..00000000
--- a/gdata/services/freebase/gdata-freebase-search-query.c
+++ /dev/null
@@ -1,624 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) 2014 Carlos Garnacho <carlosg@gnome.org>
- *
- * GData Client 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; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GData Client 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 GData Client. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * SECTION:gdata-freebase-search-query
- * @short_description: GData Freebase query object
- * @stability: Stable
- * @include: gdata/services/freebase/gdata-freebase-query.h
- *
- * #GDataFreebaseQuery represents a collection of query parameters specific to the Google Freebase service.
- * a #GDataFreebaseQuery is built on top of a search term, further filters can be set on the search query
- * through gdata_freebase_search_query_add_filter() or gdata_freebase_search_query_add_location(). The filters
- * can be nested in sublevels, created through gdata_freebase_search_query_open_filter()
- * and gdata_freebase_search_query_close_filter().
- *
- * For more details of Google Freebase API, see the <ulink type="http" url="https://developers.google.com/freebase/v1/">
- * online documentation</ulink>.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-
-#include <config.h>
-#include <glib.h>
-#include <glib/gi18n-lib.h>
-#include <string.h>
-#include <json-glib/json-glib.h>
-
-#include "gdata-freebase-search-query.h"
-#include "gdata-query.h"
-#include "gdata-parser.h"
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-
-static void gdata_freebase_search_query_finalize (GObject *self);
-static void gdata_freebase_search_query_set_property (GObject *self, guint prop_id, const GValue *value, GParamSpec *pspec);
-static void gdata_freebase_search_query_get_property (GObject *self, guint prop_id, GValue *value, GParamSpec *pspec);
-static void get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboolean *params_started);
-
-typedef enum {
- NODE_CONTAINER,
- NODE_VALUE,
- NODE_LOCATION
-} FilterNodeType;
-
-typedef union {
- FilterNodeType type;
-
- struct {
- FilterNodeType type;
- GDataFreebaseSearchFilterType filter_type;
- GPtrArray *child_nodes; /* Contains owned FilterNode structs */
- } container;
-
- struct {
- FilterNodeType type;
- gchar *property;
- gchar *value;
- } value;
-
- struct {
- FilterNodeType type;
- guint64 radius;
- gdouble lat;
- gdouble lon;
- } location;
-} FilterNode;
-
-struct _GDataFreebaseSearchQueryPrivate {
- FilterNode *filter;
- GList *filter_stack; /* Contains unowned FilterNode structs */
-
- gchar *lang;
- guint stemmed : 1;
-};
-
-enum {
- PROP_LANGUAGE = 1,
- PROP_STEMMED
-};
-
-G_DEFINE_TYPE_WITH_PRIVATE (GDataFreebaseSearchQuery, gdata_freebase_search_query, GDATA_TYPE_QUERY)
-
-static void
-gdata_freebase_search_query_class_init (GDataFreebaseSearchQueryClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GDataQueryClass *query_class = GDATA_QUERY_CLASS (klass);
-
- gobject_class->finalize = gdata_freebase_search_query_finalize;
- gobject_class->set_property = gdata_freebase_search_query_set_property;
- gobject_class->get_property = gdata_freebase_search_query_get_property;
-
- query_class->get_query_uri = get_query_uri;
-
- /**
- * GDataFreebaseSearchQuery:language:
- *
- * Language used for search results, in ISO-639-1 format.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
- g_object_class_install_property (gobject_class, PROP_LANGUAGE,
- g_param_spec_string ("language",
- "Language used for results",
- "Language in ISO-639-1 format.",
- NULL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_DEPRECATED));
- /**
- * GDataFreebaseSearchQuery:stemmed:
- *
- * Whether word stemming should happen on the search terms. If this property is enabled,
- * words like eg. "natural", "naturally" or "nature" would be all reduced to the root "natur"
- * for search purposes.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
- g_object_class_install_property (gobject_class, PROP_STEMMED,
- g_param_spec_boolean ("stemmed",
- "Stem search terms",
- "Whether the search terms should be stemmed",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
- G_PARAM_DEPRECATED));
-}
-
-static void
-gdata_freebase_search_query_init (GDataFreebaseSearchQuery *self)
-{
- self->priv = gdata_freebase_search_query_get_instance_private (self);
-}
-
-static void
-_free_filter_node (FilterNode *node)
-{
- switch (node->type) {
- case NODE_CONTAINER:
- g_ptr_array_unref (node->container.child_nodes);
- break;
- case NODE_VALUE:
- g_free (node->value.property);
- g_free (node->value.value);
- break;
- case NODE_LOCATION:
- default:
- break;
- }
-
- g_slice_free (FilterNode, node);
-}
-
-static void
-gdata_freebase_search_query_finalize (GObject *self)
-{
- GDataFreebaseSearchQueryPrivate *priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
-
- g_free (priv->lang);
- g_list_free (priv->filter_stack);
-
- if (priv->filter != NULL)
- _free_filter_node (priv->filter);
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (gdata_freebase_search_query_parent_class)->finalize (self);
-}
-
-static void
-gdata_freebase_search_query_set_property (GObject *self, guint prop_id, const GValue *value, GParamSpec *pspec)
-{
- GDataFreebaseSearchQuery *query = GDATA_FREEBASE_SEARCH_QUERY (self);
-
- switch (prop_id) {
- case PROP_LANGUAGE:
- gdata_freebase_search_query_set_language (query, g_value_get_string (value));
- break;
- case PROP_STEMMED:
- gdata_freebase_search_query_set_stemmed (query, g_value_get_boolean (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
- break;
- }
-}
-
-static void
-gdata_freebase_search_query_get_property (GObject *self, guint prop_id, GValue *value, GParamSpec *pspec)
-{
- GDataFreebaseSearchQueryPrivate *priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
-
- switch (prop_id) {
- case PROP_LANGUAGE:
- g_value_set_string (value, priv->lang);
- break;
- case PROP_STEMMED:
- g_value_set_boolean (value, priv->stemmed);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (self, prop_id, pspec);
- break;
- }
-}
-
-static void
-build_filter_string (FilterNode *node,
- GString *str)
-{
- switch (node->type) {
- case NODE_CONTAINER:
- {
- /* Array matches GDataFreebaseSearchFilterType */
- const gchar *type_str[] = { "all", "any", "not" };
- guint i;
-
- g_assert (/* node->container.filter_type >= 0 && */
- node->container.filter_type < G_N_ELEMENTS (type_str));
-
- g_string_append_printf (str, "(%s", type_str[node->container.filter_type]);
-
- for (i = 0; i < node->container.child_nodes->len; i++)
- build_filter_string (g_ptr_array_index (node->container.child_nodes, i), str);
-
- g_string_append (str, ")");
- break;
- }
- case NODE_VALUE:
- {
- gchar *escaped;
-
- escaped = g_strescape (node->value.value, NULL);
- g_string_append_printf (str, " %s:\"%s\"", node->value.property, escaped);
- g_free (escaped);
- break;
- }
- case NODE_LOCATION:
- {
- gchar lon_str[G_ASCII_DTOSTR_BUF_SIZE], lat_str[G_ASCII_DTOSTR_BUF_SIZE];
-
- g_ascii_formatd (lon_str, G_ASCII_DTOSTR_BUF_SIZE, "%.4f", node->location.lon);
- g_ascii_formatd (lat_str, G_ASCII_DTOSTR_BUF_SIZE, "%.4f", node->location.lat);
- g_string_append_printf (str, "(within radius:%" G_GUINT64_FORMAT "m lon:%s lat:%s)",
- node->location.radius, lon_str, lat_str);
- break;
- }
- default:
- g_assert_not_reached ();
- break;
- }
-}
-
-static void
-get_query_uri (GDataQuery *self, const gchar *feed_uri, GString *query_uri, gboolean *params_started)
-{
- GDataFreebaseSearchQueryPrivate *priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
- const gchar *query, *lang = NULL;
- gint64 updated_max;
- guint cur, limit;
-
-#define APPEND_SEP g_string_append_c (query_uri, (*params_started == FALSE) ? '?' : '&'); *params_started = TRUE;
-
- query = gdata_query_get_q (self);
-
- if (query != NULL) {
- APPEND_SEP;
- g_string_append (query_uri, "query=");
- g_string_append (query_uri, query);
- }
-
- if (priv->filter != NULL) {
- GString *str = g_string_new (NULL);
-
- build_filter_string (priv->filter, str);
-
- APPEND_SEP;
- g_string_append (query_uri, "filter=");
- g_string_append (query_uri, str->str);
- g_string_free (str, TRUE);
- }
-
- updated_max = gdata_query_get_updated_max (self);
-
- if (updated_max != -1) {
- gchar *date_str;
-
- date_str = gdata_parser_int64_to_iso8601 (updated_max);
-
- APPEND_SEP;
- g_string_append (query_uri, "as_of_time=");
- g_string_append (query_uri, date_str);
- g_free (date_str);
- }
-
- if (priv->lang != NULL) {
- lang = priv->lang;
- } else {
- const gchar * const *user_languages;
- GString *lang_str = NULL;
- gint i;
-
- user_languages = g_get_language_names ();
-
- for (i = 0; user_languages[i] != NULL; i++) {
- if (strlen (user_languages[i]) != 2)
- continue;
-
- if (!lang_str)
- lang_str = g_string_new (user_languages[i]);
- else
- g_string_append_printf (lang_str, ",%s", user_languages[i]);
- }
-
- lang = g_string_free (lang_str, FALSE);
- }
-
- APPEND_SEP;
- g_string_append (query_uri, "lang=");
- g_string_append (query_uri, lang);
-
- if (priv->stemmed) {
- APPEND_SEP;
- g_string_append (query_uri, "stemmed=true");
- }
-
- cur = gdata_query_get_start_index (self);
-
- if (cur > 0) {
- APPEND_SEP;
- g_string_append_printf (query_uri, "cursor=%d", cur);
- }
-
- limit = gdata_query_get_max_results (self);
-
- if (limit > 0) {
- APPEND_SEP;
- g_string_append_printf (query_uri, "limit=%d", limit);
- }
-
- /* We don't chain up with parent class get_query_uri because it uses
- * GData protocol parameters and they aren't compatible with newest API family
- */
-#undef APPEND_SEP
-}
-
-/**
- * gdata_freebase_search_query_new:
- * @search_terms: string to search for
- *
- * Creates a new #GDataFreebaseSearchQuery prepared to search for Freebase elements that
- * match the given @search_terms. Further filters on the query can be set through
- * gdata_freebase_search_query_add_filter() or gdata_freebase_search_query_add_location().
- *
- * Return value: (transfer full): a new #GDataFreebaseSearchQuery; unref with g_object_unref()
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-GDataFreebaseSearchQuery *
-gdata_freebase_search_query_new (const gchar *search_terms)
-{
- g_return_val_if_fail (search_terms != NULL, NULL);
- return g_object_new (GDATA_TYPE_FREEBASE_SEARCH_QUERY, "q", search_terms, NULL);
-}
-
-/**
- * gdata_freebase_search_query_open_filter:
- * @self: a #GDataFreebaseSearchQuery
- * @filter_type: filter type
- *
- * Opens a container of filter rules, those are applied according to the behavior specified by @filter_type.
- * Every call to this function must be paired by a call to gdata_freebase_search_query_close_filter().
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_open_filter (GDataFreebaseSearchQuery *self, GDataFreebaseSearchFilterType filter_type)
-{
- GDataFreebaseSearchQueryPrivate *priv;
- FilterNode *current_node, *node;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
-
- priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
-
- node = g_slice_new0 (FilterNode);
- node->type = NODE_CONTAINER;
- node->container.filter_type = filter_type;
- node->container.child_nodes = g_ptr_array_new_with_free_func ((GDestroyNotify) _free_filter_node);
-
- if (priv->filter_stack != NULL) {
- current_node = priv->filter_stack->data;
- g_ptr_array_add (current_node->container.child_nodes, node);
- } else if (priv->filter == NULL) {
- priv->filter = node;
- } else {
- g_assert_not_reached ();
- }
-
- priv->filter_stack = g_list_prepend (priv->filter_stack, node);
-}
-
-/**
- * gdata_freebase_search_query_close_filter:
- * @self: a #GDataFreebaseSearchQuery
- *
- * Closes a filter level.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_close_filter (GDataFreebaseSearchQuery *self)
-{
- GDataFreebaseSearchQueryPrivate *priv;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
-
- priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
-
- if (priv->filter_stack == NULL)
- g_assert_not_reached ();
-
- priv->filter_stack = g_list_delete_link (priv->filter_stack, priv->filter_stack);
-}
-
-/**
- * gdata_freebase_search_query_add_filter:
- * @self: a #GDataFreebaseSearchQuery
- * @property: Freebase property ID
- * @value: match string
- *
- * Adds a property filter to the query. property filters are always nested in
- * containers, opened and closed through gdata_freebase_search_query_open_filter()
- * and gdata_freebase_search_query_close_filter().
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_add_filter (GDataFreebaseSearchQuery *self, const gchar *property, const gchar *value)
-{
- GDataFreebaseSearchQueryPrivate *priv;
- FilterNode *current_node, *node;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
- g_return_if_fail (property != NULL && value != NULL);
-
- priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
-
- if (priv->filter_stack == NULL) {
- g_critical ("A filter container must be opened before through "
- "gdata_freebase_search_query_open_filter()");
- g_assert_not_reached ();
- }
-
- node = g_slice_new0 (FilterNode);
- node->type = NODE_VALUE;
- node->value.property = g_strdup (property);
- node->value.value = g_strdup (value);
-
- current_node = priv->filter_stack->data;
- g_ptr_array_add (current_node->container.child_nodes, node);
-}
-
-/**
- * gdata_freebase_search_query_add_location:
- * @self: a #GDataFreebaseSearchQuery
- * @radius: radius in meters
- * @lat: latitude
- * @lon: longitude
- *
- * Adds a geolocation filter to the query. location filters are always nested in
- * containers, opened and closed through gdata_freebase_search_query_open_filter()
- * and gdata_freebase_search_query_close_filter().
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_add_location (GDataFreebaseSearchQuery *self, guint64 radius, gdouble lat, gdouble lon)
-{
- GDataFreebaseSearchQueryPrivate *priv = GDATA_FREEBASE_SEARCH_QUERY (self)->priv;
- FilterNode *current_node, *node;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
-
- if (priv->filter_stack == NULL) {
- g_critical ("A filter container must be opened before through "
- "gdata_freebase_search_query_open_filter()");
- g_assert_not_reached ();
- }
-
- node = g_slice_new0 (FilterNode);
- node->type = NODE_LOCATION;
- node->location.radius = radius;
- node->location.lat = lat;
- node->location.lon = lon;
-
- current_node = priv->filter_stack->data;
- g_ptr_array_add (current_node->container.child_nodes, node);
-}
-
-/**
- * gdata_freebase_search_query_set_language:
- * @self: a #GDataFreebaseSearchQuery
- * @lang: (allow-none): Language used on the search terms and results, in ISO-639-1 format, or %NULL to unset.
- *
- * Sets the language used, both on the search terms and the results. If unset,
- * the locale preferences will be respected.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_set_language (GDataFreebaseSearchQuery *self,
- const gchar *lang)
-{
- GDataFreebaseSearchQueryPrivate *priv;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
- g_return_if_fail (!lang || strlen (lang) == 2);
-
- priv = self->priv;
-
- if (g_strcmp0 (priv->lang, lang) == 0)
- return;
-
- g_free (priv->lang);
- priv->lang = g_strdup (lang);
- g_object_notify (G_OBJECT (self), "language");
-}
-
-/**
- * gdata_freebase_search_query_get_language:
- * @self: a #GDataFreebaseSearchQuery
- *
- * Gets the language set on the search query, or %NULL if unset.
- *
- * Return value: (allow-none): The language used on the query.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-const gchar *
-gdata_freebase_search_query_get_language (GDataFreebaseSearchQuery *self)
-{
- GDataFreebaseSearchQueryPrivate *priv;
-
- g_return_val_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self), NULL);
-
- priv = self->priv;
- return priv->lang;
-}
-
-/**
- * gdata_freebase_search_query_set_stemmed:
- * @self: a #GDataFreebaseSearchQuery
- * @stemmed: %TRUE to perform stemming on the search results
- *
- * Sets whether stemming is performed on the provided search terms. If @stemmed is %TRUE,
- * words like eg. "natural", "naturally" or "nature" would be all reduced to the root "natur"
- * for search purposes.
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-void
-gdata_freebase_search_query_set_stemmed (GDataFreebaseSearchQuery *self,
- gboolean stemmed)
-{
- GDataFreebaseSearchQueryPrivate *priv;
-
- g_return_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self));
-
- priv = self->priv;
-
- if (priv->stemmed == stemmed)
- return;
-
- priv->stemmed = stemmed;
- g_object_notify (G_OBJECT (self), "stemmed");
-}
-
-/**
- * gdata_freebase_search_query_get_stemmed:
- * @self: a #GDataFreebaseSearchQuery
- *
- * Returns whether the #GDataFreebaseSearchQuery will perform stemming on the search terms.
- *
- * Return value: %TRUE if the #GDataFreebaseSearchQuery performs stemming
- *
- * Since: 0.15.1
- * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
- */
-gboolean
-gdata_freebase_search_query_get_stemmed (GDataFreebaseSearchQuery *self)
-{
- GDataFreebaseSearchQueryPrivate *priv;
-
- g_return_val_if_fail (GDATA_IS_FREEBASE_SEARCH_QUERY (self), FALSE);
-
- priv = self->priv;
- return priv->stemmed;
-}
-
-G_GNUC_END_IGNORE_DEPRECATIONS