~ubuntu-branches/ubuntu/utopic/evolution-ews/utopic-proposed

« back to all changes in this revision

Viewing changes to src/collection/e-ews-backend.c

  • Committer: Package Import Robot
  • Author(s): Iain Lane
  • Date: 2015-01-15 17:32:08 UTC
  • mfrom: (12.1.4 vivid-proposed)
  • Revision ID: package-import@ubuntu.com-20150115173208-v5sq15aissuxi1ks
Tags: 3.12.10-0ubuntu1~14.10.1
Backport new upstream release to 14.10 (LP: #1411325)

Show diffs side-by-side

added added

removed removed

Lines of Context:
394
394
                g_object_unref (server);
395
395
 
396
396
                if (source != NULL) {
 
397
                        e_source_set_enabled (source, TRUE);
397
398
                        g_object_unref (source);
398
399
                        return;
399
400
                }
430
431
 
431
432
        source = e_collection_backend_new_child (
432
433
                collection_backend, oal_id);
 
434
        e_source_set_enabled (source, TRUE);
433
435
 
434
436
        e_source_set_display_name (source, display_name);
435
437
 
463
465
        g_object_unref (source);
464
466
}
465
467
 
 
468
static void ews_backend_populate (ECollectionBackend *backend);
 
469
 
466
470
static void
467
471
ews_backend_source_changed_cb (ESource *source,
468
472
                               EEwsBackend *backend)
469
473
{
470
 
        CamelEwsSettings *settings;
471
 
        const gchar *oal_selected;
472
 
        const gchar *gal_uid;
473
 
 
474
474
        if (!e_source_get_enabled (source)) {
475
475
                backend->priv->need_update_folders = TRUE;
476
476
                return;
477
477
        }
478
478
 
479
 
        if (!e_backend_get_online (E_BACKEND (backend)) ||
480
 
            !backend->priv->need_update_folders)
481
 
                return;
482
 
 
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);
486
 
 
487
 
        if (g_strcmp0 (oal_selected, backend->priv->oal_selected) == 0)
488
 
                return;
489
 
 
490
 
        /* Remove the old Global Address List source if present. */
491
 
        if (gal_uid != NULL) {
492
 
                ECollectionBackend *collection_backend;
493
 
                ESourceRegistryServer *server;
494
 
 
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);
498
 
 
499
 
                if (source != NULL) {
500
 
                        e_source_registry_server_remove_source (server, source);
501
 
                        g_object_unref (source);
502
 
                }
503
 
 
504
 
                camel_ews_settings_set_gal_uid (settings, NULL);
505
 
        }
506
 
 
507
 
        ews_backend_add_gal_source (backend);
 
479
        if (!backend->priv->need_update_folders)
 
480
                return;
 
481
 
 
482
        ews_backend_populate (E_COLLECTION_BACKEND (backend));
508
483
}
509
484
 
510
485
static void
652
627
}
653
628
 
654
629
static void
 
630
ews_backend_claim_old_resources (ECollectionBackend *backend)
 
631
{
 
632
        ESourceRegistryServer *registry;
 
633
        GList *old_resources, *iter;
 
634
 
 
635
        g_return_if_fail (E_IS_COLLECTION_BACKEND (backend));
 
636
 
 
637
        registry = e_collection_backend_ref_server (backend);
 
638
        old_resources = e_collection_backend_claim_all_resources (backend);
 
639
 
 
640
        for (iter = old_resources; iter; iter = g_list_next (iter)) {
 
641
                ESource *source = iter->data;
 
642
 
 
643
                e_source_set_enabled (source, TRUE);
 
644
                e_source_registry_server_add_source (registry, source);
 
645
        }
 
646
 
 
647
        g_list_free_full (old_resources, g_object_unref);
 
648
        g_clear_object (&registry);
 
649
}
 
650
 
 
651
static void
 
652
ews_backend_folders_synced_cb (GObject *source,
 
653
                               GAsyncResult *result,
 
654
                               gpointer user_data)
 
655
{
 
656
        EEwsBackend *ews_backend;
 
657
 
 
658
        g_return_if_fail (E_IS_EWS_BACKEND (source));
 
659
 
 
660
        ews_backend = E_EWS_BACKEND (source);
 
661
 
 
662
        if (!e_ews_backend_sync_folders_finish (ews_backend, result, NULL))
 
663
                ews_backend_claim_old_resources (E_COLLECTION_BACKEND (ews_backend));
 
664
}
 
665
 
 
666
static void
655
667
ews_backend_populate (ECollectionBackend *backend)
656
668
{
657
669
        ESource *source;
661
673
 
662
674
        ews_backend->priv->need_update_folders = TRUE;
663
675
 
664
 
        /* do not do anything, if account is disabled */
665
 
        if (!e_source_get_enabled (source))
666
 
                return;
667
 
 
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);
672
680
 
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))
 
683
                return;
676
684
 
677
685
        ews_backend_add_gal_source (ews_backend);
 
686
 
 
687
        if (e_backend_get_online (E_BACKEND (backend)))
 
688
                e_ews_backend_sync_folders (ews_backend, NULL, ews_backend_folders_synced_cb, NULL);
 
689
        else
 
690
                ews_backend_claim_old_resources (backend);
678
691
}
679
692
 
680
693
static gchar *