Exemple #1
0
        private async Task PushLocalChanges(ExchangeChangeSet changeSet, EwsSyncServer server, List <ExchangeMapId> mapId, EwsFolderIdentifier folder)
        {
            // send local add content
            if (changeSet.AddedTasks.Count > 0)
            {
                var ewsTasks         = changeSet.AddedTasks.Select(exchangeTask => exchangeTask.BuildEwsTask()).ToList();
                var createItemResult = await server.CreateItemAsync(ewsTasks, folder);

                if (changeSet.AddedTasks.Count == createItemResult.Identifiers.Count)
                {
                    for (int i = 0; i < createItemResult.Identifiers.Count; i++)
                    {
                        var identifier = createItemResult.Identifiers[i];
                        if (identifier.IsValid)
                        {
                            mapId.Add(new ExchangeMapId {
                                LocalId = changeSet.AddedTasks[i].LocalId, ExchangeId = identifier.GetFullId()
                            });
                        }
                        else
                        {
                            LogService.Log("EwsSyncService", "Error while creating task: " + changeSet.AddedTasks[i].Subject + " error: " + identifier.ErrorMessage);
                        }
                    }
                }
                else
                {
                    LogService.Log("EwsSyncService", string.Format("Request to create {0} items but result only has {1} items", changeSet.AddedTasks.Count, createItemResult.Identifiers.Count));
                }
            }

            // send local modification content
            if (changeSet.ModifiedTasks.Count > 0)
            {
                var ewsTasks         = changeSet.ModifiedTasks.Select(exchangeTask => exchangeTask.BuildEwsTask()).ToList();
                var updateItemResult = await server.UpdateItemsAsync(ewsTasks);

                // todo ews: we don't update change key here... not optimal because then we're going to ask
                // the server to enumerate items, we will find different change keys for update items and so
                // we're going to download them again from the server
            }

            // send local delete content
            if (changeSet.DeletedTasks.Count > 0)
            {
                var ewsIdentifiers = new List <EwsItemIdentifier>();
                foreach (var deletedAsset in changeSet.DeletedTasks)
                {
                    ewsIdentifiers.Add(deletedAsset.Id.GetEwsItemIdentifier());
                }

                await server.DeleteItemsAsync(ewsIdentifiers);
            }
        }