Example #1
0
        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);
        }
Example #2
0
        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);
        }