Exemple #1
0
        private static OlDaysOfWeek getDOWmask(String byDay)
        {
            OlDaysOfWeek dowMask = 0;

            if (byDay.Contains("MO"))
            {
                dowMask |= OlDaysOfWeek.olMonday;
            }
            if (byDay.Contains("TU"))
            {
                dowMask |= OlDaysOfWeek.olTuesday;
            }
            if (byDay.Contains("WE"))
            {
                dowMask |= OlDaysOfWeek.olWednesday;
            }
            if (byDay.Contains("TH"))
            {
                dowMask |= OlDaysOfWeek.olThursday;
            }
            if (byDay.Contains("FR"))
            {
                dowMask |= OlDaysOfWeek.olFriday;
            }
            if (byDay.Contains("SA"))
            {
                dowMask |= OlDaysOfWeek.olSaturday;
            }
            if (byDay.Contains("SU"))
            {
                dowMask |= OlDaysOfWeek.olSunday;
            }
            return(dowMask);
        }
Exemple #2
0
        /// <summary>
        /// Gets the day of week.
        /// </summary>
        /// <param name="value">The value.</param>
        /// <returns>The Day of Week.</returns>
        public static string GetDayOfWeek(this OlDaysOfWeek value)
        {
            switch (value)
            {
            case OlDaysOfWeek.olMonday:
                return("MO");

            case OlDaysOfWeek.olTuesday:
                return("TU");

            case OlDaysOfWeek.olWednesday:
                return("WE");

            case OlDaysOfWeek.olThursday:
                return("TH");

            case OlDaysOfWeek.olFriday:
                return("FR");

            case OlDaysOfWeek.olSaturday:
                return("SA");

            case OlDaysOfWeek.olSunday:
                return("SU");
            }

            return("MO");
        }
 public static void MapDayOfWeek1To2(OlDaysOfWeek source, IList <IWeekDay> target)
 {
     if ((source & OlDaysOfWeek.olMonday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Monday));
     }
     if ((source & OlDaysOfWeek.olTuesday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Tuesday));
     }
     if ((source & OlDaysOfWeek.olWednesday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Wednesday));
     }
     if ((source & OlDaysOfWeek.olThursday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Thursday));
     }
     if ((source & OlDaysOfWeek.olFriday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Friday));
     }
     if ((source & OlDaysOfWeek.olSaturday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Saturday));
     }
     if ((source & OlDaysOfWeek.olSunday) > 0)
     {
         target.Add(new WeekDay(DayOfWeek.Sunday));
     }
 }
Exemple #4
0
        private static OlDaysOfWeek getDOWmask(Dictionary <String, String> ruleBook)
        {
            OlDaysOfWeek dowMask = 0;

            if (ruleBook.ContainsKey("BYDAY"))
            {
                dowMask = getDOWmask(ruleBook["BYDAY"]);
            }
            return(dowMask);
        }
            private static WeekDay ConvertWeekDays(OlDaysOfWeek olDaysOfWeek)
            {
                WeekDay result = 0;

                foreach (var kv in WeekDayMap)
                {
                    if (olDaysOfWeek.HasFlag(kv.Key))
                    {
                        result |= kv.Value;
                    }
                }
                return(result);
            }
        private static String getByDay(OlDaysOfWeek dowMask)
        {
            string byDay = "";

            byDay += (((dowMask & OlDaysOfWeek.olMonday) != 0) ? "MO," : "");
            byDay += (((dowMask & OlDaysOfWeek.olTuesday) != 0) ? "TU," : "");
            byDay += (((dowMask & OlDaysOfWeek.olWednesday) != 0) ? "WE," : "");
            byDay += (((dowMask & OlDaysOfWeek.olThursday) != 0) ? "TH," : "");
            byDay += (((dowMask & OlDaysOfWeek.olFriday) != 0) ? "FR," : "");
            byDay += (((dowMask & OlDaysOfWeek.olSaturday) != 0) ? "SA," : "");
            byDay += (((dowMask & OlDaysOfWeek.olSunday) != 0) ? "SU," : "");

            return(byDay.Substring(0, byDay.Length - 1));
        }
