private bool ParseSubComponent(CalendarReader calReader)
        {
            CalendarComponentBase calendarComponentBase = this.NewComponent(calReader);
            bool result;

            if (calendarComponentBase.Parse(calReader))
            {
                if (this.ProcessSubComponent(calendarComponentBase))
                {
                    this.subComponents.Add(calendarComponentBase);
                    result = true;
                }
                else
                {
                    ExTraceGlobals.ICalTracer.TraceError <string>((long)this.GetHashCode(), "CalendarComponentBase::ParseSubComponent. Failed to process component: {0}", calendarComponentBase.componentName);
                    result = false;
                }
            }
            else
            {
                ExTraceGlobals.ICalTracer.TraceError <string>((long)this.GetHashCode(), "CalendarComponentBase::ParseSubComponent. Failed to parse component: {0}", calendarComponentBase.componentName);
                result = false;
            }
            return(result);
        }
 public void WriteTo(Stream destination)
 {
     this.stream.Position = 0L;
     using (CalendarReader calendarReader = new CalendarReader(new SuppressCloseStream(this.stream), this.originalCharset.Name, CalendarComplianceMode.Loose))
     {
         using (CalendarWriter calendarWriter = new CalendarWriter(new SuppressCloseStream(destination), this.targetCharset.Name))
         {
             calendarWriter.SetLooseMode();
             this.properties.Write(calendarReader, calendarWriter);
         }
     }
 }
        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);
        }
示例#4
0
        public ActionResult GetView(int tileId)
        {
            var tile = db.Tile.Find(tileId);

            // which tile is it?

            if (tile.TileType == 1)
            {
                // this is a noticeboard tile.
                var noticeBoard = tile as Noticeboard;
                // get Noticeboard Items ViewModel.
                var noticeboardItem = NoticeboardReader.GetNoticeboardItem(noticeBoard, db);
                if (noticeboardItem == null)
                {
                    return(PartialView("_ErrorPartialView", "Cannot find noticeboard item, check your configuration"));
                }
                // pass ViewModel to the view.
                return(PartialView("_NoticeBoardTilePartialView", noticeboardItem));
            }
            if (tile.TileType == 2)
            {
                // this is a calendar tile.
                var calender = tile as Calender;
                // get Calendar Items ViewModel.
                var calendarItems = CalendarReader.GetCalendarItems(calender, db);
                // pass ViewModel to the view.
                return(PartialView("_CalendarTilePartialView", calendarItems));
            }
            if (tile.TileType == 3)
            {
                // this is a newsfeed tile.
                var newstile = tile as Newsfeed;
                // get Newsfeed Items ViewModel.
                var newsItems = RssReader.Read(newstile.RssUrl);
                // pass ViewModel to the view.
                return(PartialView("_NewsFeedTilePartialView", newsItems));
            }
            if (tile.TileType == 4)
            {
                // this is the a Twitter tile.
                var twitterTile = tile as Twitter;
                // get Twitter Items ViewModel.
                var tweets = TwitterReader.GetTweets(twitterTile.SearchCriteria);
                // pass ViewModel to the view.
                return(PartialView("_TwitterTilePartialView", tweets));
            }

            return(PartialView("_TilePartialView"));
        }
        private void listBox_Loaded(object sender, RoutedEventArgs e)
        {
            CalendarReader cl = new CalendarReader();

            cl.GoogleMain();
            events = new ObservableCollection <string>(cl.gcevents);
            dates  = new ObservableCollection <string>(cl.dates);
            foreach (string f in events)
            {
                foreach (string d in dates)
                {
                    listBox.Items.Add((f.ToString() + "    " + (d) + "\n"));
                }
            }
        }
示例#6
0
        public static WeekDayNum ReadFrom(CalendarReader reader)
        {
            int?order = null;

            if (reader.IsSignedInteger)
            {
                order = reader.ReadSignedInteger();
            }
            var wd        = reader.ReadName();
            var dayOfWeek = ParseDayOfWeek(wd);

            return(new WeekDayNum {
                DayOfWeek = dayOfWeek,
                OrderWeek = order
            });
        }
        private bool ParseSubComponents(CalendarReader calReader)
        {
            if (calReader.ReadFirstChildComponent())
            {
                while (this.ParseSubComponent(calReader))
                {
                    if (!calReader.ReadNextSiblingComponent())
                    {
                        goto IL_37;
                    }
                }
                ExTraceGlobals.ICalTracer.TraceError <string>((long)this.GetHashCode(), "CalendarComponentBase::ParseSubComponents. Failed to parse subcomponent: {0}", calReader.ComponentName);
                return(false);
            }
IL_37:
            return(this.ValidateStructure());
        }
