Esempio n. 1
0
        public EntityIdWithVersion <Uri, string> Update(Uri entityId, IICalendar entityToUpdate, Func <IICalendar, IICalendar> entityModifier)
        {
            using (AutomaticStopwatch.StartDebug(s_logger))
            {
                IICalendar newCalendar = new iCalendar();
                newCalendar = entityModifier(newCalendar);

                if (entityToUpdate.Events.Count > 0)
                {
                    for (int i = 0, newSequenceNumber = entityToUpdate.Events.Max(e => e.Sequence) + 1; i < newCalendar.Events.Count; i++, newSequenceNumber++)
                    {
                        newCalendar.Events[i].Sequence = newSequenceNumber;
                    }
                }
                if (entityToUpdate.Todos.Count > 0)
                {
                    for (int i = 0, newSequenceNumber = entityToUpdate.Todos.Max(e => e.Sequence) + 1; i < newCalendar.Todos.Count; i++, newSequenceNumber++)
                    {
                        newCalendar.Todos[i].Sequence = newSequenceNumber;
                    }
                }

                return(_calDavDataAccess.UpdateEntity(entityId, SerializeCalendar(newCalendar)));
            }
        }
Esempio n. 2
0
 public Task <EntityIdWithVersion <Uri, string> > Update(Uri entityId, IICalendar entityToUpdate, Func <IICalendar, IICalendar> entityModifier)
 {
     using (AutomaticStopwatch.StartDebug(s_logger))
     {
         var updatedEntity = entityModifier(entityToUpdate);
         return(_calDavDataAccess.UpdateEntity(entityId, SerializeCalendar(updatedEntity)));
     }
 }
Esempio n. 3
0
        public async Task <EntityVersion <WebResourceName, string> > Update(
            WebResourceName entityId,
            string entityVersion,
            IICalendar entityToUpdate,
            Func <IICalendar, IICalendar> entityModifier)
        {
            using (AutomaticStopwatch.StartDebug(s_logger))
            {
                var updatedEntity = entityModifier(entityToUpdate);
                try
                {
                    return(await _calDavDataAccess.UpdateEntity(entityId, entityVersion, SerializeCalendar (updatedEntity)));
                }
                catch (WebDavClientException ex)
                {
                    if (_deleteAndCreateOnUpdateError403 && ex.StatusCode == System.Net.HttpStatusCode.Forbidden)
                    {
                        s_logger.Warn("Server returned '403' ('Forbidden') for update, trying Delete and Recreate instead...");

                        await Delete(entityId, entityVersion);

                        var uid = Guid.NewGuid().ToString();
                        if (updatedEntity.Events.Count > 0)
                        {
                            updatedEntity.Events[0].UID = uid;
                        }
                        else
                        {
                            updatedEntity.Todos[0].UID = uid;
                        }

                        return(await _calDavDataAccess.CreateEntity(SerializeCalendar (updatedEntity), uid));
                    }
                    else
                    {
                        throw;
                    }
                }
            }
        }
Esempio n. 4
0
        public async Task Test_CRUD()
        {
            foreach (var evt in await _calDavDataAccess.GetEventVersions(null))
            {
                await _calDavDataAccess.DeleteEntity(evt.Id, evt.Version);
            }

            var entitiesWithVersion = new List <EntityVersion <WebResourceName, string> >();

            var uids = new List <string>();

            for (int i = 1; i <= 5; i++)
            {
                var iCalendar = CreateEntity(i);
                uids.Add(iCalendar.Events[0].UID);
                entitiesWithVersion.Add(
                    await _calDavDataAccess.CreateEntity(
                        SerializeCalendar(
                            iCalendar), iCalendar.Events[0].UID));
            }

            var queriedEntitesWithVersion = await _calDavDataAccess.GetEventVersions(new DateTimeRange (DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)));

            Assert.That(queriedEntitesWithVersion.Count, Is.EqualTo(3));

            CollectionAssert.IsSubsetOf(
                queriedEntitesWithVersion.Select(e => e.Id),
                entitiesWithVersion.Select(e => e.Id));

            var updatedCalendar = CreateEntity(600);

            updatedCalendar.Events[0].UID = uids[1];
            var updated = await _calDavDataAccess.UpdateEntity(
                entitiesWithVersion[1].Id,
                entitiesWithVersion[1].Version,
                SerializeCalendar (updatedCalendar));

            Assert.That(
                (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count,
                Is.EqualTo(2));

            var updatedRevertedCalendar = CreateEntity(2);

            updatedRevertedCalendar.Events[0].UID = uids[1];
            var updateReverted = await _calDavDataAccess.UpdateEntity(
                updated.Id,
                updated.Version,
                SerializeCalendar (updatedRevertedCalendar));

            Assert.That(
                (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count,
                Is.EqualTo(3));

            await _calDavDataAccess.DeleteEntity(updateReverted.Id, updateReverted.Version);

            Assert.That(
                (await _calDavDataAccess.GetEventVersions(new DateTimeRange(DateTime.Now.AddDays(150), DateTime.Now.AddDays(450)))).Count,
                Is.EqualTo(2));

            var entites = await _calDavDataAccess.GetEntities(entitiesWithVersion.Take (4).Select(e => e.Id));

            if (!DeletedEntitesAreJustMarkedAsDeletedAndStillAvailableViaCalendarMultigetReport)
            {
                Assert.That(entites.Count, Is.EqualTo(3)); // Only 3, the second was deleted

                CollectionAssert.AreEquivalent(
                    entites.Select(e => DeserializeCalendar(e.Entity).Events[0].Summary),
                    new[] { "Event1", "Event3", "Event4" });
            }
            else
            {
                CollectionAssert.AreEquivalent(
                    entites.Select(e => DeserializeCalendar(e.Entity).Events[0].Summary),
                    new[] { "Event1", "Event2", "Event3", "Event4" });
            }
        }