Matej Habrnal 34dad7
From 70b2e6981b667d5cfb31f894527e16f3eeed14c9 Mon Sep 17 00:00:00 2001
Matej Habrnal 34dad7
From: Jakub Filak <jfilak@redhat.com>
Matej Habrnal 34dad7
Date: Fri, 15 May 2015 14:45:40 +0200
Matej Habrnal 34dad7
Subject: [PATCH] applet: migrate Autoreporting options to GSettings
Matej Habrnal 34dad7
Matej Habrnal 34dad7
Read the option's value from the app's configuration file, update the
Matej Habrnal 34dad7
gnome setting if needed and remove the option from the app's
Matej Habrnal 34dad7
configuration file in order to skip the migration at next start.
Matej Habrnal 34dad7
Matej Habrnal 34dad7
Related to #966
Matej Habrnal 34dad7
Matej Habrnal 34dad7
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal 34dad7
---
Matej Habrnal 34dad7
 src/applet/applet.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++-----
Matej Habrnal 34dad7
 1 file changed, 55 insertions(+), 5 deletions(-)
Matej Habrnal 34dad7
Matej Habrnal 34dad7
diff --git a/src/applet/applet.c b/src/applet/applet.c
Matej Habrnal 34dad7
index 4df69fc..b534839 100644
Matej Habrnal 34dad7
--- a/src/applet/applet.c
Matej Habrnal 34dad7
+++ b/src/applet/applet.c
Matej Habrnal 34dad7
@@ -36,6 +36,10 @@
Matej Habrnal 34dad7
 #include "libabrt.h"
Matej Habrnal 34dad7
 #include "problem_api.h"
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
+#define APP_NAME "abrt-applet"
Matej Habrnal 34dad7
+#define GS_SCHEMA_ID_PRIVACY "org.gnome.desktop.privacy"
Matej Habrnal 34dad7
+#define GS_PRIVACY_OPT_AUTO_REPORTING "report-technical-problems"
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
 /* libnotify action keys */
Matej Habrnal 34dad7
 #define A_REPORT_REPORT "REPORT"
Matej Habrnal 34dad7
 #define A_RESTART_APPLICATION "RESTART"
Matej Habrnal 34dad7
@@ -55,15 +59,60 @@ static bool is_autoreporting_enabled(void)
Matej Habrnal 34dad7
     GSettings *settings;
Matej Habrnal 34dad7
     gboolean ret;
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
-    settings = g_settings_new ("org.gnome.desktop.privacy");
Matej Habrnal 34dad7
-    ret = g_settings_get_boolean (settings, "report-technical-problems");
Matej Habrnal 34dad7
+    settings = g_settings_new (GS_SCHEMA_ID_PRIVACY);
Matej Habrnal 34dad7
+    ret = g_settings_get_boolean (settings, GS_PRIVACY_OPT_AUTO_REPORTING);
Matej Habrnal 34dad7
     g_object_unref (settings);
Matej Habrnal 34dad7
     return ret;