示例#8
0
        public void Run()
        {
            //ExStart: ReadMultilpleEventsFromICS
            string dataDir = RunExamples.GetDataDir_Email();

            List <Appointment> appointments = new List <Appointment>();

            CalendarReader reader = new CalendarReader(dataDir + "US-Holidays.ics");

            while (reader.NextEvent())
            {
                appointments.Add(reader.Current);
            }
            //working with appointments...

            //ExEnd: ReadMultilpleEventsFromICS
        }
        internal static IEnumerable <Item> InternalICalToItems(Stream iCalStream, string charsetName, InboundAddressCache addressCache, uint?maxBodyLength, bool hasExceptionPromotion, Func <Item> getItem, IList <LocalizedString> errorStream, out string calendarName)
        {
            Util.ThrowOnNullArgument(iCalStream, "iCalStream");
            Util.ThrowOnNullArgument(addressCache, "addressCache");
            Util.ThrowOnNullArgument(errorStream, "errorStream");
            bool flag                           = false;
            LocalizedException ex               = null;
            Charset            charset          = Charset.GetCharset(charsetName ?? "utf-8");
            CalendarDocument   calendarDocument = new CalendarDocument();
            IEnumerable <Item> result;

            using (CalendarReader calendarReader = new CalendarReader(new StreamWrapper(iCalStream, false), charset.Name, CalendarComplianceMode.Loose))
            {
                ICalInboundContext calInboundContext = new ICalInboundContext(charset, errorStream, addressCache, addressCache.Options, calendarReader, maxBodyLength, hasExceptionPromotion);
                try
                {
                    flag = (calendarDocument.Parse(calInboundContext) && calendarDocument.vCalendar.Validate());
                }
                catch (InvalidCalendarDataException ex2)
                {
                    ex = ex2;
                }
                calendarName = calInboundContext.CalendarName;
                if (!flag)
                {
                    if (ex != null)
                    {
                        ExTraceGlobals.ICalTracer.TraceError <string>((long)calendarDocument.GetHashCode(), "CalendarDocument::InternalICalToItems. Found exception: '{0}'.", ex.Message);
                        errorStream.Add(ex.LocalizedString);
                    }
                    else if (errorStream.Count != 0)
                    {
                        ExTraceGlobals.ICalTracer.TraceError <int>((long)calendarDocument.GetHashCode(), "CalendarDocument::InternalICalToItems. {0} error found.", errorStream.Count);
                        errorStream.Add(ServerStrings.InvalidICalElement("VCALENDAR"));
                    }
                    result = Array <CalendarItemBase> .Empty;
                }
                else
                {
                    result = calendarDocument.vCalendar.Promote(getItem);
                }
            }
            return(result);
        }
            internal void Write(CalendarReader reader, CalendarWriter writer)
            {
                int num = 0;

                while (reader.ReadNextComponent())
                {
                    while (num-- >= reader.Depth)
                    {
                        writer.EndComponent();
                    }
                    writer.StartComponent(reader.ComponentName);
                    this.WriteProperties(reader, writer);
                    num = reader.Depth;
                }
                while (num-- > 0)
                {
                    writer.EndComponent();
                }
            }
        internal bool Parse(CalendarReader calReader)
        {
            this.componentId    = calReader.ComponentId;
            this.componentName  = calReader.ComponentName;
            this.icalProperties = new List <CalendarPropertyBase>();
            this.subComponents  = new List <CalendarComponentBase>();
            bool result;

            try
            {
                result = (this.ParseProperties(calReader) && this.ParseSubComponents(calReader));
            }
            catch (ArgumentException)
            {
                this.Context.AddError(ServerStrings.InvalidICalElement(this.componentName));
                result = false;
            }
            return(result);
        }
            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 Load()
        {
            if (!this.mimePart.TryGetContentReadStream(out this.stream))
            {
                return(false);
            }
            bool result;

            try
            {
                this.properties = new PureCalendarMessage.CalendarPropertyBag(this);
                using (CalendarReader calendarReader = new CalendarReader(new SuppressCloseStream(this.stream), this.originalCharset.Name, CalendarComplianceMode.Loose))
                {
                    this.properties.Load(calendarReader, this.originalCharset);
                    result = true;
                }
            }
            catch (ByteEncoderException)
            {
                result = false;
            }
            return(result);
        }
        private CalendarComponentBase NewComponent(CalendarReader calReader)
        {
            ComponentId componentId = calReader.ComponentId;

            if (componentId <= ComponentId.VTimeZone)
            {
                if (componentId == ComponentId.VEvent)
                {
                    return(new VEvent(this.root));
                }
                if (componentId == ComponentId.VTodo)
                {
                    return(new VTodo(this.root));
                }
                if (componentId == ComponentId.VTimeZone)
                {
                    return(new VTimeZone(this.root));
                }
            }
            else
            {
                if (componentId == ComponentId.VAlarm)
                {
                    return(new VAlarm(this.root));
                }
                if (componentId == ComponentId.Standard)
                {
                    return(new TimeZoneRule(this.root));
                }
                if (componentId == ComponentId.Daylight)
                {
                    return(new TimeZoneRule(this.root));
                }
            }
            return(new CalendarComponentBase(this.root));
        }
