diff options
Diffstat (limited to 'plugins/google-account-setup')
-rw-r--r-- | plugins/google-account-setup/ChangeLog | 11 | ||||
-rw-r--r-- | plugins/google-account-setup/google-contacts-source.c | 74 | ||||
-rw-r--r-- | plugins/google-account-setup/google-contacts-source.h | 2 | ||||
-rw-r--r-- | plugins/google-account-setup/google-source.c | 25 |
4 files changed, 67 insertions, 45 deletions
diff --git a/plugins/google-account-setup/ChangeLog b/plugins/google-account-setup/ChangeLog index a59a5aad19..628455a523 100644 --- a/plugins/google-account-setup/ChangeLog +++ b/plugins/google-account-setup/ChangeLog @@ -1,3 +1,14 @@ +2009-01-29 Milan Crha <mcrha@redhat.com> + + ** Fix for bug #539467 + + * google-contacts-source.h: (manage_google_group): + * google-contacts-source.c: (manage_google_group), + (ensure_google_contacts_source_group), + (remove_google_contacts_source_group): + * google-source.c: (ensure_google_source_group): + Find group by its base uri, not by a localized name. + 2008-11-07 Matthew Barnes <mbarnes@redhat.com> ** Fix for bug #559518 diff --git a/plugins/google-account-setup/google-contacts-source.c b/plugins/google-account-setup/google-contacts-source.c index b33ac86856..f76b7e56ee 100644 --- a/plugins/google-account-setup/google-contacts-source.c +++ b/plugins/google-account-setup/google-contacts-source.c @@ -37,36 +37,64 @@ #include "google-contacts-source.h" - -void -ensure_google_contacts_source_group (void) +/** + * manage_google_group: + * Searches for a 'Google' source group and ensures it has the correct + * name. If only_return is set to true, then only returns found group. + * Otherwise returns NULL. + **/ +ESourceGroup * +manage_google_group (ESourceList *slist, gboolean only_return) { - ESourceList *source_list; - ESourceGroup *group; + GSList *groups, *g; + ESourceGroup *group = NULL; - source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources"); + g_return_val_if_fail (slist != NULL, NULL); - if (source_list == NULL) { - return; - } + groups = e_source_list_peek_groups (slist); + for (g = groups; g; g = g->next) { + group = E_SOURCE_GROUP (g->data); - group = e_source_list_peek_group_by_name (source_list, _("Google")); + if (group && e_source_group_peek_base_uri (group) && + g_ascii_strncasecmp ("google://", e_source_group_peek_base_uri (group), 9) == 0) + break; - if (group == NULL) { - gboolean res; + group = NULL; + } - group = e_source_group_new (_("Google"), "google://"); - res = e_source_list_add_group (source_list, group, -1); + if (only_return) + return group; - if (res == FALSE) { - g_warning ("Could not add Google source group!"); - } else { - e_source_list_sync (source_list, NULL); - } + if (group) { + e_source_group_set_name (group, _("Google")); + } else { + group = e_source_group_new (_("Google"), "google://"); - g_object_unref (group); - } - g_object_unref (source_list); + if (!e_source_list_add_group (slist, group, -1)) { + g_warning ("Could not add Google source group!"); + } else { + e_source_list_sync (slist, NULL); + } + + g_object_unref (group); + } + + return NULL; +} + +void +ensure_google_contacts_source_group (void) +{ + ESourceList *source_list; + + source_list = e_source_list_new_for_gconf_default ("/apps/evolution/addressbook/sources"); + + if (source_list == NULL) { + return; + } + + manage_google_group (source_list, FALSE); + g_object_unref (source_list); } void @@ -81,7 +109,7 @@ remove_google_contacts_source_group (void) return; } - group = e_source_list_peek_group_by_name (source_list, _("Google")); + group = manage_google_group (source_list, TRUE); if (group) { GSList *sources; diff --git a/plugins/google-account-setup/google-contacts-source.h b/plugins/google-account-setup/google-contacts-source.h index 54c21d18a6..b4fd5d6b77 100644 --- a/plugins/google-account-setup/google-contacts-source.h +++ b/plugins/google-account-setup/google-contacts-source.h @@ -28,4 +28,6 @@ void ensure_google_contacts_source_group (void); void remove_google_contacts_source_group (void); +ESourceGroup *manage_google_group (ESourceList *slist, gboolean only_return); + #endif diff --git a/plugins/google-account-setup/google-source.c b/plugins/google-account-setup/google-source.c index dd86d1723b..02f08da5e5 100644 --- a/plugins/google-account-setup/google-source.c +++ b/plugins/google-account-setup/google-source.c @@ -69,36 +69,17 @@ GtkWidget * plugin_google (EPlugin *epl, static void -ensure_google_source_group () +ensure_google_source_group (void) { ESourceList *slist; - ESourceGroup *group; - if (!e_cal_get_sources (&slist, E_CAL_SOURCE_TYPE_EVENT, NULL)) { g_warning ("Could not get calendar source list from GConf!"); return; } - group = e_source_list_peek_group_by_name (slist, _("Google")); - - if (group == NULL) - g_message ("\n Google Group Not found "); - - if (group == NULL) { - gboolean res; - group = e_source_group_new (_("Google"), "Google://"); - res = e_source_list_add_group (slist, group, -1); - - if (res == FALSE) { - g_warning ("Could not add Google source group!"); - } else { - e_source_list_sync (slist, NULL); - } - - g_object_unref (group); - g_object_unref (slist); - } + manage_google_group (slist, FALSE); + g_object_unref (slist); } int |