Exemple #7
0
        private static List <String> getByDay(OlDaysOfWeek dowMask)
        {
            log.Fine("DayOfWeekMask = " + dowMask);
            List <String> byDay = new List <String>();

            byDay.Add(((dowMask & OlDaysOfWeek.olMonday) != 0) ? "MO" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olTuesday) != 0) ? "TU" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olWednesday) != 0) ? "WE" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olThursday) != 0) ? "TH" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olFriday) != 0) ? "FR" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olSaturday) != 0) ? "SA" : "");
            byDay.Add(((dowMask & OlDaysOfWeek.olSunday) != 0) ? "SU" : "");
            byDay = byDay.Where(s => !string.IsNullOrEmpty(s)).ToList();
            return(byDay);
        }
 public static void MapDayOfWeek1To2 (OlDaysOfWeek source, IList<IWeekDay> target)
 {
   if ((source & OlDaysOfWeek.olMonday) > 0)
     target.Add (new WeekDay (DayOfWeek.Monday));
   if ((source & OlDaysOfWeek.olTuesday) > 0)
     target.Add (new WeekDay (DayOfWeek.Tuesday));
   if ((source & OlDaysOfWeek.olWednesday) > 0)
     target.Add (new WeekDay (DayOfWeek.Wednesday));
   if ((source & OlDaysOfWeek.olThursday) > 0)
     target.Add (new WeekDay (DayOfWeek.Thursday));
   if ((source & OlDaysOfWeek.olFriday) > 0)
     target.Add (new WeekDay (DayOfWeek.Friday));
   if ((source & OlDaysOfWeek.olSaturday) > 0)
     target.Add (new WeekDay (DayOfWeek.Saturday));
   if ((source & OlDaysOfWeek.olSunday) > 0)
     target.Add (new WeekDay (DayOfWeek.Sunday));
 }
Exemple #9
0
        public static OlDaysOfWeek MapDayOfWeek2To1(IList <IWeekDay> source)
        {
            OlDaysOfWeek target = 0;

            foreach (var day in source)
            {
                switch (day.DayOfWeek)
                {
                case DayOfWeek.Monday:
                    target |= OlDaysOfWeek.olMonday;
                    break;

                case DayOfWeek.Tuesday:
                    target |= OlDaysOfWeek.olTuesday;
                    break;

                case DayOfWeek.Wednesday:
                    target |= OlDaysOfWeek.olWednesday;
                    break;

                case DayOfWeek.Thursday:
                    target |= OlDaysOfWeek.olThursday;
                    break;

                case DayOfWeek.Friday:
                    target |= OlDaysOfWeek.olFriday;
                    break;

                case DayOfWeek.Saturday:
                    target |= OlDaysOfWeek.olSaturday;
                    break;

                case DayOfWeek.Sunday:
                    target |= OlDaysOfWeek.olSunday;
                    break;
                }
            }

            return(target);
        }
