[tracker] tracker-control: Avoid using duplicate code to get dbus connection/proxy



commit 5e72dce640890ce73e360c953997c5650afec1c8
Author: Martyn Russell <martyn lanedo com>
Date:   Wed Apr 23 11:33:33 2014 +0100

    tracker-control: Avoid using duplicate code to get dbus connection/proxy

 src/tracker-control/tracker-control-general.c |   80 ++++++-------------------
 src/tracker-control/tracker-control-status.c  |   72 +++++++----------------
 src/tracker-control/tracker-control.c         |   43 +++++++++++++
 src/tracker-control/tracker-control.h         |    7 ++
 4 files changed, 89 insertions(+), 113 deletions(-)
---
diff --git a/src/tracker-control/tracker-control-general.c b/src/tracker-control/tracker-control-general.c
index 315fa91..fc6aa91 100644
--- a/src/tracker-control/tracker-control-general.c
+++ b/src/tracker-control/tracker-control-general.c
@@ -1264,41 +1264,19 @@ tracker_control_general_run (void)
                GVariant *v;
                gchar *uri;
 
-               uri = get_uri_from_arg (backup);
-
-               g_print ("%s\n", _("Backing up database"));
-               g_print ("  %s\n", uri);
-
-               connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error);
-
-               if (!connection) {
-                       g_critical ("%s, %s",
-                                   _("Could not get D-Bus connection"),
-                                   error ? error->message : _("No error given"));
-                       g_clear_error (&error);
-                       g_free (uri);
-
+               if (!tracker_control_dbus_get_connection ("org.freedesktop.Tracker1",
+                                                         "/org/freedesktop/Tracker1/Backup",
+                                                         "org.freedesktop.Tracker1.Backup",
+                                                         G_DBUS_PROXY_FLAGS_NONE,
+                                                         &connection,
+                                                         &proxy)) {
                        return EXIT_FAILURE;
                }
 
-               proxy = g_dbus_proxy_new_sync (connection,
-                                              G_DBUS_PROXY_FLAGS_NONE,
-                                              NULL,
-                                              "org.freedesktop.Tracker1",
-                                              "/org/freedesktop/Tracker1/Backup",
-                                              "org.freedesktop.Tracker1.Backup",
-                                              NULL,
-                                              &error);
-
-               if (error) {
-                       g_critical ("%s, %s",
-                                   _("Could not create D-Bus proxy to tracker-store"),
-                                   error ? error->message : _("No error given"));
-                       g_clear_error (&error);
-                       g_free (uri);
+               uri = get_uri_from_arg (backup);
 
-                       return EXIT_FAILURE;
-               }
+               g_print ("%s\n", _("Backing up database"));
+               g_print ("  %s\n", uri);
 
                /* Backup/Restore can take some time */
                g_dbus_proxy_set_default_timeout (proxy, G_MAXINT);
@@ -1339,41 +1317,19 @@ tracker_control_general_run (void)
                GVariant *v;
                gchar *uri;
 
-               uri = get_uri_from_arg (restore);
-
-               g_print ("%s\n", _("Restoring database from backup"));
-               g_print ("  %s\n", uri);
-
-               connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error);
-
-               if (!connection) {
-                       g_critical ("%s, %s",
-                                   _("Could not get D-Bus connection"),
-                                   error ? error->message : _("No error given"));
-                       g_clear_error (&error);
-                       g_free (uri);
-
+               if (!tracker_control_dbus_get_connection ("org.freedesktop.Tracker1",
+                                                         "/org/freedesktop/Tracker1/Backup",
+                                                         "org.freedesktop.Tracker1.Backup",
+                                                         G_DBUS_PROXY_FLAGS_NONE,
+                                                         &connection,
+                                                         &proxy)) {
                        return EXIT_FAILURE;
                }
 
-               proxy = g_dbus_proxy_new_sync (connection,
-                                              G_DBUS_PROXY_FLAGS_NONE,
-                                              NULL,
-                                              "org.freedesktop.Tracker1",
-                                              "/org/freedesktop/Tracker1/Backup",
-                                              "org.freedesktop.Tracker1.Backup",
-                                              NULL,
-                                              &error);
-
-               if (error) {
-                       g_critical ("%s, %s",
-                                   _("Could not create D-Bus proxy to tracker-store"),
-                                   error ? error->message : _("No error given"));
-                       g_clear_error (&error);
-                       g_free (uri);
+               uri = get_uri_from_arg (restore);
 
-                       return EXIT_FAILURE;
-               }
+               g_print ("%s\n", _("Restoring database from backup"));
+               g_print ("  %s\n", uri);
 
                /* Backup/Restore can take some time */
                g_dbus_proxy_set_default_timeout (proxy, G_MAXINT);
diff --git a/src/tracker-control/tracker-control-status.c b/src/tracker-control/tracker-control-status.c
index 94a1290..4e12b37 100644
--- a/src/tracker-control/tracker-control-status.c
+++ b/src/tracker-control/tracker-control-status.c
@@ -452,56 +452,6 @@ store_progress (GDBusConnection *connection,
        store_print_state (status, progress);
 }
 
-static gboolean
-store_init (void)
-{
-       GError *error = NULL;
-
-       if (connection && proxy) {
-               return TRUE;
-       }
-
-       connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error);
-
-       if (!connection) {
-               g_critical ("%s, %s",
-                           _("Could not get D-Bus connection"),
-                           error ? error->message : _("No error given"));
-               g_clear_error (&error);
-               return FALSE;
-       }
-
-       proxy = g_dbus_proxy_new_sync (connection,
-                                      G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
-                                      NULL,
-                                      "org.freedesktop.Tracker1",
-                                      "/org/freedesktop/Tracker1/Status",
-                                      "org.freedesktop.Tracker1.Status",
-                                      NULL,
-                                      &error);
-
-       if (error) {
-               g_critical ("%s, %s",
-                           _("Could not create D-Bus proxy to tracker-store"),
-                           error ? error->message : _("No error given"));
-               g_clear_error (&error);
-               return FALSE;
-       }
-
-       g_dbus_connection_signal_subscribe (connection,
-                                           "org.freedesktop.Tracker1",
-                                           "org.freedesktop.Tracker1.Status",
-                                           "Progress",
-                                           "/org/freedesktop/Tracker1/Status",
-                                           NULL,
-                                           G_DBUS_SIGNAL_FLAGS_NONE,
-                                           store_progress,
-                                           NULL,
-                                           NULL);
-
-       return TRUE;
-}
-
 void
 tracker_control_status_run_default (void)
 {
@@ -564,7 +514,27 @@ tracker_control_status_run (void)
 
                /* Display states */
                g_print ("%s:\n", _("Store"));
-               store_init ();
+
+               if (!tracker_control_dbus_get_connection ("org.freedesktop.Tracker1",
+                                                         "/org/freedesktop/Tracker1/Status",
+                                                         "org.freedesktop.Tracker1.Status",
+                                                         G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START,
+                                                         &connection,
+                                                         &proxy)) {
+                       return EXIT_FAILURE;
+               }
+
+               g_dbus_connection_signal_subscribe (connection,
+                                                   "org.freedesktop.Tracker1",
+                                                   "org.freedesktop.Tracker1.Status",
+                                                   "Progress",
+                                                   "/org/freedesktop/Tracker1/Status",
+                                                   NULL,
+                                                   G_DBUS_SIGNAL_FLAGS_NONE,
+                                                   store_progress,
+                                                   NULL,
+                                                   NULL);
+
                store_get_and_print_state ();
 
                g_print ("\n");
diff --git a/src/tracker-control/tracker-control.c b/src/tracker-control/tracker-control.c
index fc76b8b..296913a 100644
--- a/src/tracker-control/tracker-control.c
+++ b/src/tracker-control/tracker-control.c
@@ -31,6 +31,7 @@
 #include <glib/gi18n.h>
 #include <glib/gprintf.h>
 #include <glib/gstdio.h>
+#include <gio/gio.h>
 
 #include <libtracker-common/tracker-common.h>
 
@@ -55,6 +56,48 @@ static GOptionEntry common_entries[] = {
        { NULL }
 };
 
+gboolean
+tracker_control_dbus_get_connection (const gchar      *name,
+                                     const gchar      *object_path,
+                                     const gchar      *interface_name,
+                                     GDBusProxyFlags   flags,
+                                     GDBusConnection **connection,
+                                     GDBusProxy      **proxy)
+{
+       GError *error = NULL;
+
+       *connection = g_bus_get_sync (TRACKER_IPC_BUS, NULL, &error);
+
+       if (!*connection) {
+               g_critical ("%s, %s",
+                           _("Could not get D-Bus connection"),
+                           error ? error->message : _("No error given"));
+               g_clear_error (&error);
+
+               return FALSE;
+       }
+
+       *proxy = g_dbus_proxy_new_sync (*connection,
+                                       flags,
+                                       NULL,
+                                       name,
+                                       object_path,
+                                       interface_name,
+                                       NULL,
+                                       &error);
+
+       if (error) {
+               g_critical ("%s, %s",
+                           _("Could not create D-Bus proxy to tracker-store"),
+                           error ? error->message : _("No error given"));
+               g_clear_error (&error);
+
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
 int
 main (int argc, char **argv)
 {
diff --git a/src/tracker-control/tracker-control.h b/src/tracker-control/tracker-control.h
index dc33d4c..2ced685 100644
--- a/src/tracker-control/tracker-control.h
+++ b/src/tracker-control/tracker-control.h
@@ -22,6 +22,13 @@
 #ifndef __TRACKER_CONTROL_H__
 #define __TRACKER_CONTROL_H__
 
+gboolean tracker_control_dbus_get_connection (const gchar      *name,
+                                              const gchar      *object_path,
+                                              const gchar      *interface_name,
+                                              GDBusProxyFlags   flags,
+                                              GDBusConnection **connection,
+                                              GDBusProxy      **proxy);
+
 GOptionGroup *tracker_control_general_get_option_group (void);
 gint          tracker_control_general_run              (void);
 void          tracker_control_general_run_default      (void);


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