public string Serialize()
        {
            // create calendar, Outlook will ignore the name
            var calendar = new Ical.Net.Calendar
            {
                Name = INLOOX_DISPLAY_NAME
            };

            foreach (var item in _items)
            {
                // check if task item has dates
                if (item.HasStartDate == true &&
                    item.HasEndDate == true)
                {
                    // add basic info
                    var calendarItem = new CalendarEvent
                    {
                        Summary    = item.Name,
                        Start      = new CalDateTime(((DateTimeOffset)item.StartDateTime).UtcDateTime, TIMEZONE_UTC),
                        End        = new CalDateTime(((DateTimeOffset)item.EndDateTime).UtcDateTime, TIMEZONE_UTC),
                        Categories = new List <string> {
                            INLOOX_DISPLAY_NAME, TASK_ENTITY_DISPLAY_NAME, item.PlanningReservationId.ToString()
                        },
                        Uid         = item.PlanningReservationId.ToString(),
                        Description = string.Empty
                    };

                    // add free/busy type
                    calendarItem.AddProperty(STANDARD_FREE_KEY, FREE_VALUE);
                    calendarItem.AddProperty(MICROSOFT_FREE_KEY, FREE_VALUE);

                    // add alarm, Outlook does not support this
                    var alarm = new Alarm()
                    {
                        Summary = item.Name,
                        Trigger = new Trigger(_reminderTimespan),
                        Action  = AlarmAction.Display
                    };
                    calendarItem.Alarms.Add(alarm);

                    // add to calendar
                    calendar.Events.Add(calendarItem);
                }
            }

            // create ICS output
            var serializer         = new CalendarSerializer();
            var serializedCalendar = serializer.SerializeToString(calendar);

            return(serializedCalendar);
        }
Exemple #2
0
        static Calendar CalendarFromTimeTable(TimeTable timeTable, IEnumerable <CourseConfig> courses)
        {
            var now    = DateTime.Now;
            var newCal = new Calendar();

            //select lessons
            var lessons = timeTable.Lessons
                          .SelectMany(ls => ls.Value.Select(l => (time: ls.Key, lesson: l)))
                          .ToList();

            //Select lessons for each course
            var cs = courses
                     .Select(c =>
                             (course: c,
                              lesson: lessons
                              .Select(l =>
                                      (time: l.time,
                                       lesson: l.lesson,
                                       score: l.lesson
                                       .Score(c.Filter)))
                              .Where(l => l.score != int.MaxValue)))
                     .ToList();

            //Warn empty courses
            foreach (var emptyC in cs.Where(c => !c.lesson.Any() && c.course.Warn == WarnMethod.NotFound))
            {
                logger.Warn("Course '{0}' does not have any lessons and the warning flag is not disabled.", emptyC.course.Filter);
            }

            //Actualy add courses
            foreach (var l in cs.SelectMany(c => c.lesson.Select(l => (lesson: l.lesson, time: l.time, course: c.course))))
            {
                CalendarEvent item = new CalendarEvent()
                {
                    DtStart = new CalDateTime(l.time.Start),
                    DtEnd   = new CalDateTime(l.time.End),
                    Summary = l.lesson.ToString(),
                };

                if (Regex.IsMatch(l.course.Color, "^#[A-Fa-f0-9]{3}([A-Fa-f0-9]{3})?$"))
                {
                    item.AddProperty("COLOR", l.course.Color);
                }
                else if (l.course.Color != "default")
                {
                    logger.Warn("{0} is not a valid color value", l.course.Color);
                }

                newCal.Events.Add(item);
            }

            return(newCal);
        }
        public void PropertySerialization_Tests()
        {
            const string formatted =
                @"FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 3.2//EN"">\n<HTML>\n<HEAD>\n<META NAME=""Generator"" CONTENT=""MS Exchange Server version rmj.rmm.rup.rpr"">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted from text/rtf format -->\n\n<P DIR=LTR><SPAN LANG=""en-us""><FONT FACE=""Calibri"">This is some</FONT></SPAN><SPAN LANG=""en-us""><B> <FONT FACE=""Calibri"">HTML</FONT></B></SPAN><SPAN LANG=""en-us""><FONT FACE=""Calibri""></FONT></SPAN><SPAN LANG=""en-us""><U> <FONT FACE=""Calibri"">formatted</FONT></U></SPAN><SPAN LANG=""en-us""><FONT FACE=""Calibri""></FONT></SPAN><SPAN LANG=""en-us""><I> <FONT FACE=""Calibri"">text</FONT></I></SPAN><SPAN LANG=""en-us""><FONT FACE=""Calibri"">.</FONT></SPAN><SPAN LANG=""en-us""></SPAN></P>\n\n</BODY>\n</HTML>";

            var start  = DateTime.Now;
            var end    = start.AddHours(1);
            var @event = new CalendarEvent
            {
                Start       = new CalDateTime(start),
                End         = new CalDateTime(end),
                Description = "This is a description",
            };
            var property = new CalendarProperty("X-ALT-DESC", formatted);

            @event.AddProperty(property);
            var calendar = new Calendar();

            calendar.Events.Add(@event);

            var serialized = new CalendarSerializer().SerializeToString(calendar);

            Assert.IsTrue(serialized.Contains("X-ALT-DESC;"));
        }