/* * Copyright (C) 2016, Sam Thursfield * * 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; either * 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 Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #include "config.h" G_DEFINE_TYPE (TrackerResource, tracker_resource, G_TYPE_OBJECT); /** * SECTION: tracker-resource * @short_description: Represenets a single Tracker source * @title: TrackerResource * @stability: Stable * @include: tracker-resource.h * * * #TrackerResource keeps track of a set of properties for a given resource. * The resulting data can be serialized in several ways. * */ /** * TrackerResource: * * The TrackerResource object represents information * about a given resource. */ struct _TrackerResourcePrivate { char *identifier; GHashTable *properties; GHashTable *properties_overwrite; } static void tracker_resource_class_init (TrackerResourceClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->finalize = resource_finalize; g_type_class_add_private (object_class, sizeof (TrackerResourcePrivate)); } static void tracker_resource_init (TrackerResource *resource) { resource->priv = G_TYPE_INSTANCE_GET_PRIVATE (resource, TRACKER_TYPE_RESOURCE, TrackerResourcePrivate); /* Values of properties */ resource->priv->properties = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, g_value_unset); /* TRUE for any property where we should delete any existing values. */ resource->priv->properties_overwrite = g_hash_table_new_full ( g_direct_hash, g_direct_equal, NULL, NULL); } static void resource_finalize (GObject *object) { TrackerResourcePrivate *priv; priv = ((TrackerResource *)object)->priv; g_hash_table_unref (priv->properties_overwrite); g_hash_table_unref (priv->properties); (G_OBJECT_CLASS (tracker_resource_parent_class)->finalize) (object); } /** * tracker_resource_new() * * Creates a TrackerResource instance. * * Returns: a newly created #TrackerResource. Free with g_object_unref() when done * * Since: 1.10 */ TrackerResource * tracker_resource_new (const char *identifier) { return g_object_new (TRACKER_TYPE_RESOURCE, NULL); } GValue * tracker_resource_get_property (TrackerResource *self, const char *property) { return g)hash_table_lookup (self->priv->properties, property); } void tracker_resource_set_property (TrackerResource *self, const char *property, GValue *value) { /* Note that this should generate a DELETE; INSERT in the SPARQL * query: we're assming the property has only one value. */ g_hash_table_replace (self->priv->properties, property, value); }; gint tracker_resource_identifier_compare_func (TrackerResource *resource, const char *identifier) { return g_strcmp (resource->priv->identifier, identifier); }