Blame gdata/services/freebase/gdata-freebase-topic-result.c

Packit 4b6dd7
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit 4b6dd7
/*
Packit 4b6dd7
 * GData Client
Packit 4b6dd7
 * Copyright (C) 2014 Carlos Garnacho <carlosg@gnome.org>
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is free software; you can redistribute it and/or
Packit 4b6dd7
 * modify it under the terms of the GNU Lesser General Public
Packit 4b6dd7
 * License as published by the Free Software Foundation; either
Packit 4b6dd7
 * version 2.1 of the License, or (at your option) any later version.
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is distributed in the hope that it will be useful,
Packit 4b6dd7
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 4b6dd7
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 4b6dd7
 * Lesser General Public License for more details.
Packit 4b6dd7
 *
Packit 4b6dd7
 * You should have received a copy of the GNU Lesser General Public
Packit 4b6dd7
 * License along with GData Client.  If not, see <http://www.gnu.org/licenses/>.
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * SECTION:gdata-freebase-topic-result
Packit 4b6dd7
 * @short_description: GData Freebase topic result object
Packit 4b6dd7
 * @stability: Stable
Packit 4b6dd7
 * @include: gdata/services/freebase/gdata-freebase-topic-result.h
Packit 4b6dd7
 *
Packit 4b6dd7
 * #GDataFreebaseTopicResult is a subclass of #GDataFreebaseResult that contains all or a subset of the information
Packit 4b6dd7
 * contained in Freebase about the Freebase ID given to the #GDataFreebaseTopicQuery.
Packit 4b6dd7
 *
Packit 4b6dd7
 * For more details of Google Freebase API, see the <ulink type="http" url="https://developers.google.com/freebase/v1/">
Packit 4b6dd7
 * online documentation</ulink>.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
typedef struct _GDataFreebaseTopicValueArray GDataFreebaseTopicValueArray;
Packit 4b6dd7
Packit 4b6dd7
#include <config.h>
Packit 4b6dd7
#include <glib.h>
Packit 4b6dd7
#include <glib/gi18n-lib.h>
Packit 4b6dd7
#include <string.h>
Packit 4b6dd7
Packit 4b6dd7
#include "gdata-freebase-topic-result.h"
Packit 4b6dd7
#include "gdata-download-stream.h"
Packit 4b6dd7
#include "gdata-private.h"
Packit 4b6dd7
#include "gdata-types.h"
Packit 4b6dd7
Packit 4b6dd7
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
Packit 4b6dd7
Packit 4b6dd7
typedef enum {
Packit 4b6dd7
	TYPE_NONE,
Packit 4b6dd7
	TYPE_BOOL,
Packit 4b6dd7
	TYPE_INT,
Packit 4b6dd7
	TYPE_DOUBLE,
Packit 4b6dd7
	TYPE_STRING,
Packit 4b6dd7
	TYPE_DATETIME,
Packit 4b6dd7
	TYPE_COMPOUND,
Packit 4b6dd7
	TYPE_OBJECT,
Packit 4b6dd7
	TYPE_KEY,
Packit 4b6dd7
	TYPE_URI
Packit 4b6dd7
} TopicValueType;
Packit 4b6dd7
Packit 4b6dd7
/* Wraps a compound object, either the main object returned by the result, or a
Packit 4b6dd7
 * complex object within the result values (events are at least composed of
Packit 4b6dd7
 * location and time at least, for example).
Packit 4b6dd7
 */
