summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2019-08-01 09:15:23 +0000
committerSam Thursfield <sam@afuera.me.uk>2019-08-01 09:15:23 +0000
commit18c06d6ba1e87cfe4a8e8222cda8a5476fd930e1 (patch)
treea6e47e5e7542402c409097b07a151271559037ae
parent3806940094fc6cea8e4a3a6acdb658bde0bae800 (diff)
parentc2bcf8971d9ec6bc281b1e5c01c73024bdd67cf4 (diff)
downloadtracker-18c06d6ba1e87cfe4a8e8222cda8a5476fd930e1.tar.gz
Merge branch 'wip/carlosg/domain-ontology-non-object' into 'master'
libtracker-common: Make TrackerDomainOntology totally not an object See merge request GNOME/tracker!109
-rw-r--r--src/libtracker-common/libtracker-common.vapi4
-rw-r--r--src/libtracker-common/tracker-domain-ontology.c226
-rw-r--r--src/libtracker-common/tracker-domain-ontology.h26
-rw-r--r--src/libtracker-control/tracker-miner-manager.c2
-rw-r--r--src/libtracker-miner/tracker-miner-proxy.c2
-rw-r--r--src/libtracker-sparql/tracker-notifier.c2
6 files changed, 70 insertions, 192 deletions
diff --git a/src/libtracker-common/libtracker-common.vapi b/src/libtracker-common/libtracker-common.vapi
index 90e019879..fa38e9f28 100644
--- a/src/libtracker-common/libtracker-common.vapi
+++ b/src/libtracker-common/libtracker-common.vapi
@@ -88,8 +88,8 @@ namespace Tracker {
public static void enable_client_lookup (bool enable);
}
- [CCode (cheader_filename = "libtracker-common/tracker-domain-ontology.h")]
- public class DomainOntology : GLib.Object, GLib.Initable {
+ [CCode (ref_function = "tracker_domain_ontology_ref", unref_function = "tracker_domain_ontology_unref", cheader_filename = "libtracker-common/tracker-domain-ontology.h")]
+ public class DomainOntology {
public DomainOntology (string? name, GLib.Cancellable? cancellable) throws GLib.Error;
public GLib.File get_cache ();
public GLib.File? get_journal ();
diff --git a/src/libtracker-common/tracker-domain-ontology.c b/src/libtracker-common/tracker-domain-ontology.c
index 750abf082..f43fd926b 100644
--- a/src/libtracker-common/tracker-domain-ontology.c
+++ b/src/libtracker-common/tracker-domain-ontology.c
@@ -24,7 +24,8 @@
#include <string.h>
#include "tracker-domain-ontology.h"
-typedef struct {
+struct _TrackerDomainOntology {
+ gint ref_count;
/* DomainOntologies section */
GFile *cache_location;
GFile *journal_location;
@@ -33,11 +34,6 @@ typedef struct {
gchar *domain;
gchar *ontology_name;
gchar **miners;
-} TrackerDomainOntologyPrivate;
-
-enum {
- PROP_0,
- PROP_NAME
};
struct {
@@ -74,98 +70,29 @@ struct {
#define DEFAULT_RULE "default.rule"
-static void tracker_domain_ontology_initable_iface_init (GInitableIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (TrackerDomainOntology, tracker_domain_ontology, G_TYPE_OBJECT,
- G_ADD_PRIVATE (TrackerDomainOntology)
- G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, tracker_domain_ontology_initable_iface_init))
-
-static void
-tracker_domain_ontology_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- TrackerDomainOntology *domain_ontology;
- TrackerDomainOntologyPrivate *priv;
-
- domain_ontology = TRACKER_DOMAIN_ONTOLOGY (object);
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
-
- switch (prop_id) {
- case PROP_NAME:
- priv->name = g_value_dup_string (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-tracker_domain_ontology_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- TrackerDomainOntology *domain_ontology;
- TrackerDomainOntologyPrivate *priv;
-
- domain_ontology = TRACKER_DOMAIN_ONTOLOGY (object);
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
-
- switch (prop_id) {
- case PROP_NAME:
- g_value_set_string (value, priv->name);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
-}
-
-static void
-tracker_domain_ontology_finalize (GObject *object)
-{
- TrackerDomainOntology *domain_ontology;
- TrackerDomainOntologyPrivate *priv;
-
- domain_ontology = TRACKER_DOMAIN_ONTOLOGY (object);
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
-
- g_clear_object (&priv->cache_location);
- g_clear_object (&priv->journal_location);
- g_clear_object (&priv->ontology_location);
- g_free (priv->ontology_name);
- g_free (priv->name);
- g_free (priv->domain);
- g_strfreev (priv->miners);
-
- G_OBJECT_CLASS (tracker_domain_ontology_parent_class)->finalize (object);
-}
-
-static void
-tracker_domain_ontology_class_init (TrackerDomainOntologyClass *klass)
+TrackerDomainOntology *
+tracker_domain_ontology_ref (TrackerDomainOntology *domain_ontology)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->set_property = tracker_domain_ontology_set_property;
- object_class->get_property = tracker_domain_ontology_get_property;
- object_class->finalize = tracker_domain_ontology_finalize;
-
- g_object_class_install_property (object_class,
- PROP_NAME,
- g_param_spec_string ("name",
- "Name",
- "Name",
- NULL,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY));
+ domain_ontology->ref_count++;
+ return domain_ontology;
}
-static void
-tracker_domain_ontology_init (TrackerDomainOntology *domain_ontology)
+void
+tracker_domain_ontology_unref (TrackerDomainOntology *domain_ontology)
{
+ domain_ontology->ref_count--;
+
+ if (domain_ontology->ref_count != 0)
+ return;
+
+ g_clear_object (&domain_ontology->cache_location);
+ g_clear_object (&domain_ontology->journal_location);
+ g_clear_object (&domain_ontology->ontology_location);
+ g_free (domain_ontology->ontology_name);
+ g_free (domain_ontology->name);
+ g_free (domain_ontology->domain);
+ g_strfreev (domain_ontology->miners);
+ g_free (domain_ontology);
}
static const gchar *
@@ -289,38 +216,38 @@ find_rule_in_data_dirs (const gchar *name)
return NULL;
}
-static gboolean
-tracker_domain_ontology_initable_init (GInitable *initable,
- GCancellable *cancellable,
- GError **error)
+TrackerDomainOntology *
+tracker_domain_ontology_new (const gchar *domain_name,
+ GCancellable *cancellable,
+ GError **error)
{
TrackerDomainOntology *domain_ontology;
- TrackerDomainOntologyPrivate *priv;
GError *inner_error = NULL;
GKeyFile *key_file = NULL;
gchar *path, *path_for_tests;
- domain_ontology = TRACKER_DOMAIN_ONTOLOGY (initable);
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
+ domain_ontology = g_new0 (TrackerDomainOntology, 1);
+ domain_ontology->name = g_strdup (domain_name);
+ domain_ontology->ref_count = 1;
- if (priv->name && priv->name[0] == '/') {
- if (!g_file_test (priv->name, G_FILE_TEST_IS_REGULAR)) {
+ if (domain_name && domain_name[0] == '/') {
+ if (!g_file_test (domain_name, G_FILE_TEST_IS_REGULAR)) {
inner_error = g_error_new (G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_NOT_FOUND,
"Could not find rule at '%s'",
- priv->name);
+ domain_name);
goto end;
}
- path = g_strdup (priv->name);
- } else if (priv->name) {
- path = find_rule_in_data_dirs (priv->name);
+ path = g_strdup (domain_name);
+ } else if (domain_name) {
+ path = find_rule_in_data_dirs (domain_name);
if (!path) {
inner_error = g_error_new (G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_NOT_FOUND,
"Could not find rule '%s' in data dirs",
- priv->name);
+ domain_name);
goto end;
}
} else {
@@ -347,60 +274,60 @@ tracker_domain_ontology_initable_init (GInitable *initable,
if (inner_error)
goto end;
- priv->domain = g_key_file_get_string (key_file, DOMAIN_ONTOLOGY_SECTION,
- DOMAIN_KEY, &inner_error);
+ domain_ontology->domain = g_key_file_get_string (key_file, DOMAIN_ONTOLOGY_SECTION,
+ DOMAIN_KEY, &inner_error);
if (inner_error)
goto end;
- priv->cache_location =
+ domain_ontology->cache_location =
key_file_get_location (key_file, DOMAIN_ONTOLOGY_SECTION,
CACHE_KEY, TRUE, FALSE, &inner_error);
if (inner_error)
goto end;
- priv->journal_location =
+ domain_ontology->journal_location =
key_file_get_location (key_file, DOMAIN_ONTOLOGY_SECTION,
JOURNAL_KEY, FALSE, FALSE, &inner_error);
if (inner_error)
goto end;
- priv->ontology_location =
+ domain_ontology->ontology_location =
key_file_get_location (key_file, DOMAIN_ONTOLOGY_SECTION,
ONTOLOGY_KEY, FALSE, TRUE, &inner_error);
if (inner_error)
goto end;
- priv->ontology_name = g_key_file_get_string (key_file, DOMAIN_ONTOLOGY_SECTION,
- ONTOLOGY_NAME_KEY, NULL);
- priv->miners = g_key_file_get_string_list (key_file, DOMAIN_ONTOLOGY_SECTION,
- MINERS_KEY, NULL, NULL);
+ domain_ontology->ontology_name = g_key_file_get_string (key_file, DOMAIN_ONTOLOGY_SECTION,
+ ONTOLOGY_NAME_KEY, NULL);
+ domain_ontology->miners = g_key_file_get_string_list (key_file, DOMAIN_ONTOLOGY_SECTION,
+ MINERS_KEY, NULL, NULL);
/* Consistency check, we need one of OntologyLocation and OntologyName,
* no more, no less.
*/
- if ((priv->ontology_name && priv->ontology_location) ||
- (!priv->ontology_name && !priv->ontology_location)) {
+ if ((domain_ontology->ontology_name && domain_ontology->ontology_location) ||
+ (!domain_ontology->ontology_name && !domain_ontology->ontology_location)) {
inner_error = g_error_new (G_KEY_FILE_ERROR,
G_KEY_FILE_ERROR_INVALID_VALUE,
"One of OntologyLocation and OntologyName must be provided");
}
/* Build ontology location from name if necessary */
- if (!priv->ontology_location) {
+ if (!domain_ontology->ontology_location) {
gchar *ontology_path;
if (g_getenv ("TRACKER_DB_ONTOLOGIES_DIR") != NULL) {
/* Override for use only by testcases */
- priv->ontology_location = g_file_new_for_path (g_getenv ("TRACKER_DB_ONTOLOGIES_DIR"));
+ domain_ontology->ontology_location = g_file_new_for_path (g_getenv ("TRACKER_DB_ONTOLOGIES_DIR"));
} else {
ontology_path = g_build_filename (SHAREDIR, "tracker", "ontologies",
- priv->ontology_name, NULL);
+ domain_ontology->ontology_name, NULL);
if (!g_file_test (ontology_path, G_FILE_TEST_IS_DIR)) {
g_error ("Unable to find ontologies in the configured location %s", ontology_path);
}
- priv->ontology_location = g_file_new_for_path (ontology_path);
+ domain_ontology->ontology_location = g_file_new_for_path (ontology_path);
g_free (ontology_path);
}
@@ -412,85 +339,54 @@ end:
if (inner_error) {
g_propagate_error (error, inner_error);
- return FALSE;
+ tracker_domain_ontology_unref (domain_ontology);
+ return NULL;
}
- return TRUE;
-}
-
-static void
-tracker_domain_ontology_initable_iface_init (GInitableIface *iface)
-{
- iface->init = tracker_domain_ontology_initable_init;
-}
-
-TrackerDomainOntology *
-tracker_domain_ontology_new (const gchar *domain_name,
- GCancellable *cancellable,
- GError **error)
-{
- return g_initable_new (TRACKER_TYPE_DOMAIN_ONTOLOGY,
- cancellable, error,
- "name", domain_name,
- NULL);
+ return domain_ontology;
}
GFile *
tracker_domain_ontology_get_cache (TrackerDomainOntology *domain_ontology)
{
- TrackerDomainOntologyPrivate *priv;
-
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
- return priv->cache_location;
+ return domain_ontology->cache_location;
}
GFile *
tracker_domain_ontology_get_journal (TrackerDomainOntology *domain_ontology)
{
- TrackerDomainOntologyPrivate *priv;
-
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
- return priv->journal_location;
+ return domain_ontology->journal_location;
}
GFile *
tracker_domain_ontology_get_ontology (TrackerDomainOntology *domain_ontology)
{
- TrackerDomainOntologyPrivate *priv;
-
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
- return priv->ontology_location;
+ return domain_ontology->ontology_location;
}
gchar *
tracker_domain_ontology_get_domain (TrackerDomainOntology *domain_ontology,
const gchar *suffix)
{
- TrackerDomainOntologyPrivate *priv;
-
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
if (suffix)
- return g_strconcat (priv->domain, ".", suffix, NULL);
+ return g_strconcat (domain_ontology->domain, ".", suffix, NULL);
else
- return g_strconcat (priv->domain, NULL);
+ return g_strconcat (domain_ontology->domain, NULL);
}
gboolean
tracker_domain_ontology_uses_miner (TrackerDomainOntology *domain_ontology,
const gchar *suffix)
{
- TrackerDomainOntologyPrivate *priv;
guint i;
g_return_val_if_fail (suffix != NULL, FALSE);
- priv = tracker_domain_ontology_get_instance_private (domain_ontology);
-
- if (!priv->miners)
+ if (!domain_ontology->miners)
return FALSE;
- for (i = 0; priv->miners[i] != NULL; i++) {
- if (strcmp (priv->miners[i], suffix) == 0) {
+ for (i = 0; domain_ontology->miners[i] != NULL; i++) {
+ if (strcmp (domain_ontology->miners[i], suffix) == 0) {
return TRUE;
}
}
diff --git a/src/libtracker-common/tracker-domain-ontology.h b/src/libtracker-common/tracker-domain-ontology.h
index befae1089..12434a212 100644
--- a/src/libtracker-common/tracker-domain-ontology.h
+++ b/src/libtracker-common/tracker-domain-ontology.h
@@ -29,31 +29,14 @@
#include <glib-object.h>
#include <gio/gio.h>
-#define TRACKER_TYPE_DOMAIN_ONTOLOGY (tracker_domain_ontology_get_type())
-#define TRACKER_DOMAIN_ONTOLOGY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), TRACKER_TYPE_DOMAIN_ONTOLOGY, TrackerDomainOntology))
-#define TRACKER_DOMAIN_ONTOLOGY_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), TRACKER_TYPE_DOMAIN_ONTOLOGY, TrackerDomainOntologyClass))
-#define TRACKER_IS_DOMAIN_ONTOLOGY(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), TRACKER_TYPE_DOMAIN_ONTOLOGY))
-#define TRACKER_IS_DOMAIN_ONTOLOGY_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), TRACKER_TYPE_DOMAIN_ONTOLOGY))
-#define TRACKER_DOMAIN_ONTOLOGY_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), TRACKER_TYPE_DOMAIN_ONTOLOGY, TrackerDomainOntologyClass))
-
typedef struct _TrackerDomainOntology TrackerDomainOntology;
-typedef struct _TrackerDomainOntologyClass TrackerDomainOntologyClass;
-
-struct _TrackerDomainOntology {
- GObject parent_instance;
-};
-
-struct _TrackerDomainOntologyClass {
- GObjectClass parent_class;
- /*<private>*/
- gpointer padding[10];
-};
-
-GType tracker_domain_ontology_get_type (void) G_GNUC_CONST;
TrackerDomainOntology * tracker_domain_ontology_new (const gchar *name,
GCancellable *cancellable,
GError **error);
+TrackerDomainOntology * tracker_domain_ontology_ref (TrackerDomainOntology *domain_ontology);
+
+void tracker_domain_ontology_unref (TrackerDomainOntology *domain_ontology);
GFile * tracker_domain_ontology_get_cache (TrackerDomainOntology *domain_ontology);
GFile * tracker_domain_ontology_get_journal (TrackerDomainOntology *domain_ontology);
@@ -65,5 +48,4 @@ gchar * tracker_domain_ontology_get_domain (TrackerDomainOntology *domain_onto
gboolean tracker_domain_ontology_uses_miner (TrackerDomainOntology *domain_ontology,
const gchar *suffix);
-
-#endif /* __TRACKER_MINER_PROXY_H__ */
+#endif /* __TRACKER_DOMAIN_ONTOLOGY_H__ */
diff --git a/src/libtracker-control/tracker-miner-manager.c b/src/libtracker-control/tracker-miner-manager.c
index 06fb665fa..740eae30d 100644
--- a/src/libtracker-control/tracker-miner-manager.c
+++ b/src/libtracker-control/tracker-miner-manager.c
@@ -574,7 +574,7 @@ miner_manager_finalize (GObject *object)
g_list_free (priv->miners);
g_hash_table_unref (priv->miner_proxies);
g_free (priv->domain_ontology_name);
- g_clear_object (&priv->domain_ontology);
+ g_clear_pointer (&priv->domain_ontology, tracker_domain_ontology_unref);
G_OBJECT_CLASS (tracker_miner_manager_parent_class)->finalize (object);
}
diff --git a/src/libtracker-miner/tracker-miner-proxy.c b/src/libtracker-miner/tracker-miner-proxy.c
index 465d6103c..78a5990b9 100644
--- a/src/libtracker-miner/tracker-miner-proxy.c
+++ b/src/libtracker-miner/tracker-miner-proxy.c
@@ -779,7 +779,7 @@ tracker_miner_proxy_initable_init (GInitable *initable,
g_signal_connect (priv->miner, "progress",
G_CALLBACK (miner_progress_cb), proxy);
- g_object_unref (domain_ontology);
+ tracker_domain_ontology_unref (domain_ontology);
return TRUE;
}
diff --git a/src/libtracker-sparql/tracker-notifier.c b/src/libtracker-sparql/tracker-notifier.c
index 194db6a4b..5a0696bb7 100644
--- a/src/libtracker-sparql/tracker-notifier.c
+++ b/src/libtracker-sparql/tracker-notifier.c
@@ -729,7 +729,7 @@ tracker_notifier_initable_init (GInitable *initable,
G_DBUS_SIGNAL_FLAGS_NONE,
graph_updated_cb,
initable, NULL);
- g_object_unref (domain_ontology);
+ tracker_domain_ontology_unref (domain_ontology);
g_free (dbus_name);
return TRUE;