[tracker/wip/carlosg/domain-ontologies: 16/93] libtracker-data: Take a GFile for ontology location in the data manager



commit e0fff9e5403ace59cbd7003c079b113e945571ef
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue May 30 14:16:51 2017 +0200

    libtracker-data: Take a GFile for ontology location in the data manager
    
    The other tracker_data_manager_init() arguments taking file paths will
    follow. This fully exposes the ability to load ontologies from resource://
    locations.

 src/libtracker-data/libtracker-data.vapi   |    4 +-
 src/libtracker-data/tracker-data-backup.c  |    2 +-
 src/libtracker-data/tracker-data-backup.h  |    2 +-
 src/libtracker-data/tracker-data-manager.c |   47 ++++++++++++++-------------
 src/libtracker-data/tracker-data-manager.h |    2 +-
 src/libtracker-direct/tracker-direct.vala  |    4 +-
 src/tracker-store/tracker-main.vala        |    4 +-
 7 files changed, 33 insertions(+), 32 deletions(-)
---
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi
index dd641e5..42b2eb0 100644
--- a/src/libtracker-data/libtracker-data.vapi
+++ b/src/libtracker-data/libtracker-data.vapi
@@ -224,12 +224,12 @@ namespace Tracker {
                public delegate void BackupFinished (GLib.Error error);
 
                public void backup_save (GLib.File destination, owned BackupFinished callback);
-               public void backup_restore (GLib.File journal, string? cache_location, string? data_location, 
string? ontology_location, [CCode (array_length = false)] string[]? test_schema, BusyCallback busy_callback) 
throws GLib.Error;
+               public void backup_restore (GLib.File journal, string? cache_location, string? data_location, 
GLib.File? ontology_location, [CCode (array_length = false)] string[]? test_schema, BusyCallback 
busy_callback) throws GLib.Error;
        }
 
        [CCode (cheader_filename = "libtracker-data/tracker-data-manager.h")]
        namespace Data.Manager {
-               public bool init (DBManagerFlags flags, string? cache_location, string? data_location, 
string? ontology_location, [CCode (array_length = false)] string[]? test_schema, out bool first_time, bool 
journal_check, bool restoring_backup, uint select_cache_size, uint update_cache_size, BusyCallback? 
busy_callback, string? busy_status) throws DBInterfaceError, DBJournalError;
+               public bool init (DBManagerFlags flags, string? cache_location, string? data_location, 
GLib.File? ontology_location, [CCode (array_length = false)] string[]? test_schema, out bool first_time, bool 
journal_check, bool restoring_backup, uint select_cache_size, uint update_cache_size, BusyCallback? 
busy_callback, string? busy_status) throws DBInterfaceError, DBJournalError;
                public void shutdown ();
        }
 
