summaryrefslogtreecommitdiff
path: root/src/miners/user-guides/tracker-miner-user-guides.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/miners/user-guides/tracker-miner-user-guides.c')
-rw-r--r--src/miners/user-guides/tracker-miner-user-guides.c96
1 files changed, 83 insertions, 13 deletions
diff --git a/src/miners/user-guides/tracker-miner-user-guides.c b/src/miners/user-guides/tracker-miner-user-guides.c
index 8328dfacc..2ceaeb09a 100644
--- a/src/miners/user-guides/tracker-miner-user-guides.c
+++ b/src/miners/user-guides/tracker-miner-user-guides.c
@@ -27,6 +27,8 @@
#include "tracker-miner-user-guides.h"
+#define LOCALE_FILENAME "locale-for-miner-user-guides.txt"
+
// FIXME: get this value from tracker conf
#define MAX_EXTRACT_SIZE 1024 * 1024 // 1 MiB
#define MAX_TITLE_LENGTH 1000
@@ -222,10 +224,28 @@ miner_finished_cb (TrackerMinerFS *fs,
guint total_files_ignored,
gpointer user_data)
{
- /* Update locale file if necessary */
- if (tracker_miner_locale_changed ()) {
- tracker_miner_locale_set_current ();
+ /* Save locale, if it changes the variation in the desktop
+ * file languages needs to be re-indexed.
+ */
+ GError *error = NULL;
+ gchar *locale = tracker_locale_get (TRACKER_LOCALE_LANGUAGE);
+ gchar *locale_file = g_build_filename (g_get_user_cache_dir (), "tracker", LOCALE_FILENAME, NULL);
+
+ g_message ("Saving locale used to index applications");
+ g_message (" Creating locale file '%s'", locale_file);
+
+ if (locale == NULL) {
+ locale = g_strdup ("");
+ }
+
+ if (!g_file_set_contents (locale_file, locale, -1, &error)) {
+ g_message (" Could not set file contents, %s",
+ error ? error->message : "no error given");
+ g_clear_error (&error);
}
+
+ g_free (locale);
+ g_free (locale_file);
}
static gboolean
@@ -685,28 +705,78 @@ miner_userguides_reset (TrackerMiner *miner)
g_object_unref (sparql);
}
-gboolean
-tracker_miner_userguides_detect_locale_changed (TrackerMiner *miner)
+static gboolean
+detect_locale_changed (TrackerMiner *miner)
{
+ gchar *locale_file;
+ gchar *previous_locale = NULL;
+ gchar *current_locale;
gboolean changed;
- changed = tracker_miner_locale_changed ();
+ locale_file = g_build_filename (g_get_user_cache_dir (), "tracker", LOCALE_FILENAME, NULL);
+
+ if (G_LIKELY (g_file_test (locale_file, G_FILE_TEST_EXISTS))) {
+ gchar *contents;
+
+ /* Check locale is correct */
+ if (G_LIKELY (g_file_get_contents (locale_file, &contents, NULL, NULL))) {
+ if (contents &&
+ contents[0] == '\0') {
+ g_critical (" Empty locale file found at '%s'", locale_file);
+ g_free (contents);
+ } else {
+ /* Re-use contents */
+ previous_locale = contents;
+ }
+ } else {
+ g_critical (" Could not get content of file '%s'", locale_file);
+ }
+ } else {
+ g_message (" Could not find locale file:'%s'", locale_file);
+ }
+
+ g_free (locale_file);
+
+ current_locale = tracker_locale_get (TRACKER_LOCALE_LANGUAGE);
+
+ /* Note that having both to NULL is actually valid, they would default
+ * to the unicode collation without locale-specific stuff. */
+ if (g_strcmp0 (previous_locale, current_locale) != 0) {
+ g_message ("Locale change detected from '%s' to '%s'...",
+ previous_locale, current_locale);
+ changed = TRUE;
+ } else {
+ g_message ("Current and previous locales match: '%s'", previous_locale);
+ changed = FALSE;
+ }
+
+ g_free (current_locale);
+ g_free (previous_locale);
+
if (changed) {
g_message ("Locale change detected, so resetting miner to "
"remove all previously created items...");
miner_userguides_reset (miner);
}
+
return changed;
}
TrackerMiner *
tracker_miner_userguides_new (GError **error)
{
- return g_initable_new (TRACKER_TYPE_MINER_USERGUIDES,
- NULL,
- error,
- "name", "Userguides",
- "processing-pool-wait-limit", 10,
- "processing-pool-ready-limit", 100,
- NULL);
+ TrackerMiner *miner;
+
+ miner = g_initable_new (TRACKER_TYPE_MINER_USERGUIDES,
+ NULL,
+ error,
+ "name", "Userguides",
+ "processing-pool-wait-limit", 10,
+ "processing-pool-ready-limit", 100,
+ NULL);
+
+ /* If the locales changed, we need to reset things first */
+ detect_locale_changed (miner);
+
+ return miner;
}