Packit 4b6dd7
struct _GDataFreebaseTopicObject {
Packit 4b6dd7
	gchar *id;
Packit 4b6dd7
	GHashTable *values; /* Hashtable of property->GDataFreebaseTopicValueArray */
Packit 4b6dd7
	volatile gint ref_count;
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
/* Wraps an array of values, single-valued properties will contain an array with a single value here */
Packit 4b6dd7
struct _GDataFreebaseTopicValueArray {
Packit 4b6dd7
	TopicValueType type;
Packit 4b6dd7
	GPtrArray *values;
Packit 4b6dd7
	guint64 hits; /* Total number of hits, as opposed to values->len */
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
/* Wraps a single value in the topic result, may be either simple (numbers, strings, Freebase IDs...),
Packit 4b6dd7
 * or nested compound types (contained by a GDataFreebaseTopicObject, which is what the value would
Packit 4b6dd7
 * contain in that case).
Packit 4b6dd7
 */
Packit 4b6dd7
struct _GDataFreebaseTopicValue {
Packit 4b6dd7
	gchar *property;
Packit 4b6dd7
	gchar *text;
Packit 4b6dd7
	gchar *lang;
Packit 4b6dd7
	gchar *creator;
Packit 4b6dd7
	gint64 timestamp;
Packit 4b6dd7
	GValue value;
Packit 4b6dd7
	volatile gint ref_count;
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
struct _GDataFreebaseTopicResultPrivate {
Packit 4b6dd7
	GDataFreebaseTopicObject *object;
Packit 4b6dd7
};
Packit 4b6dd7
Packit 4b6dd7
static void gdata_freebase_topic_result_finalize (GObject *self);
Packit 4b6dd7
static gboolean parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error);
Packit 4b6dd7
static GDataFreebaseTopicObject *object_new (const gchar *id);
Packit 4b6dd7
static void value_free (GDataFreebaseTopicValue *object);
Packit 4b6dd7
static gboolean reader_get_properties (JsonReader *reader, GDataFreebaseTopicObject *object, GError **error);
Packit 4b6dd7
Packit 4b6dd7
G_DEFINE_BOXED_TYPE (GDataFreebaseTopicObject, gdata_freebase_topic_object, gdata_freebase_topic_object_ref, gdata_freebase_topic_object_unref)
Packit 4b6dd7
G_DEFINE_BOXED_TYPE (GDataFreebaseTopicValue, gdata_freebase_topic_value, gdata_freebase_topic_value_ref, gdata_freebase_topic_value_unref)
Packit 4b6dd7
G_DEFINE_TYPE (GDataFreebaseTopicResult, gdata_freebase_topic_result, GDATA_TYPE_FREEBASE_RESULT)
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_freebase_topic_result_class_init (GDataFreebaseTopicResultClass *klass)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataParsableClass *parsable_class = GDATA_PARSABLE_CLASS (klass);
Packit 4b6dd7
	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit 4b6dd7
Packit 4b6dd7
	g_type_class_add_private (klass, sizeof (GDataFreebaseTopicResultPrivate));
Packit 4b6dd7
Packit 4b6dd7
	gobject_class->finalize = gdata_freebase_topic_result_finalize;
Packit 4b6dd7
	parsable_class->parse_json = parse_json;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_freebase_topic_result_init (GDataFreebaseTopicResult *self)
Packit 4b6dd7
{
Packit 4b6dd7
	self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_FREEBASE_TOPIC_RESULT, GDataFreebaseTopicResultPrivate);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
gdata_freebase_topic_result_finalize (GObject *self)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicResultPrivate *priv = GDATA_FREEBASE_TOPIC_RESULT (self)->priv;
Packit 4b6dd7
Packit 4b6dd7
	gdata_freebase_topic_object_unref (priv->object);
Packit 4b6dd7
Packit 4b6dd7
	G_OBJECT_CLASS (gdata_freebase_topic_result_parent_class)->finalize (self);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static GDataFreebaseTopicValueArray *
Packit 4b6dd7
value_array_new (TopicValueType type, guint64 hits)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
Packit 4b6dd7
	array = g_slice_new0 (GDataFreebaseTopicValueArray);
Packit 4b6dd7
	array->values = g_ptr_array_new_with_free_func ((GDestroyNotify) gdata_freebase_topic_value_unref);
Packit 4b6dd7
	array->type = type;
Packit 4b6dd7
	array->hits = hits;
Packit 4b6dd7
Packit 4b6dd7
	return array;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Takes ownership on @value */
Packit 4b6dd7
static void
Packit 4b6dd7
value_array_add (GDataFreebaseTopicValueArray *array, GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_ptr_array_add (array->values, value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
value_array_free (GDataFreebaseTopicValueArray *array)
Packit 4b6dd7
{
Packit 4b6dd7
	g_ptr_array_unref (array->values);
Packit 4b6dd7
	g_slice_free (GDataFreebaseTopicValueArray, array);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static guint64
Packit 4b6dd7
reader_get_item_count (JsonReader *reader)
Packit 4b6dd7
{
Packit 4b6dd7
	gint64 count;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "count");
Packit 4b6dd7
	count = json_reader_get_int_value (reader);
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	return (guint64) count;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static guint
Packit 4b6dd7
reader_get_value_type (JsonReader *reader, const gchar *property, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	TopicValueType type = TYPE_NONE;
Packit 4b6dd7
	const GError *reader_error;
Packit 4b6dd7
	const gchar *valuestr;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "valuetype");
Packit 4b6dd7
	valuestr = json_reader_get_string_value (reader);
Packit 4b6dd7
Packit 4b6dd7
	reader_error = json_reader_get_error (reader);
Packit 4b6dd7
Packit 4b6dd7
	if (reader_error != NULL) {
Packit 4b6dd7
		if (error != NULL && *error == NULL)
Packit 4b6dd7
			*error = g_error_copy (reader_error);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		if (strcmp (valuestr, "key") == 0)
Packit 4b6dd7
			type = TYPE_KEY;
Packit 4b6dd7
		else if (strcmp (valuestr, "uri") == 0)
Packit 4b6dd7
			type = TYPE_URI;
Packit 4b6dd7
		else if (strcmp (valuestr, "compound") == 0)
Packit 4b6dd7
			type = TYPE_COMPOUND;
Packit 4b6dd7
		else if (strcmp (valuestr, "object") == 0)
Packit 4b6dd7
			type = TYPE_OBJECT;
Packit 4b6dd7
		else if (strcmp (valuestr, "float") == 0)
Packit 4b6dd7
			type = TYPE_DOUBLE;
Packit 4b6dd7
		else if (strcmp (valuestr, "string") == 0)
Packit 4b6dd7
			type = TYPE_STRING;
Packit 4b6dd7
		else if (strcmp (valuestr, "int") == 0)
Packit 4b6dd7
			type = TYPE_INT;
Packit 4b6dd7
		else if (strcmp (valuestr, "bool") == 0)
Packit 4b6dd7
			type = TYPE_BOOL;
Packit 4b6dd7
		else if (strcmp (valuestr, "datetime") == 0)
Packit 4b6dd7
			type = TYPE_DATETIME;
Packit 4b6dd7
		else
Packit 4b6dd7
			gdata_parser_error_required_json_content_missing (reader, error);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
	return type;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
value_free (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	if (G_IS_VALUE (&value->value))
Packit 4b6dd7
		g_value_unset (&value->value);
Packit 4b6dd7
	g_free (value->text);
Packit 4b6dd7
	g_free (value->lang);
Packit 4b6dd7
	g_free (value->creator);
Packit 4b6dd7
	g_free (value->property);
Packit 4b6dd7
	g_slice_free (GDataFreebaseTopicValue, value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Parsing functions to create GDataFreebaseTopicValues, and arrays of those */
Packit 4b6dd7
static gchar *
Packit 4b6dd7
reader_dup_member_string (JsonReader *reader, const gchar *member, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	const GError *reader_error;
Packit 4b6dd7
	gchar *str;
Packit 4b6dd7
Packit 4b6dd7
	if (error != NULL && *error != NULL)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, member);
Packit 4b6dd7
	str = g_strdup (json_reader_get_string_value (reader));
Packit 4b6dd7
	reader_error = json_reader_get_error (reader);
Packit 4b6dd7
Packit 4b6dd7
	if (reader_error != NULL) {
Packit 4b6dd7
		g_free (str);
Packit 4b6dd7
		str = NULL;
Packit 4b6dd7
Packit 4b6dd7
		if (error != NULL)
Packit 4b6dd7
			*error = g_error_copy (reader_error);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	return str;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gint64
Packit 4b6dd7
reader_parse_timestamp (JsonReader *reader, const gchar *member, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	const GError *reader_error;
Packit 4b6dd7
	const gchar *date_str;
Packit 4b6dd7
	gint64 timestamp = -1;
Packit 4b6dd7
Packit 4b6dd7
	if (error != NULL && *error != NULL)
Packit 4b6dd7
		return -1;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, member);
Packit 4b6dd7
	date_str = json_reader_get_string_value (reader);
Packit 4b6dd7
	reader_error = json_reader_get_error (reader);
Packit 4b6dd7
Packit 4b6dd7
	if (reader_error != NULL) {
Packit 4b6dd7
		if (error != NULL)
Packit 4b6dd7
			*error = g_error_copy (reader_error);
Packit 4b6dd7
	} else if (date_str) {
Packit 4b6dd7
		if (!gdata_parser_int64_from_iso8601 (date_str, &timestamp))
Packit 4b6dd7
			timestamp = -1;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	return timestamp;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
reader_fill_simple_gvalue (JsonReader *reader, TopicValueType type, GValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean retval = TRUE;
Packit 4b6dd7
	gint64 datetime;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "value");
Packit 4b6dd7
Packit 4b6dd7
	if (json_reader_get_error (reader) != NULL) {
Packit 4b6dd7
		json_reader_end_member (reader);
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	switch (type) {
Packit 4b6dd7
	case TYPE_BOOL:
Packit 4b6dd7
	case TYPE_INT:
Packit 4b6dd7
	case TYPE_DOUBLE:
Packit 4b6dd7
	case TYPE_STRING:
Packit 4b6dd7
		json_node_get_value (json_reader_get_value (reader), value);
Packit 4b6dd7
		break;
Packit 4b6dd7
	case TYPE_DATETIME:
Packit 4b6dd7
		if (gdata_parser_int64_from_iso8601 (json_reader_get_string_value (reader), &datetime) ||
Packit 4b6dd7
		    gdata_parser_int64_from_date (json_reader_get_string_value (reader), &datetime)) {
Packit 4b6dd7
			g_value_init (value, G_TYPE_INT64);
Packit 4b6dd7
			g_value_set_int64 (value, datetime);
Packit 4b6dd7
		} else {
Packit 4b6dd7
			retval = FALSE;
Packit 4b6dd7
		}
Packit 4b6dd7
Packit 4b6dd7
		break;
Packit 4b6dd7
	case TYPE_NONE:
Packit 4b6dd7
	case TYPE_COMPOUND:
Packit 4b6dd7
	case TYPE_OBJECT:
Packit 4b6dd7
	case TYPE_KEY:
Packit 4b6dd7
	case TYPE_URI:
Packit 4b6dd7
	default:
Packit 4b6dd7
		retval = FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
	return retval;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static GDataFreebaseTopicObject *
Packit 4b6dd7
reader_create_object (JsonReader *reader, TopicValueType type)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicObject *object;
Packit 4b6dd7
Packit 4b6dd7
	if (type != TYPE_OBJECT && type != TYPE_COMPOUND)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "id");
Packit 4b6dd7
Packit 4b6dd7
	if (json_reader_get_error (reader) != NULL) {
Packit 4b6dd7
		json_reader_end_member (reader);
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	object = object_new (json_reader_get_string_value (reader));
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	return object;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
reader_fill_object_gvalue (JsonReader *reader, TopicValueType type, GValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicObject *object;
Packit 4b6dd7
Packit 4b6dd7
	if (type != TYPE_OBJECT)
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
Packit 4b6dd7
	object = reader_create_object (reader, type);
Packit 4b6dd7
Packit 4b6dd7
	if (object != NULL) {
Packit 4b6dd7
		g_value_init (value, GDATA_TYPE_FREEBASE_TOPIC_OBJECT);
Packit 4b6dd7
		g_value_take_boxed (value, object);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	return (object != NULL);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
reader_fill_compound_gvalue (JsonReader *reader, TopicValueType type, GValue *value, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicObject *object;
Packit 4b6dd7
Packit 4b6dd7
	if (type != TYPE_COMPOUND)
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
Packit 4b6dd7
	object = reader_create_object (reader, type);
Packit 4b6dd7
Packit 4b6dd7
	if (object == NULL)
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "property");
Packit 4b6dd7
Packit 4b6dd7
	if (json_reader_get_error (reader) != NULL) {
Packit 4b6dd7
		json_reader_end_member (reader);
Packit 4b6dd7
		gdata_freebase_topic_object_unref (object);
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	reader_get_properties (reader, object, error);
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	g_value_init (value, GDATA_TYPE_FREEBASE_TOPIC_OBJECT);
Packit 4b6dd7
	g_value_take_boxed (value, object);
Packit 4b6dd7
	return TRUE;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static GDataFreebaseTopicValue *
Packit 4b6dd7
reader_create_value (JsonReader *reader, const gchar *property, TopicValueType type, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValue *value;
Packit 4b6dd7
Packit 4b6dd7
	value = g_slice_new0 (GDataFreebaseTopicValue);
Packit 4b6dd7
Packit 4b6dd7
	value->ref_count = 1;
Packit 4b6dd7
	value->property = g_strdup (property);
Packit 4b6dd7
	value->text = reader_dup_member_string (reader, "text", error);
Packit 4b6dd7
	value->lang = reader_dup_member_string (reader, "lang", error);
Packit 4b6dd7
Packit 4b6dd7
	/* Not all parsed nodes are meant to contain creator/timestamp tags,
Packit 4b6dd7
	 * do not pass error to those, so parsing continues.
Packit 4b6dd7
	 */
Packit 4b6dd7
	value->creator = reader_dup_member_string (reader, "creator", NULL);
Packit 4b6dd7
	value->timestamp = reader_parse_timestamp (reader, "timestamp", NULL);
Packit 4b6dd7
Packit 4b6dd7
	if (reader_fill_simple_gvalue (reader, type, &value->value) ||
Packit 4b6dd7
	    reader_fill_object_gvalue (reader, type, &value->value) ||
Packit 4b6dd7
	    reader_fill_compound_gvalue (reader, type, &value->value, error))
Packit 4b6dd7
		return value;
Packit 4b6dd7
Packit 4b6dd7
	value_free (value);
Packit 4b6dd7
	return NULL;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static GDataFreebaseTopicValueArray *
Packit 4b6dd7
reader_create_value_array (JsonReader  *reader, const gchar *property, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
	GDataFreebaseTopicValue *value;
Packit 4b6dd7
	TopicValueType type;
Packit 4b6dd7
	guint64 count, i;
Packit 4b6dd7
Packit 4b6dd7
	count = reader_get_item_count (reader);
Packit 4b6dd7
Packit 4b6dd7
	if (count <= 0)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	type = reader_get_value_type (reader, property, error);
Packit 4b6dd7
Packit 4b6dd7
	if (type == TYPE_NONE || type == TYPE_URI || type == TYPE_KEY)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	array = value_array_new (type, count);
Packit 4b6dd7
Packit 4b6dd7
	json_reader_read_member (reader, "values");
Packit 4b6dd7
	count = json_reader_count_elements (reader);
Packit 4b6dd7
Packit 4b6dd7
	for (i = 0; i < count; i++) {
Packit 4b6dd7
		json_reader_read_element (reader, i);
Packit 4b6dd7
		value = reader_create_value (reader, property, type, error);
Packit 4b6dd7
		json_reader_end_element (reader);
Packit 4b6dd7
Packit 4b6dd7
		if (value != NULL)
Packit 4b6dd7
			value_array_add (array, value);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	json_reader_end_member (reader);
Packit 4b6dd7
Packit 4b6dd7
	return array;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static GDataFreebaseTopicObject *
Packit 4b6dd7
object_new (const gchar *id)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicObject *object;
Packit 4b6dd7
Packit 4b6dd7
	object = g_slice_new0 (GDataFreebaseTopicObject);
Packit 4b6dd7
	object->id = g_strdup (id);
Packit 4b6dd7
	object->ref_count = 1;
Packit 4b6dd7
	object->values = g_hash_table_new_full (g_str_hash, g_str_equal,
Packit 4b6dd7
						(GDestroyNotify) g_free,
Packit 4b6dd7
						(GDestroyNotify) value_array_free);
Packit 4b6dd7
	return object;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Takes ownership on @array */
Packit 4b6dd7
static void
Packit 4b6dd7
object_add_value (GDataFreebaseTopicObject *object, const gchar *property, GDataFreebaseTopicValueArray *array)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_if_fail (object != NULL);
Packit 4b6dd7
	g_return_if_fail (property != NULL);
Packit 4b6dd7
	g_return_if_fail (array != NULL);
Packit 4b6dd7
	g_hash_table_replace (object->values, g_strdup (property), array);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
reader_get_properties (JsonReader *reader, GDataFreebaseTopicObject *object, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
	gboolean retval = TRUE;
Packit 4b6dd7
	gint count, i;
Packit 4b6dd7
Packit 4b6dd7
	count = json_reader_count_members (reader);
Packit 4b6dd7
Packit 4b6dd7
	for (i = 0; i < count; i++) {
Packit 4b6dd7
		GError *inner_error = NULL;
Packit 4b6dd7
		const gchar *name;
Packit 4b6dd7
		gchar *property;
Packit 4b6dd7
Packit 4b6dd7
		json_reader_read_element (reader, i);
Packit 4b6dd7
		property = g_strdup (json_reader_get_member_name (reader));
Packit 4b6dd7
		name = property;
Packit 4b6dd7
Packit 4b6dd7
		/* Reverse properties start with !, display those as
Packit 4b6dd7
		 * regular properties, and skip that char
Packit 4b6dd7
		 */
Packit 4b6dd7
		if (name[0] == '!')
Packit 4b6dd7
			name++;
Packit 4b6dd7
Packit 4b6dd7
		/* All Freebase properties and IDs start with '/' */
Packit 4b6dd7
		if (name[0] != '/')
Packit 4b6dd7
			continue;
Packit 4b6dd7
Packit 4b6dd7
		/* Parse the value for this property, possibly with nested contents */
Packit 4b6dd7
		array = reader_create_value_array (reader, name, &inner_error);
Packit 4b6dd7
		json_reader_end_element (reader);
Packit 4b6dd7
Packit 4b6dd7
		if (inner_error != NULL) {
Packit 4b6dd7
			g_propagate_error (error, inner_error);
Packit 4b6dd7
			retval = FALSE;
Packit 4b6dd7
			break;
Packit 4b6dd7
		} else if (array != NULL) {
Packit 4b6dd7
			/* Takes ownership of array */
Packit 4b6dd7
			object_add_value (object, name, array);
Packit 4b6dd7
		}
Packit 4b6dd7
Packit 4b6dd7
		g_free (property);
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	return retval;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
parse_json (GDataParsable *parsable, JsonReader *reader, gpointer user_data, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicResultPrivate *priv = GDATA_FREEBASE_TOPIC_RESULT (parsable)->priv;
Packit 4b6dd7
	const gchar *member_name;
Packit 4b6dd7
Packit 4b6dd7
	GDATA_PARSABLE_CLASS (gdata_freebase_topic_result_parent_class)->parse_json (parsable, reader, user_data, error);
Packit 4b6dd7
Packit 4b6dd7
	member_name = json_reader_get_member_name (reader);
Packit 4b6dd7
Packit 4b6dd7
	if (member_name == NULL)
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
Packit 4b6dd7
	if (strcmp (member_name, "id") == 0) {
Packit 4b6dd7
		/* We only expect one member containing information */
Packit 4b6dd7
		g_assert (priv->object == NULL);
Packit 4b6dd7
		priv->object = object_new (json_reader_get_string_value (reader));
Packit 4b6dd7
	} else if (strcmp (member_name, "property") == 0) {
Packit 4b6dd7
		reader_get_properties (reader, priv->object, error);
Packit 4b6dd7
	} else {
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	return TRUE;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_result_new:
Packit 4b6dd7
 *
Packit 4b6dd7
 * Creates a new #GDataFreebaseTopicResult with the given ID and default properties.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Return value: (transfer full): a new #GDataFreebaseTopicResult; unref with g_object_unref()
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GDataFreebaseTopicResult *
Packit 4b6dd7
gdata_freebase_topic_result_new (void)
Packit 4b6dd7
{
Packit 4b6dd7
	return g_object_new (GDATA_TYPE_FREEBASE_TOPIC_RESULT, NULL);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_result_dup_object:
Packit 4b6dd7
 * @self: a #GDataFreebaseTopicResult
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a reference to the root #GDataFreebaseTopicObject containing the
Packit 4b6dd7
 * topic query results.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer full): A new reference on the result object, unref with
Packit 4b6dd7
 *   gdata_freebase_topic_object_unref()
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GDataFreebaseTopicObject *
Packit 4b6dd7
gdata_freebase_topic_result_dup_object (GDataFreebaseTopicResult *self)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (GDATA_IS_FREEBASE_TOPIC_RESULT (self), NULL);
Packit 4b6dd7
Packit 4b6dd7
	return gdata_freebase_topic_object_ref (self->priv->object);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_ref:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 *
Packit 4b6dd7
 * Creates and returns a new reference on @object.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer full): @object, with an extra reference.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GDataFreebaseTopicObject *
Packit 4b6dd7
gdata_freebase_topic_object_ref (GDataFreebaseTopicObject *object)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_atomic_int_inc (&object->ref_count);
Packit 4b6dd7
	return object;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_unref:
Packit 4b6dd7
 * @object: (transfer full): a #GDataFreebaseTopicResult
Packit 4b6dd7
 *
Packit 4b6dd7
 * Removes a reference from @object. If the reference count drops to 0,
Packit 4b6dd7
 * the object is freed.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
void
Packit 4b6dd7
gdata_freebase_topic_object_unref (GDataFreebaseTopicObject *object)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_if_fail (object != NULL);
Packit 4b6dd7
Packit 4b6dd7
	if (g_atomic_int_dec_and_test (&object->ref_count)) {
Packit 4b6dd7
		g_hash_table_unref (object->values);
Packit 4b6dd7
		g_free (object->id);
Packit 4b6dd7
		g_slice_free (GDataFreebaseTopicObject, object);
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_list_properties:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the list of Freebase properties described by @object.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer container) (element-type gchar*): An array of property names, free with g_ptr_array_unref().
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GPtrArray *
Packit 4b6dd7
gdata_freebase_topic_object_list_properties (const GDataFreebaseTopicObject *object)
Packit 4b6dd7
{
Packit 4b6dd7
	GPtrArray *properties;
Packit 4b6dd7
	GHashTableIter iter;
Packit 4b6dd7
	gchar *property;
Packit 4b6dd7
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, NULL);
Packit 4b6dd7
Packit 4b6dd7
	properties = g_ptr_array_new ();
Packit 4b6dd7
	g_hash_table_iter_init (&iter, object->values);
Packit 4b6dd7
Packit 4b6dd7
	while (g_hash_table_iter_next (&iter, (gpointer *) &property, NULL))
Packit 4b6dd7
		g_ptr_array_add (properties, property);
Packit 4b6dd7
Packit 4b6dd7
	return properties;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_get_property_count:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 * @property: a property name contained in @object
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the number of values that @object holds for the given @property. If @object
Packit 4b6dd7
 * contains no information about @property, 0 is returned.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: The number of values contained for @property
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
guint64
Packit 4b6dd7
gdata_freebase_topic_object_get_property_count (const GDataFreebaseTopicObject *object, const gchar *property)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, 0);
Packit 4b6dd7
	g_return_val_if_fail (property != NULL, 0);
Packit 4b6dd7
	array = g_hash_table_lookup (object->values, property);
Packit 4b6dd7
Packit 4b6dd7
	if (array == NULL)
Packit 4b6dd7
		return 0;
Packit 4b6dd7
Packit 4b6dd7
	return array->values->len;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_get_property_hits:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 * @property: a property name contained in @object
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the total number of hits that the Freebase database stores
Packit 4b6dd7
 * for this object, this number either equals or is greater than
Packit 4b6dd7
 * gdata_freebase_topic_object_get_property_count(), the query limit
Packit 4b6dd7
 * can be controlled through gdata_query_set_max_results() on the topic
Packit 4b6dd7
 * query.
Packit 4b6dd7
 *
Packit 4b6dd7
 * If @object contains no information about @property, 0 is returned.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the total number of hits for this property
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
guint64
Packit 4b6dd7
gdata_freebase_topic_object_get_property_hits (const GDataFreebaseTopicObject *object, const gchar *property)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, 0);
Packit 4b6dd7
	g_return_val_if_fail (property != NULL, 0);
Packit 4b6dd7
	array = g_hash_table_lookup (object->values, property);
Packit 4b6dd7
Packit 4b6dd7
	if (array == NULL)
Packit 4b6dd7
		return 0;
Packit 4b6dd7
Packit 4b6dd7
	return array->hits;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_get_property_value:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 * @property: a property name contained in @object
Packit 4b6dd7
 * @item: item number to retrieve from @property
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the value that @object stores for this @property/@item pair, as a generic
Packit 4b6dd7
 * #GDataFreebaseTopicValue. If @object contains no information about @property,
Packit 4b6dd7
 * or @item is outside the [0..gdata_freebase_topic_object_get_property_count() - 1]
Packit 4b6dd7
 * range, %NULL is returned.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (allow-none) (transfer none): the value for this property/item
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GDataFreebaseTopicValue *
Packit 4b6dd7
gdata_freebase_topic_object_get_property_value (const GDataFreebaseTopicObject *object, const gchar *property, gint64 item)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataFreebaseTopicValueArray *array;
Packit 4b6dd7
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, NULL);
Packit 4b6dd7
	g_return_val_if_fail (property != NULL, NULL);
Packit 4b6dd7
	array = g_hash_table_lookup (object->values, property);
Packit 4b6dd7
Packit 4b6dd7
	if (array == NULL)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	if (item < 0 || item >= array->values->len)
Packit 4b6dd7
		return NULL;
Packit 4b6dd7
Packit 4b6dd7
	return g_ptr_array_index (array->values, item);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_object_get_id:
Packit 4b6dd7
 * @object: a #GDataFreebaseTopicObject
Packit 4b6dd7
 *
Packit 4b6dd7
 * Gets the Freebase ID for this specific object.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer none): the Freebase ID of this object
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_object_get_id (const GDataFreebaseTopicObject *object)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (object != NULL, NULL);
Packit 4b6dd7
	return object->id;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_ref:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Creates and returns a new reference on @value.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer full): @value, with an extra reference.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GDataFreebaseTopicValue *
Packit 4b6dd7
gdata_freebase_topic_value_ref (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_atomic_int_inc (&value->ref_count);
Packit 4b6dd7
	return value;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_unref:
Packit 4b6dd7
 * @value:  (transfer full): a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Removes a reference from @value. If the reference count drops to 0,
Packit 4b6dd7
 * the object is freed.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
void
Packit 4b6dd7
gdata_freebase_topic_value_unref (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_if_fail (value != NULL);
Packit 4b6dd7
Packit 4b6dd7
	if (g_atomic_int_dec_and_test (&value->ref_count))
Packit 4b6dd7
		value_free (value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_property:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the property name that this value describes
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the property name of @value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_value_get_property (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	return value->property;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_text:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a textual representation of this value, this is either
Packit 4b6dd7
 * the value contained transformed to a string, or a concatenation
Packit 4b6dd7
 * of subvalues for compound types.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: a textual representation of @value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_value_get_text (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	return value->text;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_language:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the language used in the content of @value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the language @value is written in
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_value_get_language (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	return value->lang;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_creator:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the Freebase ID of the user that created this value.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the creator of this value, as a Freebase ID
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_value_get_creator (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	return value->creator;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_timestamp:
Packit 4b6dd7
 * @value: #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the time at which this value was created in the Freebase database.
Packit 4b6dd7
 * It's a UNIX timestamp in seconds since the epoch. If @value has no timestamp,
Packit 4b6dd7
 * -1 will be returned.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: The creation time of @value, or -1
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
gint64
Packit 4b6dd7
gdata_freebase_topic_value_get_timestamp (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, 0);
Packit 4b6dd7
	return value->timestamp;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_value_type:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns the #GType of the real value held in @value.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the #GType of the contained value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
GType
Packit 4b6dd7
gdata_freebase_topic_value_get_value_type (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, G_TYPE_INVALID);
Packit 4b6dd7
	return G_VALUE_TYPE (&value->value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_copy_value:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 * @gvalue: (out caller-allocates) (transfer full): an empty #GValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Copies in @gvalue the value held in @value. the #GValue must be later freed through g_value_unset()
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
void
Packit 4b6dd7
gdata_freebase_topic_value_copy_value (GDataFreebaseTopicValue *value, GValue *gvalue)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_if_fail (value != NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_value_copy (&value->value, gvalue);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_int:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a #gint64 value held in @value. It is only valid to call this if the #GType is a %G_TYPE_INT64
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the #gint64 value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
gint64
Packit 4b6dd7
gdata_freebase_topic_value_get_int (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, 0);
Packit 4b6dd7
	g_return_val_if_fail (G_VALUE_HOLDS_INT64 (&value->value), 0);
Packit 4b6dd7
Packit 4b6dd7
	return g_value_get_int64 (&value->value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_double:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a #gdouble value held in @value. It is only valid to call this if the #GType is a %G_TYPE_DOUBLE
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the #gdouble value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
gdouble
Packit 4b6dd7
gdata_freebase_topic_value_get_double (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, 0);
Packit 4b6dd7
	g_return_val_if_fail (G_VALUE_HOLDS_DOUBLE (&value->value), 0);
Packit 4b6dd7
Packit 4b6dd7
	return g_value_get_double (&value->value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_string:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a string value held in @value. It is only valid to call this if the #GType is a %G_TYPE_STRING
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: the string value
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const gchar *
Packit 4b6dd7
gdata_freebase_topic_value_get_string (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	g_return_val_if_fail (G_VALUE_HOLDS_STRING (&value->value), NULL);
Packit 4b6dd7
Packit 4b6dd7
	return g_value_get_string (&value->value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_get_object:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns a compound/complex object held in @value. It is only valid to call this if the #GType is a
Packit 4b6dd7
 * %GDATA_TYPE_FREEBASE_TOPIC_OBJECT.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: (transfer none): the compound value as a #GDataFreebaseTopicObject
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
const GDataFreebaseTopicObject *
Packit 4b6dd7
gdata_freebase_topic_value_get_object (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, NULL);
Packit 4b6dd7
	g_return_val_if_fail (G_VALUE_HOLDS (&value->value, GDATA_TYPE_FREEBASE_TOPIC_OBJECT), NULL);
Packit 4b6dd7
Packit 4b6dd7
	return g_value_get_boxed (&value->value);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/**
Packit 4b6dd7
 * gdata_freebase_topic_value_is_image:
Packit 4b6dd7
 * @value: a #GDataFreebaseTopicValue
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns true if @value holds a freebase image object, on such values it
Packit 4b6dd7
 * will be valid to call gdata_freebase_service_get_image() to get a stream
Packit 4b6dd7
 * to the image itself.
Packit 4b6dd7
 *
Packit 4b6dd7
 * Returns: Whether @value holds a Freebase image object
Packit 4b6dd7
 *
Packit 4b6dd7
 * Since: 0.15.1
Packit 4b6dd7
 * Deprecated: 0.17.7: Google Freebase has been permanently shut down.
Packit 4b6dd7
 */
Packit 4b6dd7
gboolean
Packit 4b6dd7
gdata_freebase_topic_value_is_image (GDataFreebaseTopicValue *value)
Packit 4b6dd7
{
Packit 4b6dd7
	g_return_val_if_fail (value != NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	return (strcmp (value->property, "/common/topic/image") == 0);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
G_GNUC_END_IGNORE_DEPRECATIONS