private void MapRecurrance1To2(TaskItem source, ITodo target, iCalTimeZone localIcalTimeZone)
        {
            if (source.IsRecurring)
            {
                using (var sourceRecurrencePatternWrapper = GenericComObjectWrapper.Create(source.GetRecurrencePattern()))
                {
                    var sourceRecurrencePattern = sourceRecurrencePatternWrapper.Inner;
                    IRecurrencePattern targetRecurrencePattern = new RecurrencePattern();
                    if (!sourceRecurrencePattern.NoEndDate)
                    {
                        targetRecurrencePattern.Count = sourceRecurrencePattern.Occurrences;
                        //Until must not be set if count is set, since outlook always sets Occurrences
                        //but sogo wants it as utc end time of the last event not only the enddate at 0000
                        //targetRecurrencePattern.Until = sourceRecurrencePattern.PatternEndDate.Add(sourceRecurrencePattern.EndTime.TimeOfDay).ToUniversalTime();
                    }
                    targetRecurrencePattern.Interval = (sourceRecurrencePattern.RecurrenceType == OlRecurrenceType.olRecursYearly ||
                                                        sourceRecurrencePattern.RecurrenceType == OlRecurrenceType.olRecursYearNth) ? sourceRecurrencePattern.Interval / 12 : sourceRecurrencePattern.Interval;

                    switch (sourceRecurrencePattern.RecurrenceType)
                    {
                    case OlRecurrenceType.olRecursDaily:
                        targetRecurrencePattern.Frequency = FrequencyType.Daily;
                        break;

                    case OlRecurrenceType.olRecursWeekly:
                        targetRecurrencePattern.Frequency = FrequencyType.Weekly;
                        CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        break;

                    case OlRecurrenceType.olRecursMonthly:
                        targetRecurrencePattern.Frequency = FrequencyType.Monthly;
                        targetRecurrencePattern.ByMonthDay.Add(sourceRecurrencePattern.DayOfMonth);
                        break;

                    case OlRecurrenceType.olRecursMonthNth:
                        targetRecurrencePattern.Frequency = FrequencyType.Monthly;

                        if (sourceRecurrencePattern.Instance == 5)
                        {
                            targetRecurrencePattern.BySetPosition.Add(-1);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else if (sourceRecurrencePattern.Instance > 0)
                        {
                            targetRecurrencePattern.BySetPosition.Add(sourceRecurrencePattern.Instance);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else
                        {
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        break;

                    case OlRecurrenceType.olRecursYearly:
                        targetRecurrencePattern.Frequency = FrequencyType.Yearly;
                        targetRecurrencePattern.ByMonthDay.Add(sourceRecurrencePattern.DayOfMonth);
                        targetRecurrencePattern.ByMonth.Add(sourceRecurrencePattern.MonthOfYear);
                        break;

                    case OlRecurrenceType.olRecursYearNth:
                        targetRecurrencePattern.Frequency = FrequencyType.Yearly;
                        if (sourceRecurrencePattern.Instance == 5)
                        {
                            targetRecurrencePattern.BySetPosition.Add(-1);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else if (sourceRecurrencePattern.Instance > 0)
                        {
                            targetRecurrencePattern.BySetPosition.Add(sourceRecurrencePattern.Instance);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else
                        {
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        targetRecurrencePattern.ByMonth.Add(sourceRecurrencePattern.MonthOfYear);
                        break;
                    }

                    target.RecurrenceRules.Add(targetRecurrencePattern);
                }
            }
        }
        private void MapRecurrance1To2(TaskItem source, ITodo target, iCalTimeZone localIcalTimeZone)
        {
            if (source.IsRecurring)
            {
                using (var sourceRecurrencePatternWrapper = GenericComObjectWrapper.Create(source.GetRecurrencePattern()))
                {
                    var sourceRecurrencePattern = sourceRecurrencePatternWrapper.Inner;

                    // Recurring task must have a DTSTART according to the RFC but Outlook may have no task start date set, use PatternStartDate in this case
                    if (source.StartDate == OutlookUtility.OUTLOOK_DATE_NONE)
                    {
                        target.Start = new iCalDateTime(sourceRecurrencePattern.PatternStartDate.Year,
                                                        sourceRecurrencePattern.PatternStartDate.Month, sourceRecurrencePattern.PatternStartDate.Day, true);
                        if (!_configuration.MapStartAndDueAsFloating)
                        {
                            target.Start.SetTimeZone(localIcalTimeZone);
                        }
                    }
                    IRecurrencePattern targetRecurrencePattern = new RecurrencePattern();

                    // Don't set Count if pattern has NoEndDate or invalid Occurences for some reason.
                    if (!sourceRecurrencePattern.NoEndDate && sourceRecurrencePattern.Occurrences > 0)
                    {
                        targetRecurrencePattern.Count = sourceRecurrencePattern.Occurrences;
                        //Until must not be set if count is set, since outlook always sets Occurrences
                        //but sogo wants it as utc end time of the last event not only the enddate at 0000
                        //targetRecurrencePattern.Until = sourceRecurrencePattern.PatternEndDate.Add(sourceRecurrencePattern.EndTime.TimeOfDay).ToUniversalTime();
                    }
                    targetRecurrencePattern.Interval = (sourceRecurrencePattern.RecurrenceType == OlRecurrenceType.olRecursYearly ||
                                                        sourceRecurrencePattern.RecurrenceType == OlRecurrenceType.olRecursYearNth) ? sourceRecurrencePattern.Interval / 12 : sourceRecurrencePattern.Interval;

                    switch (sourceRecurrencePattern.RecurrenceType)
                    {
                    case OlRecurrenceType.olRecursDaily:
                        targetRecurrencePattern.Frequency = FrequencyType.Daily;
                        break;

                    case OlRecurrenceType.olRecursWeekly:
                        targetRecurrencePattern.Frequency = FrequencyType.Weekly;
                        CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        break;

                    case OlRecurrenceType.olRecursMonthly:
                        targetRecurrencePattern.Frequency = FrequencyType.Monthly;
                        targetRecurrencePattern.ByMonthDay.Add(sourceRecurrencePattern.DayOfMonth);
                        break;

                    case OlRecurrenceType.olRecursMonthNth:
                        targetRecurrencePattern.Frequency = FrequencyType.Monthly;

                        if (sourceRecurrencePattern.Instance == 5)
                        {
                            targetRecurrencePattern.BySetPosition.Add(-1);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else if (sourceRecurrencePattern.Instance > 0)
                        {
                            targetRecurrencePattern.BySetPosition.Add(sourceRecurrencePattern.Instance);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else
                        {
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        break;

                    case OlRecurrenceType.olRecursYearly:
                        targetRecurrencePattern.Frequency = FrequencyType.Yearly;
                        targetRecurrencePattern.ByMonthDay.Add(sourceRecurrencePattern.DayOfMonth);
                        targetRecurrencePattern.ByMonth.Add(sourceRecurrencePattern.MonthOfYear);
                        break;

                    case OlRecurrenceType.olRecursYearNth:
                        targetRecurrencePattern.Frequency = FrequencyType.Yearly;
                        if (sourceRecurrencePattern.Instance == 5)
                        {
                            targetRecurrencePattern.BySetPosition.Add(-1);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else if (sourceRecurrencePattern.Instance > 0)
                        {
                            targetRecurrencePattern.BySetPosition.Add(sourceRecurrencePattern.Instance);
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        else
                        {
                            CommonEntityMapper.MapDayOfWeek1To2(sourceRecurrencePattern.DayOfWeekMask, targetRecurrencePattern.ByDay);
                        }
                        targetRecurrencePattern.ByMonth.Add(sourceRecurrencePattern.MonthOfYear);
                        break;
                    }

                    target.RecurrenceRules.Add(targetRecurrencePattern);
                }
            }
        }