private CalendarPropertyBase NewProperty(CalendarPropertyReader pr)
        {
            CalendarValueType valueType = pr.ValueType;

            if (valueType <= CalendarValueType.Date)
            {
                if (valueType == CalendarValueType.CalAddress)
                {
                    return(new CalendarAttendee());
                }
                if (valueType != CalendarValueType.Date)
                {
                    goto IL_83;
                }
            }
            else if (valueType != CalendarValueType.DateTime)
            {
                if (valueType != CalendarValueType.Text)
                {
                    goto IL_83;
                }
                if (string.Compare(pr.Name, "X-MS-OLK-ORIGINALSTART", StringComparison.CurrentCultureIgnoreCase) == 0 || string.Compare(pr.Name, "X-MS-OLK-ORIGINALEND", StringComparison.CurrentCultureIgnoreCase) == 0 || string.Compare(pr.Name, "X-MICROSOFT-EXDATE", StringComparison.CurrentCultureIgnoreCase) == 0)
                {
                    return(new CalendarDateTime());
                }
                return(new CalendarPropertyBase());
            }
            return(new CalendarDateTime());

IL_83:
            return(new CalendarPropertyBase());
        }
        private bool ParseProperty(CalendarPropertyReader propertyReader)
        {
            bool result = false;
            CalendarPropertyBase calendarPropertyBase = this.NewProperty(propertyReader);

            if (calendarPropertyBase.Parse(propertyReader))
            {
                this.ProcessProperty(calendarPropertyBase);
                this.icalProperties.Add(calendarPropertyBase);
                result = true;
            }
            return(result);
        }
        private bool ParseProperties(CalendarReader calReader)
        {
            CalendarPropertyReader propertyReader = calReader.PropertyReader;

            while (propertyReader.ReadNextProperty())
            {
                if (!this.ParseProperty(propertyReader) && !string.IsNullOrEmpty(propertyReader.Name))
                {
                    this.Context.AddError(ServerStrings.InvalidICalElement(propertyReader.Name));
                    return(false);
                }
            }
            return(true);
        }
            private void WriteProperties(CalendarReader reader, CalendarWriter writer)
            {
                CalendarPropertyReader propertyReader = reader.PropertyReader;

                while (propertyReader.ReadNextProperty())
                {
                    PropertyId propertyId = propertyReader.PropertyId;
                    bool       flag;
                    if (ComponentId.VEvent == reader.ComponentId && this.dirty.TryGetValue(propertyId, out flag) && flag)
                    {
                        object obj = this[propertyId];
                        if (obj != null)
                        {
                            this.WriteProperty(writer, propertyId, obj);
                        }
                    }
                    else
                    {
                        writer.WriteProperty(propertyReader);
                    }
                }
            }
        internal bool Parse(CalendarPropertyReader propertyReader)
        {
            this.calendarPropertyId = new CalendarPropertyId(propertyReader.PropertyId, propertyReader.Name);
            this.value      = null;
            this.valueType  = propertyReader.ValueType;
            this.parameters = new List <CalendarParameter>();
            CalendarParameterReader parameterReader = propertyReader.ParameterReader;

            while (parameterReader.ReadNextParameter())
            {
                CalendarParameter calendarParameter = new CalendarParameter();
                if (!calendarParameter.Parse(parameterReader) || !this.ProcessParameter(calendarParameter))
                {
                    return(false);
                }
                this.parameters.Add(calendarParameter);
            }
            this.valueType = propertyReader.ValueType;
            SchemaInfo schemaInfo;

            if (VEvent.GetConversionSchema().TryGetValue(this.calendarPropertyId.Key, out schemaInfo) && schemaInfo.IsMultiValue)
            {
                List <object> list = new List <object>();
                while (propertyReader.ReadNextValue())
                {
                    object item = this.ReadValue(propertyReader);
                    list.Add(item);
                }
                this.value = list;
            }
            else
            {
                this.value = this.ReadValue(propertyReader);
            }
            return(this.Validate());
        }
 internal void Load(CalendarReader reader, Charset charset)
 {
     while (reader.ReadNextComponent())
     {
         if (ComponentId.VEvent == reader.ComponentId)
         {
             CalendarPropertyReader propertyReader = reader.PropertyReader;
             while (propertyReader.ReadNextProperty())
             {
                 PropertyId propertyId = propertyReader.PropertyId;
                 if (this.dirty.ContainsKey(propertyId) && !this.properties.ContainsKey(propertyId))
                 {
                     if (PropertyId.Description == propertyId || PropertyId.Comment == propertyId)
                     {
                         byte[] array = null;
                         TemporaryDataStorage temporaryDataStorage = new TemporaryDataStorage();
                         using (Stream stream = temporaryDataStorage.OpenWriteStream(true))
                         {
                             using (Stream valueReadStream = propertyReader.GetValueReadStream())
                             {
                                 DataStorage.CopyStreamToStream(valueReadStream, stream, long.MaxValue, ref array);
                             }
                         }
                         BodyData bodyData = new BodyData();
                         bodyData.SetFormat(BodyFormat.Text, InternalBodyFormat.Text, charset);
                         bodyData.SetStorage(temporaryDataStorage, 0L, long.MaxValue);
                         temporaryDataStorage.Release();
                         this.properties[propertyId] = bodyData;
                     }
                     else if (PropertyId.Attendee == propertyId)
                     {
                         CalendarParameterReader parameterReader = propertyReader.ParameterReader;
                         while (parameterReader.ReadNextParameter())
                         {
                             if (parameterReader.ParameterId == ParameterId.ParticipationStatus)
                             {
                                 this.properties[propertyId] = parameterReader.ReadValue();
                             }
                         }
                     }
                     else
                     {
                         this.properties[propertyId] = propertyReader.ReadValue();
                     }
                 }
             }
         }
         if (ComponentId.VCalendar == reader.ComponentId)
         {
             CalendarPropertyReader propertyReader2 = reader.PropertyReader;
             while (propertyReader2.ReadNextProperty())
             {
                 PropertyId propertyId2 = propertyReader2.PropertyId;
                 if (PropertyId.Method == propertyId2)
                 {
                     this.properties[propertyId2] = propertyReader2.ReadValue();
                 }
             }
         }
     }
 }
 protected virtual object ReadValue(CalendarPropertyReader propertyReader)
 {
     return(propertyReader.ReadValue());
 }
 protected override object ReadValue(CalendarPropertyReader propertyReader)
 {
     return(propertyReader.ReadValueAsDateTime());
 }