[gnome-settings-daemon] Move over the install root setting from gnome-packagekit to the updates plugin



commit 7199ee1d068f2b211cb868413f24adebf39d9f8d
Author: Richard Hughes <richard hughsie com>
Date:   Wed Feb 16 10:24:52 2011 +0000

    Move over the install root setting from gnome-packagekit to the updates plugin
    
    This is used by LTSP to allow the user to install and remove packages
    to a prefix, and is per-user specific.

 ...ttings-daemon.plugins.updates.gschema.xml.in.in |    5 ++
 plugins/updates/gsd-updates-manager.c              |   55 ++++++++++++++++++++
 2 files changed, 60 insertions(+), 0 deletions(-)
---
diff --git a/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in b/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
index 44c694f..3220b98 100644
--- a/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
+++ b/data/org.gnome.settings-daemon.plugins.updates.gschema.xml.in.in
@@ -5,5 +5,10 @@
       <_summary>Activation of this plugin</_summary>
       <_description>Whether this plugin would be activated by gnome-settings-daemon or not</_description>
     </key>
+    <key name="install-root" type="s">
+      <default>'/'</default>
+      <_summary>The install root to use when adding and removing packages</_summary>
+      <_description>The install root to use when processing packages, which is changed when using LTSP or when testing.</_description>
+    </key>
   </schema>
 </schemalist>
diff --git a/plugins/updates/gsd-updates-manager.c b/plugins/updates/gsd-updates-manager.c
index 3c69a31..63b1918 100644
--- a/plugins/updates/gsd-updates-manager.c
+++ b/plugins/updates/gsd-updates-manager.c
@@ -39,6 +39,7 @@ struct GsdUpdatesManagerPrivate
 {
         GSettings *settings_http;
         GSettings *settings_ftp;
+        GSettings *settings_gsd;
         PkControl *control;
         guint      timeout;
 };
@@ -171,6 +172,42 @@ reload_proxy_settings (GsdUpdatesManager *manager)
 }
 
 static void
+set_install_root_cb (GObject *object, GAsyncResult *res, gpointer user_data)
+{
+        gboolean ret;
+        GError *error = NULL;
+        PkControl *control = PK_CONTROL (object);
+
+        /* get the result */
+        ret = pk_control_set_root_finish (control, res, &error);
+        if (!ret) {
+                g_warning ("failed to set install root: %s", error->message);
+                g_error_free (error);
+        }
+}
+
+static void
+set_install_root (GsdUpdatesManager *manager)
+{
+        gchar *root;
+
+        /* get install root */
+        root = g_settings_get_string (manager->priv->settings_gsd,
+                                      "install-root");
+        if (root == NULL) {
+                g_warning ("could not read install root");
+                goto out;
+        }
+
+        pk_control_set_root_async (manager->priv->control,
+                                   root,
+                                   NULL,
+                                   set_install_root_cb, manager);
+out:
+        g_free (root);
+}
+
+static void
 settings_changed_cb (GSettings         *settings,
                      const char        *key,
                      GsdUpdatesManager *manager)
@@ -178,6 +215,14 @@ settings_changed_cb (GSettings         *settings,
         reload_proxy_settings (manager);
 }
 
+static void
+settings_gsd_changed_cb (GSettings         *settings,
+                         const char        *key,
+                         GsdUpdatesManager *manager)
+{
+        set_install_root (manager);
+}
+
 gboolean
 gsd_updates_manager_start (GsdUpdatesManager *manager,
                            GError **error)
@@ -196,8 +241,14 @@ gsd_updates_manager_start (GsdUpdatesManager *manager,
         g_signal_connect (manager->priv->settings_ftp, "changed",
                           G_CALLBACK (settings_changed_cb), manager);
 
+        /* get ftp settings */
+        manager->priv->settings_gsd = g_settings_new ("org.gnome.settings-daemon.plugins.updates");
+        g_signal_connect (manager->priv->settings_gsd, "changed",
+                          G_CALLBACK (settings_gsd_changed_cb), manager);
+
         /* coldplug */
         reload_proxy_settings (manager);
+        set_install_root (manager);
 
         g_debug ("Starting updates manager");
 
@@ -217,6 +268,10 @@ gsd_updates_manager_stop (GsdUpdatesManager *manager)
                 g_object_unref (manager->priv->settings_ftp);
                 manager->priv->settings_ftp = NULL;
         }
+        if (manager->priv->settings_gsd != NULL) {
+                g_object_unref (manager->priv->settings_gsd);
+                manager->priv->settings_gsd = NULL;
+        }
         if (manager->priv->control != NULL) {
                 g_object_unref (manager->priv->control);
                 manager->priv->control = NULL;



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