diff options
author | Martyn Russell <martyn@lanedo.com> | 2014-10-09 19:11:45 +0100 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2014-10-27 16:02:01 +0000 |
commit | 2b53cd5d3aaf046c413fd4afb188c16d7e611f48 (patch) | |
tree | 0b48c56334ed085c8ab6dd337144058800cd495a /src/libtracker-data | |
parent | dc4fbfe97d19d07559cad7cdef9b0ab2ec5bd319 (diff) | |
download | tracker-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/.gitignore | 1 | ||||
-rw-r--r-- | src/libtracker-data/Makefile.am | 22 | ||||
-rw-r--r-- | src/libtracker-data/tracker-db-config.c | 61 |
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 |