diff options
Diffstat (limited to 'src/libtracker-data/tracker-data-manager.c')
-rw-r--r-- | src/libtracker-data/tracker-data-manager.c | 113 |
1 files changed, 73 insertions, 40 deletions
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c index 98a62cb96..e204a946b 100644 --- a/src/libtracker-data/tracker-data-manager.c +++ b/src/libtracker-data/tracker-data-manager.c @@ -66,9 +66,9 @@ #define ZLIBBUFSIZ 8192 static gchar *ontologies_dir; -static gchar *ontology_name_stored; -static gchar *loc_stored; -static gchar *domain_stored; +static gchar *ontology_location_stored; +static gchar *cache_location_stored; +static gchar *data_location_stored; static gboolean initialized; static gboolean reloading = FALSE; #ifndef DISABLE_JOURNAL @@ -3540,7 +3540,9 @@ tracker_data_manager_reload (TrackerBusyCallback busy_callback, /* And initialize it again, this actually triggers index recreation. */ status = tracker_data_manager_init (flags, - loc_stored, domain_stored, ontology_name_stored, + cache_location_stored, + data_location_stored, + ontology_location_stored, NULL, &is_first, TRUE, @@ -3676,11 +3678,21 @@ tracker_data_manager_init_fts (TrackerDBInterface *iface, #endif } +const gchar * tracker_data_manager_get_cache_location() +{ + return cache_location_stored; +} + +const gchar * tracker_data_manager_get_data_location () +{ + return data_location_stored; +} + gboolean tracker_data_manager_init (TrackerDBManagerFlags flags, - const gchar *loc, - const gchar *domain, - const gchar *ontology_name, + const gchar *cache_location, + const gchar *data_location, + const gchar *ontology_location, const gchar **test_schemas, gboolean *first_time, gboolean journal_check, @@ -3739,7 +3751,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, #endif if (!tracker_db_manager_init (flags, - loc, domain, ontology_name, + cache_location, + data_location, &is_first_time_index, restoring_backup, FALSE, @@ -3809,40 +3822,47 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, env_path = g_getenv ("TRACKER_DB_ONTOLOGIES_DIR"); - g_free (loc_stored); - - if (loc != NULL) - loc_stored = g_strdup(loc); + g_free (cache_location_stored); + if (cache_location != NULL) + cache_location_stored = g_strdup(cache_location); else - loc_stored = NULL; + cache_location_stored = NULL; - g_free (ontology_name_stored); + g_free (ontology_location_stored); + if (ontology_location != NULL) + ontology_location_stored = g_strdup(ontology_location); + else + ontology_location_stored = NULL; - if (ontology_name != NULL) - ontology_name_stored = g_strdup(ontology_name); + g_free (data_location_stored); + if (data_location != NULL) + data_location_stored = g_strdup(data_location); else - ontology_name = NULL; + data_location_stored = NULL; - if (domain == NULL) - domain = "tracker"; - g_free (domain_stored); - domain_stored = g_strdup(domain); if (G_LIKELY (!env_path)) { - if (ontology_name == NULL) { - ontologies_dir = g_build_filename (SHAREDIR, - domain, - "ontologies", - NULL); + if (ontology_location == NULL) { + /* SHAREDIR/tracker/ontologies */ + ontologies_dir = g_build_filename (SHAREDIR, "tracker", + "ontologies", NULL); } else { - ontologies_dir = g_build_filename (SHAREDIR, - domain, - "ontologies", - ontology_name, - NULL); + /* Typically SHAREDIR/tracker/domain-ontologies/domain/ontology-name */ + ontologies_dir = g_strdup (ontology_location); } + + /* TODO: support GResource here */ if (!g_file_test (ontologies_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) { - g_critical ("%s is not a directory with an ontology", ontologies_dir); + g_set_error (error, TRACKER_DATA_ONTOLOGY_ERROR, + TRACKER_DATA_ONTOLOGY_NOT_FOUND, + "'%s' is not a ontology location", ontologies_dir); + tracker_db_manager_shutdown (); + tracker_ontologies_shutdown (); + if (!reloading) { + tracker_locale_shutdown (); + } + tracker_data_update_shutdown (); + return FALSE; } } else { ontologies_dir = g_strdup (env_path); @@ -3860,8 +3880,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, } else { if (internal_error) { if (!g_error_matches (internal_error, - TRACKER_DB_JOURNAL_ERROR, - TRACKER_DB_JOURNAL_ERROR_BEGIN_OF_JOURNAL)) { + TRACKER_DB_JOURNAL_ERROR, + TRACKER_DB_JOURNAL_ERROR_BEGIN_OF_JOURNAL)) { g_propagate_error (error, internal_error); tracker_db_manager_shutdown (); @@ -3893,7 +3913,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, if (!read_journal) { /* Truncate journal as it does not even contain a single valid transaction * or is explicitly ignored (journal_check == FALSE, only for test cases) */ - tracker_db_journal_init (NULL, TRUE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + TRUE, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); @@ -3916,6 +3937,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, GError *ontology_error = NULL; gchar *ontology_path; g_debug ("Loading ontology %s", (char *) l->data); + + /* TODO: support GResource here */ ontology_path = g_build_filename (ontologies_dir, l->data, NULL); load_ontology_file_from_path (ontology_path, &max_id, @@ -4027,6 +4050,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, /* store ontology in database */ for (l = sorted; l; l = l->next) { + /* TODO: support GResource here */ gchar *ontology_path = g_build_filename (ontologies_dir, l->data, NULL); import_ontology_path (ontology_path, FALSE, !journal_check); g_free (ontology_path); @@ -4072,7 +4096,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, if (!read_only) { #ifndef DISABLE_JOURNAL - tracker_db_journal_init (NULL, FALSE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + FALSE, &internal_error); if (internal_error) { g_propagate_error (error, internal_error); @@ -4142,6 +4167,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, for (l = sorted; l; l = l->next) { gchar *ontology_path; + /* TODO: support GResource here */ ontology_path = g_build_filename (ontologies_dir, l->data, NULL); ontos = g_list_append (ontos, ontology_path); } @@ -4301,7 +4327,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4392,7 +4420,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4500,7 +4530,9 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, tracker_data_manager_shutdown (); return tracker_data_manager_init (flags | TRACKER_DB_MANAGER_DO_NOT_CHECK_ONTOLOGY, - loc, domain, ontology_name, + cache_location, + data_location, + ontology_location, test_schemas, first_time, journal_check, @@ -4619,7 +4651,8 @@ tracker_data_manager_init (TrackerDBManagerFlags flags, in_journal_replay = FALSE; /* open journal for writing */ - tracker_db_journal_init (NULL, FALSE, &internal_error); + tracker_db_journal_init (NULL, cache_location, data_location, + FALSE, &internal_error); if (internal_error) { g_hash_table_unref (uri_id_map); |