431
432
source = e_collection_backend_new_child (
432
433
collection_backend, oal_id);
434
e_source_set_enabled (source, TRUE);
434
436
e_source_set_display_name (source, display_name);
463
465
g_object_unref (source);
468
static void ews_backend_populate (ECollectionBackend *backend);
467
471
ews_backend_source_changed_cb (ESource *source,
468
472
EEwsBackend *backend)
470
CamelEwsSettings *settings;
471
const gchar *oal_selected;
472
const gchar *gal_uid;
474
474
if (!e_source_get_enabled (source)) {
475
475
backend->priv->need_update_folders = TRUE;
479
if (!e_backend_get_online (E_BACKEND (backend)) ||
480
!backend->priv->need_update_folders)
483
settings = ews_backend_get_settings (backend);
484
gal_uid = camel_ews_settings_get_gal_uid (settings);
485
oal_selected = camel_ews_settings_get_oal_selected (settings);
487
if (g_strcmp0 (oal_selected, backend->priv->oal_selected) == 0)
490
/* Remove the old Global Address List source if present. */
491
if (gal_uid != NULL) {
492
ECollectionBackend *collection_backend;
493
ESourceRegistryServer *server;
495
collection_backend = E_COLLECTION_BACKEND (backend);
496
server = e_collection_backend_ref_server (collection_backend);
497
source = e_source_registry_server_ref_source (server, gal_uid);
499
if (source != NULL) {
500
e_source_registry_server_remove_source (server, source);
501
g_object_unref (source);
504
camel_ews_settings_set_gal_uid (settings, NULL);
507
ews_backend_add_gal_source (backend);
479
if (!backend->priv->need_update_folders)
482
ews_backend_populate (E_COLLECTION_BACKEND (backend));
630
ews_backend_claim_old_resources (ECollectionBackend *backend)
632
ESourceRegistryServer *registry;
633
GList *old_resources, *iter;
635
g_return_if_fail (E_IS_COLLECTION_BACKEND (backend));
637
registry = e_collection_backend_ref_server (backend);
638
old_resources = e_collection_backend_claim_all_resources (backend);
640
for (iter = old_resources; iter; iter = g_list_next (iter)) {
641
ESource *source = iter->data;
643
e_source_set_enabled (source, TRUE);
644
e_source_registry_server_add_source (registry, source);
647
g_list_free_full (old_resources, g_object_unref);
648
g_clear_object (®istry);
652
ews_backend_folders_synced_cb (GObject *source,
653
GAsyncResult *result,
656
EEwsBackend *ews_backend;
658
g_return_if_fail (E_IS_EWS_BACKEND (source));
660
ews_backend = E_EWS_BACKEND (source);
662
if (!e_ews_backend_sync_folders_finish (ews_backend, result, NULL))
663
ews_backend_claim_old_resources (E_COLLECTION_BACKEND (ews_backend));
655
667
ews_backend_populate (ECollectionBackend *backend)
662
674
ews_backend->priv->need_update_folders = TRUE;
664
/* do not do anything, if account is disabled */
665
if (!e_source_get_enabled (source))
668
676
if (!ews_backend->priv->notify_online_id)
669
677
ews_backend->priv->notify_online_id = g_signal_connect (
670
678
backend, "notify::online",
671
679
G_CALLBACK (ews_backend_populate), NULL);
673
/* For now at least, we don't need to know the
674
* results, so no callback function is needed. */
675
e_ews_backend_sync_folders (ews_backend, NULL, NULL, NULL);
681
/* do not do anything, if account is disabled */
682
if (!e_source_get_enabled (source))
677
685
ews_backend_add_gal_source (ews_backend);
687
if (e_backend_get_online (E_BACKEND (backend)))
688
e_ews_backend_sync_folders (ews_backend, NULL, ews_backend_folders_synced_cb, NULL);
690
ews_backend_claim_old_resources (backend);