Beispiel #1
0
        public async Task Daily_recurrence_clear()
        {
            var ewsTask       = CreateSampleEwsTask(titleOnly: true);
            var ewsRecurrence = new EwsRecurrence
            {
                StartDate      = DateTime.Now.AddDays(-DateTime.Now.Day + 1),
                RecurrenceType = ExchangeRecurrencePattern.Daily,
                Interval       = 2,
            };

            ewsTask.Recurrence = ewsRecurrence;

            await this.server.CreateItemAsync(ewsTask);

            var task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier);

            task.Recurrence  = null;
            task.IsRecurring = false;
            task.Changes     = EwsFields.Recurrence;

            await this.server.UpdateItemAsync(task);

            task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier);

            Assert.IsFalse(task.IsRecurring);
            Assert.IsNull(task.Recurrence);
        }
Beispiel #2
0
        public static EwsTask BuildEwsTask(this ExchangeTask exchangeTask)
        {
            var ewsTask = new EwsTask
            {
                Subject      = exchangeTask.Subject,
                Categories   = new[] { exchangeTask.Category },
                StartDate    = exchangeTask.Start,
                CompleteDate = exchangeTask.Completed,
                Importance   = (EwsImportance)(int)exchangeTask.Importance
            };

            if (exchangeTask.Due.HasValue)
            {
                ewsTask.DueDate = exchangeTask.Due.Value.Date;
            }

            if (exchangeTask.Alarm.HasValue)
            {
                ewsTask.ReminderDate  = exchangeTask.Alarm;
                ewsTask.ReminderIsSet = true;
            }

            if (!string.IsNullOrWhiteSpace(exchangeTask.Note))
            {
                ewsTask.Body     = exchangeTask.Note;
                ewsTask.BodyType = exchangeTask.Note.HasHtml() ? EwsBodyType.HTML : EwsBodyType.Text;
            }

            if (!exchangeTask.Properties.HasValue)
            {
                throw new NotSupportedException("Task has no properties set");
            }

            if (exchangeTask.IsRecurring && exchangeTask.Due.HasValue)
            {
                var recurrence = new EwsRecurrence
                {
                    RecurrenceType = exchangeTask.RecurrenceType,
                    Interval       = exchangeTask.Interval,
                    DayOfMonth     = exchangeTask.DayOfMonth,
                    DayOfWeekIndex = exchangeTask.DayOfWeekIndex,
                    DaysOfWeek     = exchangeTask.DaysOfWeek,
                    Month          = exchangeTask.Month,
                };

                if (!exchangeTask.Start.HasValue)
                {
                    recurrence.StartDate = exchangeTask.Due.Value;
                }
                else
                {
                    recurrence.StartDate = exchangeTask.Start.Value;
                }

                ewsTask.Recurrence = recurrence;
            }

            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Title))
            {
                ewsTask.Changes |= EwsFields.Subject;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Folder))
            {
                ewsTask.Changes |= EwsFields.Categories;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Due))
            {
                ewsTask.Changes |= EwsFields.DueDate;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Start))
            {
                ewsTask.Changes |= EwsFields.StartDate;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Completed))
            {
                ewsTask.Changes |= EwsFields.CompleteDate;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Priority))
            {
                ewsTask.Changes |= EwsFields.Importance;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.RepeatFrom))
            {
                ewsTask.Changes |= EwsFields.Recurrence;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Alarm))
            {
                ewsTask.Changes |= EwsFields.Reminder;
            }
            if (exchangeTask.Properties.Value.HasFlag(ExchangeTaskProperties.Note))
            {
                ewsTask.Changes |= EwsFields.Body;
            }

            if (!string.IsNullOrWhiteSpace(exchangeTask.Id))
            {
                string id = exchangeTask.Id;
                if (exchangeTask.Id.StartsWith(ItemPrefix))
                {
                    id           = id.Replace(ItemPrefix, string.Empty);
                    ewsTask.Type = EwsItemType.Item;
                }

                var identifier = GetEwsItemIdentifier(id);
                ewsTask.Id        = identifier.Id;
                ewsTask.ChangeKey = identifier.ChangeKey;
            }

            return(ewsTask);
        }
Beispiel #3
0
        private async Task Recurrence_interval(ExchangeRecurrencePattern type, ExchangeDayOfWeek?days = ExchangeDayOfWeek.None, ExchangeDayOfWeekIndex?dayOfWeekIndex = null, int?dayOfMonth = null, int?month = null)
        {
            int[] intervals = new[] { 1, 2, 4 };
            if (type == ExchangeRecurrencePattern.Yearly || type == ExchangeRecurrencePattern.YearlyRelative)
            {
                intervals = new[] { 1 }
            }
            ;

            foreach (int interval in intervals)
            {
                var ewsTask       = CreateSampleEwsTask(titleOnly: true);
                var ewsRecurrence = new EwsRecurrence
                {
                    StartDate      = DateTime.Now.Date.AddDays(-DateTime.Now.Day + 1).AddHours(8), // use 8AM to prevent weird issue depending on when the test run
                    RecurrenceType = type,
                    Interval       = interval,
                };

                // set a valid start date
                if (dayOfWeekIndex != null)
                {
                    if (month != null)
                    {
                        ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddMonths(month.Value - ewsRecurrence.StartDate.Month);
                    }

                    string day       = days.ToString();
                    int    occurence = (int)dayOfWeekIndex.Value + 1;
                    int    count     = 0;
                    if (ewsRecurrence.StartDate.DayOfWeek.ToString() == day)
                    {
                        count = 1;
                    }

                    while (ewsRecurrence.StartDate.DayOfWeek.ToString() != day || count != occurence)
                    {
                        ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(1);
                        if (ewsRecurrence.StartDate.DayOfWeek.ToString() == day)
                        {
                            count++;
                        }
                    }
                }
                else if (days != null && days != ExchangeDayOfWeek.None)
                {
                    string day = days.ToString();
                    if (day.Contains(","))
                    {
                        day = day.Split(new [] { ',' })[0];
                    }

                    while (ewsRecurrence.StartDate.DayOfWeek.ToString() != day)
                    {
                        ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(1);
                    }
                }
                else if (dayOfMonth != null)
                {
                    if (month != null)
                    {
                        ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddMonths(month.Value - ewsRecurrence.StartDate.Month);
                    }

                    ewsRecurrence.StartDate = ewsRecurrence.StartDate.AddDays(dayOfMonth.Value - ewsRecurrence.StartDate.Day);
                }

                if (days != null)
                {
                    ewsRecurrence.DaysOfWeek = days.Value;
                }

                if (dayOfWeekIndex != null)
                {
                    ewsRecurrence.DayOfWeekIndex = dayOfWeekIndex.Value;
                }

                if (dayOfMonth != null)
                {
                    ewsRecurrence.DayOfMonth = dayOfMonth.Value;
                }

                if (month != null)
                {
                    ewsRecurrence.Month = month.Value;
                }

                ewsTask.Recurrence  = ewsRecurrence;
                ewsTask.IsRecurring = true;

                await this.server.CreateItemAsync(ewsTask);

                var task = await this.server.GetTask(ewsTask.Subject, this.folderIdentifiers.TaskFolderIdentifier);

                Assert.IsTrue(task.IsRecurring);
                Assert.IsNotNull(task.Recurrence);
                Assert.AreEqual(ewsRecurrence, task.Recurrence);
            }
        }
    }