[tracker/wip/carlosg/sparql1.1: 2/80] libtracker-data: Turn TrackerDBManager into a GObject



commit a8a2a830013c4b69ee135829082fe67194461931
Author: Carlos Garnacho <carlosg gnome org>
Date:   Mon Apr 22 12:58:26 2019 +0200

    libtracker-data: Turn TrackerDBManager into a GObject
    
    We want it to have signals and whatnot, plus could make the constructor
    function have less arguments in the future.

 src/libtracker-data/tracker-data-manager.c |  2 +-
 src/libtracker-data/tracker-db-manager.c   | 38 ++++++++++++++++++++++--------
 src/libtracker-data/tracker-db-manager.h   |  5 +++-
 src/tracker/tracker-reset.c                |  2 +-
 4 files changed, 34 insertions(+), 13 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index 31eaf0f14..512975c9b 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -4585,7 +4585,7 @@ tracker_data_manager_dispose (GObject *object)
                        tracker_db_manager_check_perform_vacuum (manager->db_manager);
                }
 
-               g_clear_pointer (&manager->db_manager, tracker_db_manager_free);
+               g_clear_object (&manager->db_manager);
        }
 
        G_OBJECT_CLASS (tracker_data_manager_parent_class)->dispose (object);
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index 09cbf4ded..f2546ff0c 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -128,6 +128,7 @@ static TrackerDBDefinition db_base = {
 };
 
 struct _TrackerDBManager {
+       GObject parent_instance;
        TrackerDBDefinition db;
        gboolean locations_initialized;
        gchar *data_dir;
@@ -147,6 +148,8 @@ struct _TrackerDBManager {
        GThread *wal_thread;
 };
 
+G_DEFINE_TYPE (TrackerDBManager, tracker_db_manager, G_TYPE_OBJECT)
+
 static gboolean            db_exec_no_reply                        (TrackerDBInterface   *iface,
                                                                     const gchar          *query,
                                                                     ...);
@@ -598,7 +601,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                return NULL;
        }
 
-       db_manager = g_new0 (TrackerDBManager, 1);
+       db_manager = g_object_new (TRACKER_TYPE_DB_MANAGER, NULL);
        db_manager->vtab_data = vtab_data;
 
        /* First set defaults for return values */
@@ -667,7 +670,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                                     TRACKER_DB_OPEN_ERROR,
                                     "Could not find database file:'%s'.", db_manager->db.abs_filename);
 
-                       tracker_db_manager_free (db_manager);
+                       g_object_unref (db_manager);
                        return NULL;
                }
        }
@@ -705,7 +708,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                                     TRACKER_DB_OPEN_ERROR,
                                     "No reindexing supported in read-only mode (direct access)");
 
-                       tracker_db_manager_free (db_manager);
+                       g_object_unref (db_manager);
                        return NULL;
                }
 
@@ -713,7 +716,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
 
                if (internal_error) {
                        g_propagate_error (error, internal_error);
-                       tracker_db_manager_free (db_manager);
+                       g_object_unref (db_manager);
                        return NULL;
                }
 
@@ -749,7 +752,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                                                     TRACKER_DB_INTERFACE_ERROR,
                                                     TRACKER_DB_OPEN_ERROR,
                                                     "Corrupt db file");
-                                       tracker_db_manager_free (db_manager);
+                                       g_object_unref (db_manager);
                                        return NULL;
                                }
                        }
@@ -765,7 +768,7 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                                                must_recreate = TRUE;
                                        } else {
                                                g_propagate_error (error, internal_error);
-                                               tracker_db_manager_free (db_manager);
+                                               g_object_unref (db_manager);
                                                return NULL;
                                        }
                                }
@@ -885,12 +888,12 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
                                /* Most serious error is the recreate one here */
                                g_clear_error (&internal_error);
                                g_propagate_error (error, new_error);
-                               tracker_db_manager_free (db_manager);
+                               g_object_unref (db_manager);
                                return NULL;
                        }
                } else {
                        g_propagate_error (error, internal_error);
-                       tracker_db_manager_free (db_manager);
+                       g_object_unref (db_manager);
                        return NULL;
                }
        }
@@ -901,8 +904,9 @@ tracker_db_manager_new (TrackerDBManagerFlags   flags,
 }
 
 void
-tracker_db_manager_free (TrackerDBManager *db_manager)
+tracker_db_manager_finalize (GObject *object)
 {
+       TrackerDBManager *db_manager = TRACKER_DB_MANAGER (object);
        gboolean readonly = (db_manager->flags & TRACKER_DB_MANAGER_READONLY) != 0;
 
        g_async_queue_unref (db_manager->interfaces);
@@ -930,7 +934,8 @@ tracker_db_manager_free (TrackerDBManager *db_manager)
        }
 
        g_free (db_manager->in_use_filename);
-       g_free (db_manager);
+
+       G_OBJECT_CLASS (tracker_db_manager_parent_class)->finalize (object);
 }
 
 void
@@ -1083,6 +1088,19 @@ tracker_db_manager_get_db_interface (TrackerDBManager *db_manager)
        return interface;
 }
 
+static void
+tracker_db_manager_init (TrackerDBManager *manager)
+{
+}
+
+static void
+tracker_db_manager_class_init (TrackerDBManagerClass *klass)
+{
+       GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+       object_class->finalize = tracker_db_manager_finalize;
+}
+
 static void
 wal_checkpoint (TrackerDBInterface *iface,
                 gboolean            blocking)
diff --git a/src/libtracker-data/tracker-db-manager.h b/src/libtracker-data/tracker-db-manager.h
index 432a39810..06dee6ba4 100644
--- a/src/libtracker-data/tracker-db-manager.h
+++ b/src/libtracker-data/tracker-db-manager.h
@@ -30,6 +30,10 @@ G_BEGIN_DECLS
 #error "only <libtracker-data/tracker-data.h> must be included directly."
 #endif
 
+#define TRACKER_TYPE_DB_MANAGER (tracker_db_manager_get_type ())
+G_DECLARE_FINAL_TYPE (TrackerDBManager, tracker_db_manager,
+                      TRACKER, DB_MANAGER, GObject)
+
 #define TRACKER_DB_CACHE_SIZE_DEFAULT 250
 #define TRACKER_DB_CACHE_SIZE_UPDATE 2000
 
@@ -57,7 +61,6 @@ TrackerDBManager   *tracker_db_manager_new                    (TrackerDBManagerF
                                                                GObject                *iface_data,
                                                                gpointer                vtab_data,
                                                                GError                **error);
-void                tracker_db_manager_free                   (TrackerDBManager      *db_manager);
 void                tracker_db_manager_remove_all             (TrackerDBManager      *db_manager);
 void                tracker_db_manager_optimize               (TrackerDBManager      *db_manager);
 const gchar *       tracker_db_manager_get_file               (TrackerDBManager      *db_manager);
diff --git a/src/tracker/tracker-reset.c b/src/tracker/tracker-reset.c
index 0c3acf7fd..18dab4e0d 100644
--- a/src/tracker/tracker-reset.c
+++ b/src/tracker/tracker-reset.c
@@ -264,7 +264,7 @@ reset_run (void)
                tracker_db_manager_remove_all (db_manager);
 
                tracker_db_manager_remove_version_file (db_manager);
-               tracker_db_manager_free (db_manager);
+               g_object_unref (db_manager);
 
                /* Unset log handler */
                g_log_remove_handler (NULL, log_handler_id);


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