diff options
author | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-03-06 22:08:03 +0800 |
---|---|---|
committer | Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> | 2012-03-06 23:15:17 +0800 |
commit | c69625323288a119356bb6627c00f21a74f32f24 (patch) | |
tree | db2adc21396be4a5413e23027ed3c498ba3c4fb0 | |
parent | aeab15ec37370f3c3aa8b4e1a4aec480109a6803 (diff) | |
download | gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar.gz gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar.bz2 gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar.lz gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar.xz gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.tar.zst gsoc2013-empathy-c69625323288a119356bb6627c00f21a74f32f24.zip |
Add magic to automatically run tasks when empathy-auth-client is started
empathy-auth-client is the best place to do such tasks as it will be run even
if using only the Shell without Empathy's UI.
https://bugzilla.gnome.org/show_bug.cgi?id=671452
-rw-r--r-- | data/org.gnome.Empathy.gschema.xml.in | 5 | ||||
-rw-r--r-- | libempathy/empathy-gsettings.h | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/empathy-auth-client.c | 3 | ||||
-rw-r--r-- | src/empathy-sanity-cleaning.c | 89 | ||||
-rw-r--r-- | src/empathy-sanity-cleaning.h | 27 |
6 files changed, 126 insertions, 0 deletions
diff --git a/data/org.gnome.Empathy.gschema.xml.in b/data/org.gnome.Empathy.gschema.xml.in index 8e7d9fd1b..8901d2138 100644 --- a/data/org.gnome.Empathy.gschema.xml.in +++ b/data/org.gnome.Empathy.gschema.xml.in @@ -28,6 +28,11 @@ <_summary>Empathy default download folder</_summary> <_description>The default folder to save file transfers in.</_description> </key> + <key name="sanity-cleaning-number" type="u"> + <default>0</default> + <_summary>Magic number used to check if sanity cleaning tasks should be run</_summary> + <_description>empathy-sanity-cleaning.c uses this number to check if the cleaning tasks should be executed or not. Users should not change this key manually.</_description> + </key> <child name="ui" schema="org.gnome.Empathy.ui"/> <child name="contacts" schema="org.gnome.Empathy.contacts"/> <child name="sounds" schema="org.gnome.Empathy.sounds"/> diff --git a/libempathy/empathy-gsettings.h b/libempathy/empathy-gsettings.h index fd05141ac..2863cf9a7 100644 --- a/libempathy/empathy-gsettings.h +++ b/libempathy/empathy-gsettings.h @@ -30,6 +30,7 @@ G_BEGIN_DECLS #define EMPATHY_PREFS_AUTOCONNECT "autoconnect" #define EMPATHY_PREFS_AUTOAWAY "autoaway" #define EMPATHY_PREFS_FILE_TRANSFER_DEFAULT_FOLDER "file-transfer-default-folder" +#define EMPATHY_PREFS_SANITY_CLEANING_NUMBER "sanity-cleaning-number" #define EMPATHY_PREFS_NOTIFICATIONS_SCHEMA EMPATHY_PREFS_SCHEMA ".notifications" #define EMPATHY_PREFS_NOTIFICATIONS_ENABLED "notifications-enabled" diff --git a/src/Makefile.am b/src/Makefile.am index 8ffdedc6a..dfde20558 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -102,6 +102,7 @@ libexec_PROGRAMS += empathy-av endif empathy_auth_client_SOURCES = \ + empathy-sanity-cleaning.c empathy-sanity-cleaning.h \ empathy-auth-client.c \ $(NULL) diff --git a/src/empathy-auth-client.c b/src/empathy-auth-client.c index 22a625229..ecf1ad173 100644 --- a/src/empathy-auth-client.c +++ b/src/empathy-auth-client.c @@ -41,6 +41,8 @@ #include <libempathy-gtk/empathy-tls-dialog.h> #include <libempathy-gtk/empathy-ui-utils.h> +#include "empathy-sanity-cleaning.h" + #include <gnutls/gnutls.h> #include <extensions/extensions.h> @@ -351,6 +353,7 @@ main (int argc, } start_timer (); + empathy_sanity_checking_run_if_needed (); gtk_main (); diff --git a/src/empathy-sanity-cleaning.c b/src/empathy-sanity-cleaning.c new file mode 100644 index 000000000..95353eb05 --- /dev/null +++ b/src/empathy-sanity-cleaning.c @@ -0,0 +1,89 @@ +/* + * empathy-sanity-cleaning.c + * Code automatically called when starting a specific version of Empathy for + * the first time doing misc cleaning. + * + * Copyright (C) 2012 Collabora Ltd. + * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include "empathy-sanity-cleaning.h" + +#include <telepathy-glib/telepathy-glib.h> + +#include <libempathy/empathy-gsettings.h> + +#define DEBUG_FLAG EMPATHY_DEBUG_OTHER +#include <libempathy/empathy-debug.h> + +/* + * This number has to be increased each time a new task is added or modified. + * + * If the number stored in gsettings is lower than it, all the tasks will + * be executed. + */ +#define SANITY_CLEANING_NUMBER 0 + +static void +run_sanity_cleaning_tasks (TpAccountManager *am) +{ + DEBUG ("Starting sanity cleaning tasks"); +} + +static void +am_prepare_cb (GObject *source, + GAsyncResult *result, + gpointer user_data) +{ + GError *error = NULL; + TpAccountManager *am = TP_ACCOUNT_MANAGER (source); + + if (!tp_proxy_prepare_finish (am, result, &error)) + { + DEBUG ("Failed to prepare account manager: %s", error->message); + g_error_free (error); + return; + } + + run_sanity_cleaning_tasks (am); +} + +void empathy_sanity_checking_run_if_needed (void) +{ + GSettings *settings; + guint number; + TpAccountManager *am; + + settings = g_settings_new (EMPATHY_PREFS_SCHEMA); + number = g_settings_get_uint (settings, EMPATHY_PREFS_SANITY_CLEANING_NUMBER); + + if (number == SANITY_CLEANING_NUMBER) + goto out; + + am = tp_account_manager_dup (); + + tp_proxy_prepare_async (am, NULL, am_prepare_cb, NULL); + + g_settings_set_uint (settings, EMPATHY_PREFS_SANITY_CLEANING_NUMBER, + SANITY_CLEANING_NUMBER); + + g_object_unref (am); +out: + g_object_unref (settings); +} diff --git a/src/empathy-sanity-cleaning.h b/src/empathy-sanity-cleaning.h new file mode 100644 index 000000000..593f9adce --- /dev/null +++ b/src/empathy-sanity-cleaning.h @@ -0,0 +1,27 @@ +/* + * empathy-sanity-cleaning.h + * + * Copyright (C) 2012 Collabora Ltd. + * @author Guillaume Desmottes <guillaume.desmottes@collabora.co.uk> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __EMPATHY_SANITY_CLEANING_H__ +#define __EMPATHY_SANITY_CLEANING_H__ + +void empathy_sanity_checking_run_if_needed (void); + +#endif |