void remove_google_contacts_source_group (void) { ESourceList *source_list; ESourceGroup *group; const gchar *key; key = "/apps/evolution/addressbook/sources"; source_list = e_source_list_new_for_gconf_default (key); if (source_list == NULL) return; group = e_source_list_peek_group_by_base_uri (source_list, "google://"); if (group) { GSList *sources; sources = e_source_group_peek_sources (group); if (NULL == sources) { e_source_list_remove_group (source_list, group); e_source_list_sync (source_list, NULL); } } g_object_unref (source_list); }
static void add_planner_file (const gchar *conf_key, const gchar *uri) { ESourceList *source_list; ESourceGroup *group; ESource *source; char *group_name; source_list = e_source_list_new_for_gconf (conf_client, conf_key); group_name = g_strdup_printf ("Projects"); group = e_source_group_new (group_name, "planner://"); e_source_list_add_group (source_list, group, -1); g_free (group_name); group_name = g_strdup_printf ("%s", uri); source = e_source_new ("Calendar", group_name); e_source_group_add_source (group, source, -1); e_source_list_sync (source_list, NULL); g_free (group_name); g_object_unref (source); g_object_unref (group); g_object_unref (source_list); }
gboolean e_memo_shell_backend_migrate (EShellBackend *shell_backend, gint major, gint minor, gint revision, GError **error) { ESourceGroup *on_this_computer = NULL; ESourceGroup *on_the_web = NULL; ESource *personal_source = NULL; ESourceList *source_list = NULL; gboolean retval = FALSE; g_object_get (shell_backend, "source-list", &source_list, NULL); /* we call this unconditionally now - create_groups either * creates the groups/sources or it finds the necessary * groups/sources. */ create_memo_sources ( shell_backend, source_list, &on_this_computer, &on_the_web, &personal_source); e_source_list_sync (source_list, NULL); retval = TRUE; if (on_this_computer) g_object_unref (on_this_computer); if (on_the_web) g_object_unref (on_the_web); if (personal_source) g_object_unref (personal_source); return retval; }
static void action_address_book_delete_cb (GtkAction *action, EBookShellView *book_shell_view) { EShellView *shell_view; EShellWindow *shell_window; EBookShellBackend *book_shell_backend; EBookShellSidebar *book_shell_sidebar; ESource *source; ESourceSelector *selector; ESourceGroup *source_group; ESourceList *source_list; EBookClient *book; gint response; GError *error = NULL; shell_view = E_SHELL_VIEW (book_shell_view); shell_window = e_shell_view_get_shell_window (shell_view); book_shell_backend = book_shell_view->priv->book_shell_backend; source_list = e_book_shell_backend_get_source_list (book_shell_backend); book_shell_sidebar = book_shell_view->priv->book_shell_sidebar; selector = e_book_shell_sidebar_get_selector (book_shell_sidebar); source = e_source_selector_get_primary_selection (selector); g_return_if_fail (source != NULL); response = e_alert_run_dialog_for_args ( GTK_WINDOW (shell_window), "addressbook:ask-delete-addressbook", e_source_peek_name (source), NULL); if (response != GTK_RESPONSE_YES) return; book = e_book_client_new (source, &error); if (error != NULL) { g_warning ("Error removing addressbook: %s", error->message); g_error_free (error); return; } if (!e_client_remove_sync (E_CLIENT (book), NULL, NULL)) { e_alert_run_dialog_for_args ( GTK_WINDOW (shell_window), "addressbook:remove-addressbook", NULL); g_object_unref (book); return; } if (e_source_selector_source_is_selected (selector, source)) e_source_selector_unselect_source (selector, source); source_group = e_source_peek_group (source); e_source_group_remove_source (source_group, source); e_source_list_sync (source_list, NULL); g_object_unref (book); }
/* takes ownership of source */ void eee_accounts_manager_add_source(EeeAccountsManager *self, const char *group_name, ESource *source) { char *real_group_name; ESourceGroup *group; g_return_if_fail(IS_EEE_ACCOUNTS_MANAGER(self)); g_return_if_fail(group_name != NULL); g_return_if_fail(source != NULL); g_return_if_fail(e_source_is_3e(source)); real_group_name = g_strdup_printf("3e: %s", group_name); #if EVOLUTION_VERSION >= 232 group = e_source_list_peek_group_by_properties(self->priv->eslist, "name", real_group_name, NULL); #else group = e_source_list_peek_group_by_name(self->priv->eslist, real_group_name); #endif /* EVOLUTION_VERSION >= 232 */ if (group == NULL) { group = e_source_group_new(real_group_name, EEE_URI_PREFIX); e_source_list_add_group(self->priv->eslist, group, -1); g_object_unref(group); } g_free(real_group_name); e_source_group_add_source(group, source, -1); g_object_unref(source); e_source_list_sync(self->priv->eslist, NULL); }
static void add_account (const char *conf_key, const char *hostname, const char *username, const char *password) { ESourceList *source_list; ESourceGroup *group; ESource *source; char *group_name; source_list = e_source_list_new_for_gconf (conf_client, conf_key); group_name = g_strdup_printf ("%s@%s:7181/soap", username, hostname); group = e_source_group_new ("Groupwise", "groupwise://"); e_source_list_add_group (source_list, group, -1); if (password && *password) { g_free (group_name); group_name = g_strdup_printf ("%s:%s@%s/soap/", username, password, hostname); } source = e_source_new ("Frequent Contacts", group_name); e_source_set_property (source, "auth", "ldap/simple-binddn"); e_source_set_property(source, "binddn", "user1"); e_source_group_add_source (group, source, -1); /* source = e_source_new ("Test User1", group_name); e_source_set_property (source, "auth", "ldap/simple-binddn"); e_source_set_property(source, "binddn", "user1"); e_source_group_add_source (group, source, -1); source = e_source_new ("mybook1", group_name); e_source_set_property (source, "auth", "ldap/simple-binddn"); e_source_set_property(source, "binddn", "user1"); e_source_group_add_source (group, source, -1);*/ e_source_list_sync (source_list, NULL); g_free (group_name); g_object_unref (source); g_object_unref (group); g_object_unref (source_list); }
static void remove_couchdb_contacts_source_group (void) { ESourceList *source_list; source_list = e_source_list_new_for_gconf_default("/apps/evolution/addressbook/sources"); if (source_list) { ESourceGroup *group; group = e_source_list_peek_group_by_base_uri (source_list, COUCHDB_BASE_URI); if (group) { GSList *sources; sources = e_source_group_peek_sources (group); if (sources == NULL) { e_source_list_remove_group (source_list, group); e_source_list_sync (source_list, NULL); } } g_object_unref (G_OBJECT (source_list)); } }
ESourceGroup * e_source_list_ensure_group (ESourceList *list, const gchar *name, const gchar *base_uri, gboolean ret_it) { ESourceGroup *group; g_return_val_if_fail (E_IS_SOURCE_LIST (list), NULL); g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (base_uri != NULL, NULL); group = e_source_list_peek_group_by_base_uri (list, base_uri); if (group) { e_source_group_set_name (group, name); if (ret_it) g_object_ref (group); else group = NULL; } else { group = e_source_group_new (name, base_uri); if (!e_source_list_add_group (list, group, -1)) { g_warning ("Could not add source group %s with base uri %s to a source list", name, base_uri); g_object_unref (group); group = NULL; } else { /* save it now */ e_source_list_sync (list, NULL); if (!ret_it) { g_object_unref (group); group = NULL; } } } return group; }
static void synch_done (struct account_synch_msg *m) { g_print ("SxAS: Emitting finished signal (%d) [%p]\n", m->success, g_thread_self ()); /* Workaround for broken e_source_list and/or gconf */ if (m->success) { ESourceList *slist; ESourceGroup *group; const char *group_uid; gboolean changed; ScalixAccountSynchPrivate *priv; changed = FALSE; slist = NULL; e_cal_get_sources (&slist, E_CAL_SOURCE_TYPE_EVENT, NULL); group_uid = e_source_group_peek_uid (m->esg_cals); group = e_source_list_peek_group_by_uid (slist, group_uid); g_print ("Cal: %s %p\n", group_uid, group); if (group == NULL) { e_source_list_add_group (slist, m->esg_cals, -1); } else { char *xml; xml = e_source_group_to_xml (m->esg_cals); g_print ("Xml: %s\n", xml); e_source_group_update_from_xml (group, xml, &changed); g_free (xml); } e_source_list_sync (slist, NULL); g_object_unref (slist); slist = NULL; changed = FALSE; e_book_get_addressbooks (&slist, NULL); group_uid = e_source_group_peek_uid (m->esg_cnts); group = e_source_list_peek_group_by_uid (slist, group_uid); g_print ("Cnt: %s %p\n", group_uid, group); if (group == NULL) { e_source_list_add_group (slist, m->esg_cnts, -1); } else { char *xml; xml = e_source_group_to_xml (m->esg_cnts); g_print ("Xml: %s\n", xml); e_source_group_update_from_xml (group, xml, &changed); g_free (xml); } e_source_list_sync (slist, NULL); g_object_unref (slist); priv = SCALIX_ACCOUNT_SYNCH_GET_PRIVATE (m->sxas); g_print ("SV: %s\n", m->sversion); scalix_account_prefs_set_sversion (priv->account, m->sversion, NULL); } g_signal_emit (m->sxas, sxas_signals[SAS_SIGNAL_FINISHED], 0, m->success); g_print ("SxAS: Emitting done\n"); }
static void ensure_sources (MemosComponent *component) { GSList *groups; ESourceList *source_list; ESourceGroup *group; ESourceGroup *on_this_computer; ESourceGroup *on_the_web; ESource *personal_source; char *base_uri, *base_uri_proto; const gchar *base_dir; on_this_computer = NULL; on_the_web = NULL; personal_source = NULL; if (!e_cal_get_sources (&source_list, E_CAL_SOURCE_TYPE_JOURNAL, NULL)) { g_warning ("Could not get memo source list from GConf!"); return; } base_dir = memos_component_peek_base_directory (component); base_uri = g_build_filename (base_dir, "local", NULL); base_uri_proto = g_filename_to_uri (base_uri, NULL, NULL); groups = e_source_list_peek_groups (source_list); if (groups) { /* groups are already there, we need to search for things... */ GSList *g; for (g = groups; g; g = g->next) { group = E_SOURCE_GROUP (g->data); /* compare only file:// part. If user home dir name changes we do not want to create one more group */ if (!on_this_computer && !strncmp (base_uri_proto, e_source_group_peek_base_uri (group), 7)) on_this_computer = group; else if (!on_the_web && !strcmp (WEB_BASE_URI, e_source_group_peek_base_uri (group))) on_the_web = group; } } if (on_this_computer) { /* make sure "Personal" shows up as a source under this group */ GSList *sources = e_source_group_peek_sources (on_this_computer); GSList *s; for (s = sources; s; s = s->next) { ESource *source = E_SOURCE (s->data); const gchar *relative_uri; relative_uri = e_source_peek_relative_uri (source); if (relative_uri == NULL) continue; if (!strcmp (PERSONAL_RELATIVE_URI, relative_uri)) { personal_source = source; break; } } /* Make sure we have the correct base uri. This can change when user's homedir name changes */ if (strcmp (base_uri_proto, e_source_group_peek_base_uri (on_this_computer))) { e_source_group_set_base_uri (on_this_computer, base_uri_proto); /* *sigh* . We shouldn't need this sync call here as set_base_uri call results in synching to gconf, but that happens in idle loop and too late to prevent user seeing "Can not Open ... because of invalid uri" error.*/ e_source_list_sync (source_list,NULL); } } else { /* create the local source group */ group = e_source_group_new (_("On This Computer"), base_uri_proto); e_source_list_add_group (source_list, group, -1); on_this_computer = group; } if (!personal_source) { GSList *memos_selected; /* Create the default Person addressbook */ ESource *source = e_source_new (_("Personal"), PERSONAL_RELATIVE_URI); e_source_group_add_source (on_this_computer, source, -1); memos_selected = calendar_config_get_memos_selected (); if (!calendar_config_get_primary_memos () && !memos_selected) { GSList selected; calendar_config_set_primary_memos (e_source_peek_uid (source)); selected.data = (gpointer)e_source_peek_uid (source); selected.next = NULL; calendar_config_set_memos_selected (&selected); } if (memos_selected) { g_slist_foreach (memos_selected, (GFunc) g_free, NULL); g_slist_free (memos_selected); } e_source_set_color_spec (source, "#BECEDD"); personal_source = source; } if (!on_the_web) { /* Create the LDAP source group */ group = e_source_group_new (_("On The Web"), WEB_BASE_URI); e_source_list_add_group (source_list, group, -1); on_the_web = group; } component->priv->source_list = source_list; g_free (base_uri_proto); g_free (base_uri); }
static gint on_idle_do_stuff (gpointer unused_data) { GConfClient *client = gconf_client_get_default (); ESourceGroup *new_group = NULL; ESource *new_source = NULL; list = e_source_list_new_for_gconf (client, key_arg); g_object_unref (client); if (add_group_arg != NULL) { if (group_arg != NULL) { fprintf (stderr, "--add-group and --group cannot be used at the same time.\n"); exit (1); } if (set_base_uri_arg == NULL) { fprintf (stderr, "When using --add-group, you need to specify a base URI using --set-base-uri.\n"); exit (1); } new_group = e_source_group_new (add_group_arg, set_base_uri_arg); e_source_list_add_group (list, new_group, -1); g_object_unref (new_group); e_source_list_sync (list, NULL); } if (remove_group_arg != NULL) { ESourceGroup *group; group = e_source_list_peek_group_by_uid (list, remove_group_arg); if (group == NULL) { fprintf (stderr, "No such group \"%s\".\n", remove_group_arg); exit (1); } e_source_list_remove_group (list, group); e_source_list_sync (list, NULL); } if (add_source_arg != NULL) { ESourceGroup *group; if (group_arg == NULL && new_group == NULL) { fprintf (stderr, "When using --add-source, you need to specify a group using either --group\n" "or --add-group.\n"); exit (1); } if (set_relative_uri_arg == NULL) { fprintf (stderr, "When using --add-source, you need to specify a relative URI using\n" "--set-relative-uri.\n"); exit (1); } if (group_arg == NULL) { group = new_group; } else { group = e_source_list_peek_group_by_uid (list, group_arg); if (group == NULL) { fprintf (stderr, "No such group \"%s\".\n", group_arg == NULL ? add_group_arg : group_arg); exit (1); } } new_source = e_source_new (add_source_arg, set_relative_uri_arg); e_source_group_add_source (group, new_source, -1); e_source_list_sync (list, NULL); } if (remove_source_arg != NULL) { ESource *source; source = e_source_list_peek_source_by_uid (list, remove_source_arg); if (source == NULL) { fprintf (stderr, "No such source \"%s\".\n", remove_source_arg); exit (1); } e_source_list_remove_source_by_uid (list, remove_source_arg); e_source_list_sync (list, NULL); } if (set_name_arg != NULL) { if (group_arg == NULL && source_arg == NULL) { fprintf (stderr, "When using --set-name, you need to specify a source (using --source" "alone) or a group (using --group alone).\n"); exit (1); } if (source_arg != NULL) { ESource *source = e_source_list_peek_source_by_uid (list, source_arg); if (source != NULL) { e_source_set_name (source, set_name_arg); } else { fprintf (stderr, "No such source \"%s\".\n", source_arg); exit (1); } } else { ESourceGroup *group = e_source_list_peek_group_by_uid (list, group_arg); if (group != NULL) { e_source_group_set_name (group, set_name_arg); } else { fprintf (stderr, "No such group \"%s\".\n", group_arg); exit (1); } } e_source_list_sync (list, NULL); } if (set_relative_uri_arg != NULL && add_source_arg == NULL) { ESource *source; if (source_arg == NULL) { fprintf (stderr, "When using --set-relative-uri, you need to specify a source using " "--source.\n"); exit (1); } source = e_source_list_peek_source_by_uid (list, source_arg); e_source_set_relative_uri (source, set_relative_uri_arg); e_source_list_sync (list, NULL); } if (set_color_arg != NULL) { ESource *source; if (add_source_arg == NULL && source_arg == NULL) { fprintf (stderr, "When using --set-color, you need to specify a source using --source\n"); exit (1); } if (add_source_arg != NULL) source = new_source; else source = e_source_list_peek_source_by_uid (list, source_arg); e_source_set_color_spec (source, set_color_arg); e_source_list_sync (list, NULL); } if (unset_color) { ESource *source; if (add_source_arg == NULL && source_arg == NULL) { fprintf (stderr, "When using --unset-color, you need to specify a source using --source\n"); exit (1); } if (add_source_arg != NULL) source = new_source; else source = e_source_list_peek_source_by_uid (list, source_arg); e_source_set_color_spec (source, NULL); e_source_list_sync (list, NULL); } if (set_base_uri_arg != NULL && add_group_arg == NULL) { ESourceGroup *group; if (group_arg == NULL) { fprintf (stderr, "When using --set-base-uri, you need to specify a group using --group.\n"); exit (1); } group = e_source_list_peek_group_by_uid (list, group_arg); e_source_group_set_base_uri (group, set_base_uri_arg); e_source_list_sync (list, NULL); } if (set_value_arg != NULL) { ESource *source; if (add_source_arg == NULL && source_arg == NULL) { fprintf (stderr, "When using --set-value, you need to specify a source using --source\n"); exit (1); } if (property_arg == NULL) { fprintf (stderr, "When using --set-value, you need to specify a property using --property\n"); exit (1); } if (add_source_arg != NULL) source = new_source; else source = e_source_list_peek_source_by_uid (list, source_arg); e_source_set_property (source, property_arg, set_value_arg); e_source_list_sync (list, NULL); } if (unset_value) { ESource *source; if (add_source_arg == NULL && source_arg == NULL) { fprintf (stderr, "When using --unset-value, you need to specify a source using --source\n"); exit (1); } if (property_arg == NULL) { fprintf (stderr, "When using --unset-value, you need to specify a property using --property\n"); exit (1); } if (add_source_arg != NULL) source = new_source; else source = e_source_list_peek_source_by_uid (list, source_arg); e_source_set_property (source, property_arg, NULL); e_source_list_sync (list, NULL); } connect_list (); if (dump) dump_list (); if (!listen) g_main_loop_quit (main_loop); return FALSE; }
void eee_accounts_manager_activate_accounts(EeeAccountsManager *self) { GSList *iter, *iter2, *iter2_next, *iter_next; g_return_if_fail(IS_EEE_ACCOUNTS_MANAGER(self)); // for each accessible account for (iter = self->priv->access_accounts; iter; iter = iter->next) { EeeAccount *account; ESourceGroup *group; char *name = iter->data; char *group_name = g_strdup_printf("3e: %s", name); // find ESourceGroup and EeeAccount #if EVOLUTION_VERSION >= 232 group = e_source_list_peek_group_by_properties(self->priv->eslist, "name", group_name, NULL); #else group = e_source_list_peek_group_by_name(self->priv->eslist, group_name); #endif /* EVOLUTION_VERSION >= 232 */ account = eee_accounts_manager_find_account_by_name(self, name); // create account if it does not exist if (account == NULL) { account = eee_account_new(name); eee_account_set_state(account, EEE_ACCOUNT_STATE_NOTAVAIL); eee_accounts_manager_add_account(self, account); } // create group if it does not exist if (group == NULL) { group = e_source_group_new(group_name, EEE_URI_PREFIX); e_source_list_add_group(self->priv->eslist, group, -1); g_object_unref(group); } else { // check group sources for (iter2 = e_source_group_peek_sources(group); iter2 != NULL; iter2 = iter2_next) { // we may be removing sources so ensure that we have valid next pointer iter2_next = iter2->next; ESource *source = iter2->data; if (e_source_is_3e(source)) { const char *calname = e_source_get_property(source, "eee-calname"); e_source_set_3e_properties(source, calname, account->name, account, NULL, NULL, 0); } else { // ESource without calname is useless, drop it e_source_group_remove_source(group, source); } } g_free(group_name); } g_object_set_data(G_OBJECT(group), "accessible", (gpointer)TRUE); } // for each ESourceGroup that does not represent accessible account for (iter = e_source_list_peek_groups(self->priv->eslist); iter; iter = iter_next) { iter_next = iter->next; ESourceGroup *group = iter->data; gboolean contains_source = FALSE; // skip non-3E groups and accessible groups initialized above if (!e_source_group_is_3e(group) || g_object_get_data(G_OBJECT(group), "accessible")) { continue; } for (iter2 = e_source_group_peek_sources(group); iter2 != NULL; iter2 = iter2_next) { // we may be removing sources so ensure that we have valid next pointer iter2_next = iter2->next; ESource *source = iter2->data; // these ESources are probably for shared calendars, if we can't find // account for them, remove them if (eee_accounts_manager_find_account_by_source(self, source)) { contains_source = TRUE; } else { e_source_group_remove_source(group, source); } } if (!contains_source) { e_source_list_remove_group(self->priv->eslist, group); } } e_source_list_sync(self->priv->eslist, NULL); }
/* sync finish phase */ static gboolean eee_accounts_manager_sync_phase2(EeeAccountsManager *self) { GSList *iter, *iter2, *iter_next, *iter2_next; g_return_val_if_fail(IS_EEE_ACCOUNTS_MANAGER(self), FALSE); // unmark groups/sources for (iter = e_source_list_peek_groups(self->priv->eslist); iter; iter = iter->next) { ESourceGroup *group = E_SOURCE_GROUP(iter->data); if (!e_source_group_is_3e(group)) { continue; } g_object_set_data(G_OBJECT(group), "synced", (gpointer)FALSE); for (iter2 = e_source_group_peek_sources(group); iter2; iter2 = iter2->next) { ESource *source = E_SOURCE(iter2->data); g_object_set_data(G_OBJECT(source), "synced", (gpointer)FALSE); } } // go through synced account description structures and update ESourceList // accordingly for (iter = self->priv->sync_accounts; iter; iter = iter->next) { EeeAccount *account = iter->data; EeeAccount *current_account; ESourceGroup *group; char *group_name = g_strdup_printf("3e: %s", account->name); // find ESourceGroup and EeeAccount #if EVOLUTION_VERSION >= 232 group = e_source_list_peek_group_by_properties(self->priv->eslist, "name", group_name, NULL); #else group = e_source_list_peek_group_by_name(self->priv->eslist, group_name); #endif /* EVOLUTION_VERSION >= 232 */ current_account = eee_accounts_manager_find_account_by_name(self, account->name); if (account->state == EEE_ACCOUNT_STATE_DISABLED) { if (current_account) { eee_accounts_manager_remove_account(self, current_account); } if (group) { e_source_list_remove_group(self->priv->eslist, group); } g_object_unref(account); continue; } // create account if it does not exist if (current_account == NULL) { eee_accounts_manager_add_account(self, g_object_ref(account)); } else { eee_account_copy(current_account, account); } // create group if it does not exist if (group == NULL) { group = e_source_group_new(group_name, EEE_URI_PREFIX); e_source_list_add_group(self->priv->eslist, group, -1); g_object_unref(group); } g_free(group_name); // check group sources if account is available, otherwise just mark them as // synced if (account->state == EEE_ACCOUNT_STATE_NOTAVAIL) { GSList *iter_grp, *iter_src; for (iter_grp = e_source_list_peek_groups(self->priv->eslist); iter_grp; iter_grp = iter_grp->next) { ESourceGroup *group = iter_grp->data; for (iter_src = e_source_group_peek_sources(group); iter_src; iter_src = iter_src->next) { ESource *source = iter_src->data; const char *account_name = e_source_get_property(source, "eee-account"); if (account_name && !strcmp(account_name, account->name)) { g_object_set_data(G_OBJECT(source), "synced", (gpointer)TRUE); g_object_set_data(G_OBJECT(group), "synced", (gpointer)TRUE); } } } } else { GArray * cals = eee_account_peek_calendars (account); guint i; for (i = 0; i < cals->len; i++) { ESCalendarInfo *cal = g_array_index (cals, ESCalendarInfo *, i); ESource *source; if (!strcmp(cal->owner, account->name)) { // calendar owned by owner of account that represents current group source = e_source_group_peek_source_by_calname(group, cal->name); if (source == NULL) { source = e_source_new_3e_with_attrs(cal->name, cal->owner, account, cal->perm, cal->attrs); e_source_group_add_source(group, source, -1); g_object_unref(source); } else { e_source_set_3e_properties_with_attrs(source, cal->name, cal->owner, account, cal->perm, cal->attrs); } } else { char *owner_group_name = g_strdup_printf("3e: %s", cal->owner); // shared calendar, it should be put into another group #if EVOLUTION_VERSION >= 232 ESourceGroup *owner_group = e_source_list_peek_group_by_properties(self->priv->eslist, "name", owner_group_name, NULL); #else ESourceGroup *owner_group = e_source_list_peek_group_by_name(self->priv->eslist, owner_group_name); #endif /* EVOLUTION_VERSION >= 232 */ if (owner_group == NULL) { owner_group = e_source_group_new(owner_group_name, EEE_URI_PREFIX); e_source_list_add_group(self->priv->eslist, owner_group, -1); g_object_unref(owner_group); } g_object_set_data(G_OBJECT(owner_group), "synced", (gpointer)TRUE); source = e_source_group_peek_source_by_calname(owner_group, cal->name); if (source == NULL) { source = e_source_new_3e_with_attrs(cal->name, cal->owner, account, cal->perm, cal->attrs); e_source_group_add_source(owner_group, source, -1); g_object_unref(source); } else { e_source_set_3e_properties_with_attrs(source, cal->name, cal->owner, account, cal->perm, cal->attrs); } } g_object_set_data(G_OBJECT(source), "synced", (gpointer)TRUE); } } g_object_set_data(G_OBJECT(group), "synced", (gpointer)TRUE); g_object_unref(account); } g_slist_free(self->priv->sync_accounts); self->priv->sync_accounts = NULL; // remove non-marked sources/groups for (iter = e_source_list_peek_groups(self->priv->eslist); iter; iter = iter_next) { ESourceGroup *group = E_SOURCE_GROUP(iter->data); iter_next = iter->next; if (!e_source_group_is_3e(group)) { continue; } if (g_object_get_data(G_OBJECT(group), "synced")) { for (iter2 = e_source_group_peek_sources(group); iter2; iter2 = iter2_next) { ESource *source = E_SOURCE(iter2->data); iter2_next = iter2->next; if (!g_object_get_data(G_OBJECT(source), "synced")) { e_source_group_remove_source(group, source); } } } else { e_source_list_remove_group(self->priv->eslist, group); } } e_source_list_sync(self->priv->eslist, NULL); return TRUE; }