Exemple #10
0
        private void buildOutlookPattern(Event ev, AppointmentItem ai, out RecurrencePattern oPattern)
        {
            if (ev.Recurrence == null)
            {
                oPattern = null; return;
            }

            Dictionary <String, String> ruleBook = explodeRrule(ev.Recurrence);

            if (ruleBook == null)
            {
                throw new ApplicationException("WARNING: The recurrence pattern is not compatible with Outlook. This event cannot be synced.");
            }
            log.Fine("Building Outlook recurrence pattern");
            oPattern = ai.GetRecurrencePattern();

            #region RECURRENCE PATTERN
            //RRULE:FREQ=WEEKLY;UNTIL=20150906T000000Z;BYDAY=SA

            switch (ruleBook["FREQ"])
            {
            case "DAILY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursDaily;
                break;
            }

            case "WEEKLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursWeekly;
                // Need to work out dayMask from "BY" pattern
                // Eg "BYDAY=MO,TU,WE,TH,FR"
                OlDaysOfWeek dowMask = getDOWmask(ruleBook);
                if (dowMask != 0)
                {
                    oPattern.DayOfWeekMask = dowMask;
                }
                break;
            }

            case "MONTHLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance      = (gInstance == -1) ? 5 : gInstance;
                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (oPattern.DayOfWeekMask == (OlDaysOfWeek)127 && gInstance == -1 &&
                        (ev.Start.DateTime ?? DateTime.Parse(ev.Start.Date)).Day > 28)
                    {
                        //In Outlook this is simply a monthly recurring
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                    }
                }
                if (ruleBook.ContainsKey("BYDAY"))
                {
                    if (ruleBook["BYDAY"].StartsWith("-1"))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = 5;
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart("-1".ToCharArray()));
                    }
                    else if ("1,2,3,4".Contains(ruleBook["BYDAY"].Substring(0, 1)))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = Convert.ToInt16(ruleBook["BYDAY"].Substring(0, 1));
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart(oPattern.Instance.ToString().ToCharArray()));
                    }
                }
                break;
            }

            case "YEARLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursYearly;
                //Google interval is years, Outlook is months
                if (ruleBook.ContainsKey("INTERVAL") && Convert.ToInt16(ruleBook["INTERVAL"]) > 1)
                {
                    oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]) * 12;
                }
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursYearNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance = (gInstance == -1) ? 5 : gInstance;

                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (ruleBook.ContainsKey("BYMONTH"))
                    {
                        oPattern.MonthOfYear = Convert.ToInt16(ruleBook["BYMONTH"]);
                    }
                }
                break;
            }
            }
            #endregion

            #region RANGE
            ai = OutlookOgcs.Calendar.Instance.IOutlook.WindowsTimeZone_set(ai, ev);
            oPattern.PatternStartDate = ev.Start.DateTime ?? DateTime.Parse(ev.Start.Date);
            if (ruleBook.ContainsKey("INTERVAL") && Convert.ToInt16(ruleBook["INTERVAL"]) > 1 && ruleBook["FREQ"] != "YEARLY")
            {
                oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]);
            }
            if (ruleBook.ContainsKey("COUNT"))
            {
                oPattern.Occurrences = Convert.ToInt16(ruleBook["COUNT"]);
            }
            if (ruleBook.ContainsKey("UNTIL"))
            {
                if (ruleBook["UNTIL"].StartsWith("4500"))
                {
                    log.Warn("Outlook can't handle end dates this far in the future. Converting to no end date.");
                    oPattern.NoEndDate = true;
                }
                else
                {
                    DateTime endDate;
                    if (ruleBook["UNTIL"].Length == 8 && !ruleBook["UNTIL"].EndsWith("Z"))
                    {
                        endDate = DateTime.ParseExact(ruleBook["UNTIL"], "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).Date;
                    }
                    else
                    {
                        endDate = DateTime.ParseExact(ruleBook["UNTIL"], "yyyyMMddTHHmmssZ", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal);
                        endDate = endDate.AddHours(TimezoneDB.GetUtcOffset(ev.End.TimeZone)).Date;
                    }
                    if (endDate < oPattern.PatternStartDate)
                    {
                        log.Debug("PatternStartDate: " + oPattern.PatternStartDate.ToString("yyyyMMddHHmmss"));
                        log.Debug("PatternEndDate:   " + ruleBook["UNTIL"].ToString());
                        String summary = GoogleOgcs.Calendar.GetEventSummary(ev, onlyIfNotVerbose: true);
                        Forms.Main.Instance.Console.Update(summary + "The recurring Google event has an end date <i>before</i> the start date, which Outlook doesn't allow.<br/>" +
                                                           "The synced Outlook recurrence has been changed to a single occurrence.", Console.Markup.warning);
                        oPattern.Occurrences = 1;
                    }
                    else
                    {
                        oPattern.PatternEndDate = endDate;
                    }
                }
            }
            if (!ruleBook.ContainsKey("COUNT") && !ruleBook.ContainsKey("UNTIL"))
            {
                oPattern.NoEndDate = true;
            }
            #endregion
        }
        private static List <IWeekDay> ExtractDaysOfWeek(OlDaysOfWeek outlookDaysOfWeekMask)
        {
            Log.Info(String.Format("Extracting days of week from outlookDaysOfWeekMask [{0}]", outlookDaysOfWeekMask));
            var myDaysOfWeekMask = new List <IWeekDay>();

            //
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olMonday))
            {
                Log.Debug("Monday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Monday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olTuesday))
            {
                Log.Debug("Tuesday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Tuesday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olWednesday))
            {
                Log.Debug("Wednesday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Wednesday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olThursday))
            {
                Log.Debug("Thursday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Thursday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olFriday))
            {
                Log.Debug("Friday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Friday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olSaturday))
            {
                Log.Debug("Saturday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Saturday
                });
            }
            if (outlookDaysOfWeekMask.HasFlag(OlDaysOfWeek.olSunday))
            {
                Log.Debug("Sunday");
                myDaysOfWeekMask.Add(new WeekDay
                {
                    DayOfWeek = DayOfWeek.Sunday
                });
            }
            return(myDaysOfWeekMask);
        }
Exemple #12
0
        public void BuildOutlookPattern(Event ev, AppointmentItem ai, out RecurrencePattern oPattern)
        {
            if (ev.Recurrence == null)
            {
                oPattern = null; return;
            }

            Dictionary <String, String> ruleBook = explodeRrule(ev.Recurrence);

            log.Fine("Building Outlook recurrence pattern");
            oPattern = ai.GetRecurrencePattern();
            #region RECURRENCE PATTERN
            //RRULE:FREQ=WEEKLY;UNTIL=20150906T000000Z;BYDAY=SA

            switch (ruleBook["FREQ"])
            {
            case "DAILY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursDaily;
                break;
            }

            case "WEEKLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursWeekly;
                // Need to work out dayMask from "BY" pattern
                // Eg "BYDAY=MO,TU,WE,TH,FR"
                OlDaysOfWeek dowMask = getDOWmask(ruleBook);
                if (dowMask != 0)
                {
                    oPattern.DayOfWeekMask = dowMask;
                }
                break;
            }

            case "MONTHLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance      = (gInstance == -1) ? 5 : gInstance;
                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (oPattern.DayOfWeekMask == (OlDaysOfWeek)127 && gInstance == -1 &&
                        DateTime.Parse(ev.Start.DateTime ?? ev.Start.Date).Day > 28)
                    {
                        //In Outlook this is simply a monthly recurring
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                        oPattern.DayOfWeekMask  = 0;
                    }
                }
                if (ruleBook.ContainsKey("BYDAY"))
                {
                    if (ruleBook["BYDAY"].StartsWith("-1"))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = 5;
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart("-1".ToCharArray()));
                    }
                    else if ("1,2,3,4".Contains(ruleBook["BYDAY"].Substring(0, 1)))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = Convert.ToInt16(ruleBook["BYDAY"].Substring(0, 1));
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart(oPattern.Instance.ToString().ToCharArray()));
                    }
                }
                break;
            }

            case "YEARLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursYearly;
                //Google interval is years, Outlook is months
                if (ruleBook.ContainsKey("INTERVAL"))
                {
                    oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]) * 12;
                }
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursYearNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance = (gInstance == -1) ? 5 : gInstance;

                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (ruleBook.ContainsKey("BYMONTH"))
                    {
                        oPattern.MonthOfYear = Convert.ToInt16(ruleBook["BYMONTH"]);
                    }
                }
                break;
            }
            }
            #endregion

            #region RANGE
            if (ruleBook.ContainsKey("INTERVAL") && Convert.ToInt16(ruleBook["INTERVAL"]) > 1 && ruleBook["FREQ"] != "YEARLY")
            {
                oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]);
            }
            if (ruleBook.ContainsKey("COUNT"))
            {
                oPattern.Occurrences = Convert.ToInt16(ruleBook["COUNT"]);
            }
            if (ruleBook.ContainsKey("UNTIL"))
            {
                if (ruleBook["UNTIL"].Length == 8)
                {
                    oPattern.PatternEndDate = DateTime.ParseExact(ruleBook["UNTIL"], "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
                }
                else
                {
                    if (ruleBook["UNTIL"].ToString().Substring(8) == "T000000Z" && ev.Start.DateTime != null)
                    {
                        oPattern.PatternEndDate = DateTime.ParseExact(ruleBook["UNTIL"], "yyyyMMddTHHmmssZ", System.Globalization.CultureInfo.InvariantCulture).AddDays(-1);
                    }
                    else
                    {
                        oPattern.PatternEndDate = DateTime.ParseExact(ruleBook["UNTIL"], "yyyyMMddTHHmmssZ", System.Globalization.CultureInfo.InvariantCulture);
                    }
                }
            }
            #endregion

            ai = OutlookCalendar.Instance.IOutlook.WindowsTimeZone_set(ai, ev);
        }
        private void buildOutlookPattern(Event ev, AppointmentItem ai, out RecurrencePattern oPattern)
        {
            if (ev.Recurrence == null)
            {
                oPattern = null; return;
            }

            Dictionary <String, String> ruleBook = explodeRrule(ev.Recurrence);

            if (ruleBook == null)
            {
                throw new ApplicationException("WARNING: The recurrence pattern is not compatible with Outlook. This event cannot be synced.");
            }
            log.Fine("Building Outlook recurrence pattern");
            oPattern = ai.GetRecurrencePattern();

            #region RECURRENCE PATTERN
            //RRULE:FREQ=WEEKLY;UNTIL=20150906T000000Z;BYDAY=SA

            switch (ruleBook["FREQ"])
            {
            case "DAILY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursDaily;
                break;
            }

            case "WEEKLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursWeekly;
                // Need to work out dayMask from "BY" pattern
                // Eg "BYDAY=MO,TU,WE,TH,FR"
                OlDaysOfWeek dowMask = getDOWmask(ruleBook);
                if (dowMask != 0)
                {
                    oPattern.DayOfWeekMask = dowMask;
                }
                break;
            }

            case "MONTHLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance      = (gInstance == -1) ? 5 : gInstance;
                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (oPattern.DayOfWeekMask == (OlDaysOfWeek)127 && gInstance == -1 &&
                        (ev.Start.DateTime ?? DateTime.Parse(ev.Start.Date)).Day > 28)
                    {
                        //In Outlook this is simply a monthly recurring
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthly;
                    }
                }
                if (ruleBook.ContainsKey("BYDAY"))
                {
                    if (ruleBook["BYDAY"].StartsWith("-1"))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = 5;
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart("-1".ToCharArray()));
                    }
                    else if ("1,2,3,4".Contains(ruleBook["BYDAY"].Substring(0, 1)))
                    {
                        oPattern.RecurrenceType = OlRecurrenceType.olRecursMonthNth;
                        oPattern.Instance       = Convert.ToInt16(ruleBook["BYDAY"].Substring(0, 1));
                        oPattern.DayOfWeekMask  = getDOWmask(ruleBook["BYDAY"].TrimStart(oPattern.Instance.ToString().ToCharArray()));
                    }
                }
                break;
            }

            case "YEARLY": {
                oPattern.RecurrenceType = OlRecurrenceType.olRecursYearly;
                //Google interval is years, Outlook is months
                if (ruleBook.ContainsKey("INTERVAL") && Convert.ToInt16(ruleBook["INTERVAL"]) > 1)
                {
                    oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]) * 12;
                }
                if (ruleBook.ContainsKey("BYSETPOS"))
                {
                    oPattern.RecurrenceType = OlRecurrenceType.olRecursYearNth;
                    int gInstance = Convert.ToInt16(ruleBook["BYSETPOS"]);
                    oPattern.Instance = (gInstance == -1) ? 5 : gInstance;

                    oPattern.DayOfWeekMask = getDOWmask(ruleBook);
                    if (ruleBook.ContainsKey("BYMONTH"))
                    {
                        oPattern.MonthOfYear = Convert.ToInt16(ruleBook["BYMONTH"]);
                    }
                }
                break;
            }
            }
            #endregion

            #region RANGE
            ai = OutlookOgcs.Calendar.Instance.IOutlook.WindowsTimeZone_set(ai, ev);
            oPattern.PatternStartDate = ev.Start.DateTime ?? DateTime.Parse(ev.Start.Date);
            if (ruleBook.ContainsKey("INTERVAL") && Convert.ToInt16(ruleBook["INTERVAL"]) > 1 && ruleBook["FREQ"] != "YEARLY")
            {
                oPattern.Interval = Convert.ToInt16(ruleBook["INTERVAL"]);
            }
            if (ruleBook.ContainsKey("COUNT"))
            {
                oPattern.Occurrences = Convert.ToInt16(ruleBook["COUNT"]);
            }
            if (ruleBook.ContainsKey("UNTIL"))
            {
                if (ruleBook["UNTIL"].StartsWith("4500"))
                {
                    log.Warn("Outlook can't handle end dates this far in the future. Converting to no end date.");
                    oPattern.NoEndDate = true;
                }
                else
                {
                    oPattern.PatternEndDate = DateTime.ParseExact(ruleBook["UNTIL"].ToString().Substring(0, 8), "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture).Date;
                }
            }
            if (!ruleBook.ContainsKey("COUNT") && !ruleBook.ContainsKey("UNTIL"))
            {
                oPattern.NoEndDate = true;
            }
            #endregion
        }
 private static List<String> getByDay(OlDaysOfWeek dowMask) {
     log.Fine("DayOfWeekMask = " + dowMask);
     List<String> byDay = new List<String>();
     byDay.Add(((dowMask & OlDaysOfWeek.olMonday) != 0) ? "MO" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olTuesday) != 0) ? "TU" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olWednesday) != 0) ? "WE" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olThursday) != 0) ? "TH" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olFriday) != 0) ? "FR" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olSaturday) != 0) ? "SA" : "");
     byDay.Add(((dowMask & OlDaysOfWeek.olSunday) != 0) ? "SU" : "");
     byDay = byDay.Where(s => !string.IsNullOrEmpty(s)).ToList();
     return byDay;
 }
