internal List <object> _ProcessEvData(DHXEventsHelper._ParsedEventData data, PropertyDescriptorCollection info) { List <object> objectList = new List <object>(); Dictionary <string, object> properties = new Dictionary <string, object>(); if (string.IsNullOrEmpty((string)info.Find("rec_type", true).GetValue(data.EventObject))) { objectList.Add(data.EventObject); } else { foreach (PropertyDescriptor propertyDescriptor in info) { if (propertyDescriptor.Name != "rec_type" && propertyDescriptor.Name != "event_pid" && propertyDescriptor.Name != "event_length") { properties.Add(propertyDescriptor.Name, propertyDescriptor.GetValue(data.EventObject)); } } ConstructorInfo constructor = data.EventObject.GetType().GetConstructor(new Type[0]); foreach (DateTime occurrence in data.Occurrences) { long? nullable = (long?)info.Find("event_length", true).GetValue(data.EventObject); DateTime dateTime = !nullable.HasValue ? occurrence : occurrence.AddSeconds((double)nullable.Value); object part = constructor.Invoke(new object[0]); properties["start_date"] = (object)occurrence; properties["end_date"] = (object)dateTime; objectList.Add(this.ConstructItem(part, info, properties)); } } return(objectList); }
public List <object> GetOccurrences(IEnumerable items, DateTime from, DateTime to) { List <object> objectList = new List <object>(); bool flag = true; List <DHXEventsHelper._ParsedEventData> source = new List <DHXEventsHelper._ParsedEventData>(); PropertyDescriptorCollection info = (PropertyDescriptorCollection)null; foreach (object ev in items) { if (flag) { info = new HyperTypeDescriptionProvider(ev.GetType()).GetTypeDescriptor(ev.GetType()).GetProperties(); flag = false; } DHXEventsHelper._ParsedEventData occurrences = this._GetOccurrences(ev, from, to, 300, info); if (occurrences != null) { source.Add(occurrences); } } TimeSpan utcOffset = TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); using (List <DHXEventsHelper._ParsedEventData> .Enumerator enumerator = source.GetEnumerator()) { while (enumerator.MoveNext()) { DHXEventsHelper._ParsedEventData eventSet = enumerator.Current; if (eventSet.EventInfo.parsed_type == null || eventSet.EventInfo.parsed_type.Type == RecTypes.None || string.IsNullOrEmpty(eventSet.EventInfo.rec_type)) { DHXEventsHelper._ParsedEventData parsedEventData = source.SingleOrDefault <DHXEventsHelper._ParsedEventData>((Func <DHXEventsHelper._ParsedEventData, bool>)(set => { int id = set.EventInfo.id; int?eventPid = eventSet.EventInfo.event_pid; if (id == eventPid.GetValueOrDefault()) { return(eventPid.HasValue); } return(false); })); if (parsedEventData != null && eventSet.EventInfo.event_length.HasValue) { DateTime dateTime = new DateTime(1970, 1, 1).AddSeconds((double)eventSet.EventInfo.event_length.Value) + utcOffset; parsedEventData.Occurrences.Remove(dateTime); } } } } foreach (DHXEventsHelper._ParsedEventData data in source) { if (data.EventInfo.parsed_type == null && string.IsNullOrEmpty(data.EventInfo.rec_type) || data.EventInfo.parsed_type != null && (data.EventInfo.parsed_type.Type == RecTypes.Invalid || data.EventInfo.parsed_type.Type != RecTypes.None)) { objectList.AddRange((IEnumerable <object>) this._ProcessEvData(data, info)); } } return(objectList); }