summaryrefslogtreecommitdiff
path: root/src/libtracker-data
diff options
context:
space:
mode:
authorMartyn Russell <martyn@lanedo.com>2014-10-09 19:11:45 +0100
committerMartyn Russell <martyn@lanedo.com>2014-10-27 16:02:01 +0000
commit2b53cd5d3aaf046c413fd4afb188c16d7e611f48 (patch)
tree0b48c56334ed085c8ab6dd337144058800cd495a /src/libtracker-data
parentdc4fbfe97d19d07559cad7cdef9b0ab2ec5bd319 (diff)
downloadtracker-2b53cd5d3aaf046c413fd4afb188c16d7e611f48.tar.gz
all: Migrate to GKeyfileSettingsBackend and generate man pages from schemas
Now we've removed the internal key file object, we've had to put in place another method for supporting the existing TRACKER_USE_CONFIG_FILES environment variable. Thanks to the GKeyfileSettingsBackend provided by GLib, we can fallback to old school INI type config files for embedded solutions or cases where we don't want dconf as a backend. This works rather well. IT should be noted, the INI files are *NOT* written out in full if they do not exist, only options which are saved or different to the default settings are. This is how it should be too. Now we build man pages based on GSettings schemas using xsltproc with the template in docs/manpages/gsettings.xsl. This is a useful aid when trying to understand what config files can have in them. One thing it does highlight, is the config documentation could be better :)
Diffstat (limited to 'src/libtracker-data')
-rw-r--r--src/libtracker-data/.gitignore1
-rw-r--r--src/libtracker-data/Makefile.am22
-rw-r--r--src/libtracker-data/tracker-db-config.c61
3 files changed, 74 insertions, 10 deletions
diff --git a/src/libtracker-data/.gitignore b/src/libtracker-data/.gitignore
index 79d98d419..5845fe0a1 100644
--- a/src/libtracker-data/.gitignore
+++ b/src/libtracker-data/.gitignore
@@ -6,3 +6,4 @@ tracker-sparql-scanner.c
tracker-turtle-reader.c
*.xml
*.valid
+*.cfg.5
diff --git a/src/libtracker-data/Makefile.am b/src/libtracker-data/Makefile.am
index 6398da781..0e47bb241 100644
--- a/src/libtracker-data/Makefile.am
+++ b/src/libtracker-data/Makefile.am
@@ -16,6 +16,8 @@ AM_CPPFLAGS = \
-DSHAREDIR=\""$(datadir)"\" \
$(LIBTRACKER_DATA_CFLAGS)
+all: $(libtracker_data_LTLIBRARIES) $(man_MANS)
+
libtracker_datadir = $(libdir)/tracker-$(TRACKER_API_VERSION)
libtracker_data_LTLIBRARIES = libtracker-data.la
@@ -86,14 +88,30 @@ gsettings_SCHEMAS = org.freedesktop.Tracker.DB.gschema.xml
@GSETTINGS_RULES@
+if HAVE_XSLTPROC
+DATE=`date +'%B %Y'`
+man_MANS = tracker-db.cfg.5
+else
+man_MANS =
+endif
+
+%.cfg.5: $(gsettings_SCHEMAS)
+ $(AM_V_GEN)$(XSLTPROC) \
+ --stringparam version "${VERSION}" \
+ --stringparam current-date "${DATE}" \
+ --stringparam config-file "$(@:.cfg.5=.cfg)" \
+ $(top_srcdir)/docs/manpages/gsettings.xsl $^ > $@
+
# Dist / Clean rules for all data
BUILT_SOURCES = \
libtracker_data_la_vala.stamp
CLEANFILES = \
libtracker_data_la_vala.stamp \
- $(gsettings_SCHEMAS)
+ $(gsettings_SCHEMAS) \
+ $(man_MANS)
EXTRA_DIST = \
libtracker-data.vapi \
- $(gsettings_SCHEMAS:.xml=.xml.in)
+ $(gsettings_SCHEMAS:.xml=.xml.in) \
+ $(man_MANS)
diff --git a/src/libtracker-data/tracker-db-config.c b/src/libtracker-data/tracker-db-config.c
index eb3c65d8a..2b95f1532 100644
--- a/src/libtracker-data/tracker-db-config.c
+++ b/src/libtracker-data/tracker-db-config.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2009, Nokia <ivan.frade@nokia.com>
+ * Copyright (C) 2014, Lanedo <martyn@lanedo.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -25,10 +26,15 @@
#include <glib.h>
#include <gio/gio.h>
+#define G_SETTINGS_ENABLE_BACKEND
+#include <gio/gsettingsbackend.h>
+
+#include <libtracker-common/tracker-common.h>
+
#include "tracker-db-config.h"
-/* GKeyFile defines */
-#define GROUP_JOURNAL "Journal"
+#define CONFIG_SCHEMA "org.freedesktop.Tracker.DB"
+#define CONFIG_PATH "/org/freedesktop/tracker/db/"
/* Default values */
#define DEFAULT_JOURNAL_CHUNK_SIZE 50
@@ -139,22 +145,61 @@ config_finalize (GObject *object)
(G_OBJECT_CLASS (tracker_db_config_parent_class)->finalize) (object);
}
-
static void
config_constructed (GObject *object)
{
+ GSettings *settings;
+
(G_OBJECT_CLASS (tracker_db_config_parent_class)->constructed) (object);
- g_settings_delay (G_SETTINGS (object));
+ settings = G_SETTINGS (object);
+
+ if (G_LIKELY (!g_getenv ("TRACKER_USE_CONFIG_FILES"))) {
+ g_settings_delay (settings);
+ }
+
+ g_settings_bind (settings, "journal-chunk-size", object, "journal-chunk-size", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_GET_NO_CHANGES);
+ g_settings_bind (settings, "journal-rotate-destination", object, "journal-rotate-destination", G_SETTINGS_BIND_GET | G_SETTINGS_BIND_GET_NO_CHANGES);
}
TrackerDBConfig *
tracker_db_config_new (void)
{
- return g_object_new (TRACKER_TYPE_DB_CONFIG,
- "schema-id", "org.freedesktop.Tracker.DB",
- "path", "/org/freedesktop/tracker/db/",
- NULL);
+ TrackerDBConfig *config = NULL;
+
+ /* FIXME: should we unset GSETTINGS_BACKEND env var? */
+
+ if (G_UNLIKELY (g_getenv ("TRACKER_USE_CONFIG_FILES"))) {
+ GSettingsBackend *backend;
+ gchar *filename;
+ gboolean need_to_save;
+
+ filename = g_build_filename (g_get_user_config_dir (), "tracker", "tracker-db.cfg", NULL);
+
+ need_to_save = g_file_test (filename, G_FILE_TEST_EXISTS) == FALSE;
+
+ backend = g_keyfile_settings_backend_new (filename, CONFIG_PATH, "General");
+ g_info ("Using config file '%s'", filename);
+ g_free (filename);
+
+ config = g_object_new (TRACKER_TYPE_DB_CONFIG,
+ "backend", backend,
+ "schema-id", CONFIG_SCHEMA,
+ "path", CONFIG_PATH,
+ NULL);
+ g_object_unref (backend);
+
+ if (need_to_save) {
+ g_info (" Config file does not exist, using default values...");
+ }
+ } else {
+ config = g_object_new (TRACKER_TYPE_DB_CONFIG,
+ "schema-id", CONFIG_SCHEMA,
+ "path", CONFIG_PATH,
+ NULL);
+ }
+
+ return config;
}
gboolean