Exemple #15
0
        /// <summary>
        /// 获取一周中有几天。周日~周六分别对应0~6
        /// </summary>
        /// <param name="dayOfWeek">OlDaysOfWeek类型</param>
        /// <returns>星期几的数组</returns>
        private int[] getWeekDays(OlDaysOfWeek dayOfWeek)
        {
            int nCount = 0;
            ArrayList List = new ArrayList();

            if ((dayOfWeek & Outlook.OlDaysOfWeek.olSunday) == Outlook.OlDaysOfWeek.olSunday)
            {
                nCount++;
                List.Add(0);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olMonday) == Outlook.OlDaysOfWeek.olMonday)
            {
                nCount++;
                List.Add(1);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olTuesday) == Outlook.OlDaysOfWeek.olTuesday)
            {
                nCount++;
                List.Add(2);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olWednesday) == Outlook.OlDaysOfWeek.olWednesday)
            {
                nCount++;
                List.Add(3);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olThursday) == Outlook.OlDaysOfWeek.olThursday)
            {
                nCount++;
                List.Add(4);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olFriday) == Outlook.OlDaysOfWeek.olFriday)
            {
                nCount++;
                List.Add(5);
            }
            if ((dayOfWeek & Outlook.OlDaysOfWeek.olSaturday) == Outlook.OlDaysOfWeek.olSaturday)
            {
                nCount++;
                List.Add(6);
            }

            Int32[] values2 = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组
            return values2;
        }