Matej Habrnal 34dad7
 }
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
+static void migrate_auto_reporting_to_gsettings(void)
Matej Habrnal 34dad7
+{
Matej Habrnal 34dad7
+#define OPT_NAME "AutoreportingEnabled"
Matej Habrnal 34dad7
+    map_string_t *settings = new_map_string();
Matej Habrnal 34dad7
+    if (!load_app_conf_file(APP_NAME, settings))
Matej Habrnal 34dad7
+        goto finito;
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    /* Silently ignore not configured options */
Matej Habrnal 34dad7
+    int sv_logmode = logmode;
Matej Habrnal 34dad7
+    /* but only if we run in silent mode (no -v on command line) */
Matej Habrnal 34dad7
+    logmode = g_verbose == 0 ? 0 : sv_logmode;
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    int auto_reporting = 0;
Matej Habrnal 34dad7
+    int configured = try_get_map_string_item_as_bool(settings, OPT_NAME, &auto_reporting);
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    logmode = sv_logmode;
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    if (!configured)
Matej Habrnal 34dad7
+        goto finito;
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    /* Enable the GS option if AutoreportingEnabled is true because the user
Matej Habrnal 34dad7
+     * turned the Autoreporting in abrt-applet in a before GS.
Matej Habrnal 34dad7
+     *
Matej Habrnal 34dad7
+     * Do not disable the GS option if AutoreportingEvent is false because the
Matej Habrnal 34dad7
+     * GS option is false by default, thus disabling would revert the user's
Matej Habrnal 34dad7
+     * decision to  automatically report technical problems.
Matej Habrnal 34dad7
+     */
Matej Habrnal 34dad7
+    if (auto_reporting)
Matej Habrnal 34dad7
+    {
Matej Habrnal 34dad7
+        GSettings *settings = g_settings_new(GS_SCHEMA_ID_PRIVACY);
Matej Habrnal 34dad7
+        g_settings_set_boolean(settings, GS_PRIVACY_OPT_AUTO_REPORTING, TRUE);
Matej Habrnal 34dad7
+        g_object_unref(settings);
Matej Habrnal 34dad7
+    }
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    remove_map_string_item(settings, OPT_NAME);
Matej Habrnal 34dad7
+    save_app_conf_file(APP_NAME, settings);
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+    log("Successfully migrated "APP_NAME":"OPT_NAME" to "GS_SCHEMA_ID_PRIVACY":"GS_PRIVACY_OPT_AUTO_REPORTING);
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
+#undef OPT_NAME
Matej Habrnal 34dad7
+finito:
Matej Habrnal 34dad7
+    free_map_string(settings);
Matej Habrnal 34dad7
+    return;
Matej Habrnal 34dad7
+}
Matej Habrnal 34dad7
+
Matej Habrnal 34dad7
 static const char *get_autoreport_event_name(void)
Matej Habrnal 34dad7
 {
Matej Habrnal 34dad7
-    load_user_settings("abrt-applet");
Matej Habrnal 34dad7
+    load_user_settings(APP_NAME);
Matej Habrnal 34dad7
     const char *configured = get_user_setting("AutoreportingEvent");
Matej Habrnal 34dad7
     return configured ? configured : g_settings_autoreporting_event;
Matej Habrnal 34dad7
 }
Matej Habrnal 34dad7
@@ -554,7 +603,7 @@ static NotifyNotification *new_warn_notification(const char *body)
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     notify_notification_set_urgency(notification, NOTIFY_URGENCY_NORMAL);
Matej Habrnal 34dad7
     notify_notification_set_timeout(notification, NOTIFY_EXPIRES_DEFAULT);
Matej Habrnal 34dad7
-    notify_notification_set_hint(notification, "desktop-entry", g_variant_new_string("abrt-applet"));
Matej Habrnal 34dad7
+    notify_notification_set_hint(notification, "desktop-entry", g_variant_new_string(APP_NAME));
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     return notification;
Matej Habrnal 34dad7
 }
Matej Habrnal 34dad7
@@ -1147,13 +1196,14 @@ int main(int argc, char** argv)
Matej Habrnal 34dad7
     /*unsigned opts =*/ parse_opts(argc, argv, program_options, program_usage_string);
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     migrate_to_xdg_dirs();
Matej Habrnal 34dad7
+    migrate_auto_reporting_to_gsettings();
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     export_abrt_envvars(0);
Matej Habrnal 34dad7
     msg_prefix = g_progname;
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     load_abrt_conf();
Matej Habrnal 34dad7
     load_event_config_data();
Matej Habrnal 34dad7
-    load_user_settings("abrt-applet");
Matej Habrnal 34dad7
+    load_user_settings(APP_NAME);
Matej Habrnal 34dad7
 
Matej Habrnal 34dad7
     /* Initialize our (dbus_abrt) machinery by filtering
Matej Habrnal 34dad7
      * for signals:
Matej Habrnal 34dad7
-- 
Matej Habrnal 34dad7
2.4.1
Matej Habrnal 34dad7