Example #1
0
        public void doAttribute(Token key, Token val)
        {
            if (_component.Count <= 0)
            {
                return;
            }

            //event timezone
            if ((_curPropToken.TokenVal == TokenValue.Tdtstart || _curPropToken.TokenVal == TokenValue.Tdtend) && _component.Peek().TokenVal == TokenValue.Tvevent)
            {
                switch (key.TokenText.ToLower())
                {
                case "tzid":

                    var tz = TimeZoneConverter.GetTimeZone(val.TokenText);
                    if (_curPropToken.TokenVal == TokenValue.Tdtstart)
                    {
                        _curEvent.UtcStartDate = _curEvent.OriginalStartDate.AddMinutes((-1) * (int)tz.BaseUtcOffset.TotalMinutes);
                    }

                    else if (_curPropToken.TokenVal == TokenValue.Tdtend)
                    {
                        _curEvent.UtcEndDate = _curEvent.OriginalEndDate.AddMinutes((-1) * (int)tz.BaseUtcOffset.TotalMinutes);
                    }

                    break;
                }
            }

            //event rrule
            if (_curPropToken.TokenVal == TokenValue.Trrule && _component.Peek().TokenVal == TokenValue.Tvevent)
            {
                switch (key.TokenText.ToLower())
                {
                case "freq":
                    _curEvent.RecurrenceRule.Freq = RecurrenceRule.ParseFrequency(val.TokenText);
                    break;

                case "until":
                    bool isDate, isUTC;
                    _curEvent.RecurrenceRule.Until = Token.ParseDateTime(val.TokenText, out isDate, out isUTC);
                    break;

                case "count":
                    _curEvent.RecurrenceRule.Count = Convert.ToInt32(val.TokenText);
                    break;

                case "interval":
                    _curEvent.RecurrenceRule.Interval = Convert.ToInt32(val.TokenText);
                    break;

                case "bysecond":
                    _curEvent.RecurrenceRule.BySecond = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "byminute":
                    _curEvent.RecurrenceRule.ByMinute = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "byhour":
                    _curEvent.RecurrenceRule.ByHour = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "byday":
                    _curEvent.RecurrenceRule.ByDay = val.TokenText.Split(',').Select(v => RecurrenceRule.WeekDay.Parse(v)).ToArray();
                    break;

                case "bymonthday":
                    _curEvent.RecurrenceRule.ByMonthDay = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "byyearday":
                    _curEvent.RecurrenceRule.ByYearDay = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "byweekno":
                    _curEvent.RecurrenceRule.ByWeekNo = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "bymonth":
                    _curEvent.RecurrenceRule.ByMonth = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "bysetpos":
                    _curEvent.RecurrenceRule.BySetPos = val.TokenText.Split(',').Select(v => Convert.ToInt32(v)).ToArray();
                    break;

                case "wkst":
                    _curEvent.RecurrenceRule.WKST = RecurrenceRule.WeekDay.Parse(val.TokenText);
                    break;
                }
            }
        }