示例#15
0
        public static RecurrenceValue Parse(CalendarReader reader)
        {
            RecurrenceFrequency?freq    = null;
            int?               interval = null;
            List <int>         byMinute = null;
            List <int>         byHour   = null;
            List <WeekDayNum>  byDay    = null;
            List <int>         bySetPos = null;
            List <MonthOfYear> byMonth  = null;

            do
            {
                var param = CalendarPropertyParameter.ReadFrom(reader);
                var name  = param.Name.ToUpperInvariant();
                switch (name)
                {
                case "FREQ":
                    if (freq.HasValue)
                    {
                        throw new Exception("Multiple FREQ rule parts occured");
                    }
                    freq = ParseFrequency(param.Value);
                    break;

                case "INTERVAL":
                    if (interval.HasValue)
                    {
                        throw new Exception("Multiple INTERVAL rule parts occured");
                    }
                    interval = int.Parse(param.Value);
                    break;

                case "BYMINUTE":
                    if (byMinute != null)
                    {
                        throw new Exception("Multiple BYMINUTE rule parts occured");
                    }
                    if (param.Values.Count == 0)
                    {
                        throw new Exception("BYMINUTE values expected");
                    }
                    byMinute = param.Values.Select(int.Parse).ToList();
                    break;

                case "BYHOUR":
                    if (byHour != null)
                    {
                        throw new Exception("Multiple BYHOUR rule parts occured");
                    }
                    if (param.Values.Count == 0)
                    {
                        throw new Exception("BYHOUR values expected");
                    }
                    byHour = param.Values.Select(int.Parse).ToList();
                    break;

                case "BYDAY":
                    if (byDay != null)
                    {
                        throw new Exception("Multiple BYDAY rule parts occured");
                    }
                    if (param.Values.Count == 0)
                    {
                        throw new Exception("BYDAY values expected");
                    }
                    byDay = param.Values.Select(WeekDayNum.Parse).ToList();
                    break;

                case "BYMONTH":
                    if (byMonth != null)
                    {
                        throw new Exception("Multiple BYMONTH rule parts occured");
                    }
                    if (param.Values.Count == 0)
                    {
                        throw new Exception("BYMONTH values expected");
                    }
                    byMonth = param.Values.Select(item => (MonthOfYear)int.Parse(item)).ToList();
                    break;

                case "BYSETPOS":
                    if (bySetPos != null)
                    {
                        throw new Exception("Multiple BYSETPOS rule parts occured");
                    }
                    if (param.Values.Count == 0)
                    {
                        throw new Exception("BYSETPOS values expected");
                    }
                    bySetPos = param.Values.Select(int.Parse).ToList();
                    break;

                default:
                    throw new Exception("Unknown rule part " + name);
                }
            } while (reader.PeekOrRead(';'));

            if (!freq.HasValue)
            {
                throw new Exception("FREQ rule part is required");
            }
            return(new RecurrenceValue {
                Frequency = freq.Value,
                Interval = interval,
                ByMinute = byMinute,
                ByHour = byHour,
                ByDay = byDay,
                ByMonth = byMonth,
                BySetPos = bySetPos
            });
        }
 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();
                 }
             }
         }
     }
 }
示例#17
0
 public ICalInboundContext(Charset charset, IList <LocalizedString> errorStream, InboundAddressCache addressCache, InboundConversionOptions options, CalendarReader reader, uint?maxBodyLength, bool hasExceptionPromotion) : base(charset, errorStream, addressCache)
 {
     Util.ThrowOnNullArgument(options, "options");
     if (!options.IgnoreImceaDomain)
     {
         Util.ThrowOnNullOrEmptyArgument(options.ImceaEncapsulationDomain, "options.ImceaEncapsulationDomain");
     }
     Util.ThrowOnNullArgument(reader, "reader");
     this.Options               = options;
     this.Reader                = reader;
     this.MaxBodyLength         = maxBodyLength;
     this.HasExceptionPromotion = hasExceptionPromotion;
     this.DeclaredTimeZones     = new Dictionary <string, ExTimeZone>(StringComparer.OrdinalIgnoreCase);
 }