diff --git a/src/libtracker-data/tracker-data-backup.c b/src/libtracker-data/tracker-data-backup.c
index 5065f1f..ee9430e 100644
--- a/src/libtracker-data/tracker-data-backup.c
+++ b/src/libtracker-data/tracker-data-backup.c
@@ -585,7 +585,7 @@ void
 tracker_data_backup_restore (GFile                *journal,
                              const gchar          *cache_location,
                              const gchar          *data_location,
-                             const gchar          *ontology_location,
+                             GFile                *ontology_location,
                              const gchar         **test_schemas,
                              TrackerBusyCallback   busy_callback,
                              gpointer              busy_user_data,
diff --git a/src/libtracker-data/tracker-data-backup.h b/src/libtracker-data/tracker-data-backup.h
index e02bbc0..e85ba66 100644
--- a/src/libtracker-data/tracker-data-backup.h
+++ b/src/libtracker-data/tracker-data-backup.h
@@ -50,7 +50,7 @@ void   tracker_data_backup_save        (GFile                     *destination,
 void   tracker_data_backup_restore     (GFile                     *journal,
                                         const gchar               *cache_location,
                                         const gchar               *data_location,
-                                        const gchar               *ontology_location,
+                                        GFile                     *ontology_location,
                                         const gchar              **test_schema,
                                         TrackerBusyCallback        busy_callback,
                                         gpointer                   busy_user_data,
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 1fca650..14ccf30 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -65,8 +65,8 @@
 
 #define ZLIBBUFSIZ 8192
 
-static gchar    *ontologies_dir;
-static gchar    *ontology_location_stored;
+static GFile    *ontologies_dir = NULL;
+static GFile    *ontology_location_stored = NULL;
 static gchar    *cache_location_stored;
 static gchar    *data_location_stored;
 static gboolean  initialized;
@@ -3419,14 +3419,12 @@ compare_file_names (GFile *file_a,
 }
 
 static GList*
-get_ontologies (const gchar  *ontologies_dir,
-                GError      **error)
+get_ontologies (GFile   *ontologies,
+                GError **error)
 {
        GFileEnumerator *enumerator;
-       GFile *ontologies;
        GList *sorted = NULL;
 
-       ontologies = g_file_new_for_path (ontologies_dir);
        enumerator = g_file_enumerate_children (ontologies,
                                                G_FILE_ATTRIBUTE_STANDARD_NAME,
                                                G_FILE_QUERY_INFO_NONE,
@@ -3728,7 +3726,7 @@ gboolean
 tracker_data_manager_init (TrackerDBManagerFlags   flags,
                            const gchar            *cache_location,
                            const gchar            *data_location,
-                           const gchar            *ontology_location,
+                           GFile                  *ontology_location,
                            const gchar           **test_schemas,
                            gboolean               *first_time,
                            gboolean                journal_check,
@@ -3864,11 +3862,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
        else
                cache_location_stored = NULL;
 
-       g_free (ontology_location_stored);
-       if (ontology_location != NULL)
-               ontology_location_stored = g_strdup(ontology_location);
-       else
-               ontology_location_stored = NULL;
+       g_set_object (&ontology_location_stored, ontology_location);
 
        g_free (data_location_stored);
        if (data_location != NULL)
@@ -3879,19 +3873,26 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
 
        if (G_LIKELY (!env_path)) {
                if (ontology_location == NULL) {
+                       gchar *file_path;
+
                        /* SHAREDIR/tracker/ontologies */
-                       ontologies_dir = g_build_filename (SHAREDIR, "tracker",
-                                                          "ontologies", NULL);
+                       file_path = g_build_filename (SHAREDIR, "tracker",
+                                                     "ontologies", NULL);
+                       ontologies_dir = g_file_new_for_path (file_path);
+                       g_free (file_path);
                } else {
                        /* Typically SHAREDIR/tracker/domain-ontologies/domain/ontology-name */
-                       ontologies_dir = g_strdup (ontology_location);
+                       ontologies_dir = g_object_ref (ontology_location);
                }
 
-               /* TODO: support GResource here */
-               if (!g_file_test (ontologies_dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+               if (g_file_query_file_type (ontologies_dir, G_FILE_QUERY_INFO_NONE, NULL) != 
G_FILE_TYPE_DIRECTORY) {
+                       gchar *uri;
+
+                       uri = g_file_get_uri (ontologies_dir);
                        g_set_error (error, TRACKER_DATA_ONTOLOGY_ERROR,
                                     TRACKER_DATA_ONTOLOGY_NOT_FOUND,
-                                    "'%s' is not a ontology location", ontologies_dir);
+                                    "'%s' is not a ontology location", uri);
+                       g_free (uri);
                        tracker_db_manager_shutdown ();
                        tracker_ontologies_shutdown ();
                        if (!reloading) {
@@ -3901,7 +3902,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
                        return FALSE;
                }
        } else {
-               ontologies_dir = g_strdup (env_path);
+               ontologies_dir = g_file_new_for_path (env_path);
        }
 
 #ifndef DISABLE_JOURNAL
@@ -4359,7 +4360,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
                                                if (ontos) {
                                                        g_list_free_full (ontos, g_object_unref);
                                                }
-                                               g_free (ontologies_dir);
+                                               g_object_unref (ontologies_dir);
                                                if (uri_id_map) {
                                                        g_hash_table_unref (uri_id_map);
                                                }
@@ -4453,7 +4454,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
                                        if (ontos) {
                                                g_list_free_full (ontos, g_object_unref);
                                        }
-                                       g_free (ontologies_dir);
+                                       g_clear_object (&ontologies_dir);
                                        if (uri_id_map) {
                                                g_hash_table_unref (uri_id_map);
                                        }
@@ -4562,7 +4563,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
                                if (ontos) {
                                        g_list_free_full (ontos, g_object_unref);
                                }
-                               g_free (ontologies_dir);
+                               g_clear_object (&ontologies_dir);
                                if (uri_id_map) {
                                        g_hash_table_unref (uri_id_map);
                                }
@@ -4759,7 +4760,7 @@ tracker_data_manager_init (TrackerDBManagerFlags   flags,
 
        initialized = TRUE;
 
-       g_free (ontologies_dir);
+       g_clear_object (&ontologies_dir);
 
        /* This is the only one which doesn't show the 'OPERATION' part */
        if (busy_callback) {
diff --git a/src/libtracker-data/tracker-data-manager.h b/src/libtracker-data/tracker-data-manager.h
index 0dcd210..3d3e141 100644
--- a/src/libtracker-data/tracker-data-manager.h
+++ b/src/libtracker-data/tracker-data-manager.h
@@ -47,9 +47,9 @@ typedef enum {
 
 GQuark   tracker_data_ontology_error_quark           (void);
 gboolean tracker_data_manager_init                   (TrackerDBManagerFlags   flags,
-                                                      const gchar            *ontology_location,
                                                       const gchar            *cache_location,
                                                       const gchar            *data_location,
+                                                      GFile                  *ontology_location,
                                                       const gchar           **test_schema,
                                                       gboolean               *first_time,
                                                       gboolean                journal_check,
diff --git a/src/libtracker-direct/tracker-direct.vala b/src/libtracker-direct/tracker-direct.vala
index 256f295..f89f317 100644
--- a/src/libtracker-direct/tracker-direct.vala
+++ b/src/libtracker-direct/tracker-direct.vala
@@ -49,7 +49,7 @@ public class Tracker.Direct.Connection : Tracker.Sparql.Connection {
                }
        }
 
-        public Connection.custom_ontology (string? loc, string? domain, string? ontology_name) throws 
Sparql.Error, IOError, DBusError {
+        public Connection.custom_ontology (string? loc, string? domain, File? ontology_loc) throws 
Sparql.Error, IOError, DBusError {
                try {
                        if (use_count == 0) {
                                // make sure that current locale vs db locale are the same,
@@ -65,7 +65,7 @@ public class Tracker.Direct.Connection : Tracker.Sparql.Connection {
                                }
 
                                Data.Manager.init (DBManagerFlags.READONLY | DBManagerFlags.ENABLE_MUTEXES,
-                                                  loc, domain, ontology_name,
+                                                  loc, domain, ontology_loc,
                                                   null, null, false, false, select_cache_size, 0, null, 
null);
                        }
 
diff --git a/src/tracker-store/tracker-main.vala b/src/tracker-store/tracker-main.vala
index 96bc03f..271d87d 100644
--- a/src/tracker-store/tracker-main.vala
+++ b/src/tracker-store/tracker-main.vala
@@ -347,8 +347,8 @@ License which can be viewed at:
                try {
                        string final_cache_location = cache_location != null ? cache_location.replace 
("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null;
                        string final_data_location = data_location != null ? data_location.replace ("%HOME%", 
Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null;
-                       string final_ontology_location = ontology_location != null ? 
ontology_location.replace ("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR) : null;
-                       
+                       File final_ontology_location = ontology_location != null ? File.new_for_path 
(ontology_location.replace ("%HOME%", Environment.get_home_dir()).replace("%SHAREDIR%", SHAREDIR)) : null;
+
                        Tracker.Data.Manager.init (flags,
                                                   final_cache_location,
                                                   final_data_location,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]