protected override void WriteFile(System.Web.HttpResponseBase response) { iCalendar iCal = new iCalendar(); foreach (Dinner d in this.Dinners) { try { Event e = CalendarHelpers.DinnerToEvent(d, iCal); iCal.Events.Add(e); } catch (ArgumentOutOfRangeException) { //Swallow folks that have dinners in 9999. } } iCalendarSerializer serializer = new iCalendarSerializer(iCal); string result = serializer.SerializeToString(); response.ContentEncoding = Encoding.UTF8; response.Write(result); }
public void SERIALIZE18() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create<Event>(); evt.Summary = "Test event title"; evt.Start = new Date_Time(2007, 3, 19); evt.Start.Kind = DateTimeKind.Utc; evt.Duration = new TimeSpan(24, 0, 0); evt.Created = evt.Start.Copy(); evt.DTStamp = evt.Start.Copy(); evt.UID = "123456789"; evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); iCalendarSerializer serializer = new iCalendarSerializer(iCal); string icalString = serializer.SerializeToString(); Assert.IsNotEmpty(icalString, "iCalendarSerializer.SerializeToString() must not be empty"); ComponentBaseSerializer compSerializer = new ComponentBaseSerializer(evt); string evtString = compSerializer.SerializeToString(); Assert.IsTrue(evtString.Equals("BEGIN:VEVENT\r\nCREATED:20070319T000000Z\r\nDTEND:20070320T000000Z\r\nDTSTAMP:20070319T000000Z\r\nDTSTART;VALUE=DATE:20070319\r\nDURATION:P1D\r\nRRULE:FREQ=WEEKLY;INTERVAL=3;COUNT=4;BYDAY=TU,FR,SU\r\nSUMMARY:Test event title\r\nUID:123456789\r\nEND:VEVENT\r\n"), "ComponentBaseSerializer.SerializeToString() serialized incorrectly"); }
public void Event5() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create<Event>(); evt.Summary = "Test event title"; evt.Start = new iCalDateTime(2007, 3, 19); evt.Start.IsUniversalTime = true; evt.Duration = new TimeSpan(24, 0, 0); evt.Created = evt.Start.Copy<IDateTime>(); evt.DTStamp = evt.Start.Copy<IDateTime>(); evt.UID = "123456789"; evt.IsAllDay = true; RecurrencePattern rec = new RecurrencePattern("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.RecurrenceRules.Add(rec); iCalendarSerializer serializer = new iCalendarSerializer(); string icalString = serializer.SerializeToString(iCal); Assert.IsFalse(String.Empty == icalString, "iCalendarSerializer.SerializeToString() must not be empty"); EventSerializer eventSerializer = new EventSerializer(); string evtString = eventSerializer.SerializeToString(evt); var target = "BEGIN:VEVENT\r\nCREATED:20070319T000000Z\r\nDTEND;VALUE=DATE:20070320\r\nDTSTAMP:20070319T000000Z\r\nDTSTART;VALUE=DATE:20070319\r\nRRULE:FREQ=WEEKLY;INTERVAL=3;COUNT=4;BYDAY=TU,FR,SU\r\nSEQUENCE:0\r\nSUMMARY:Test event title\r\nUID:123456789\r\nEND:VEVENT\r\n"; Assert.AreEqual(target, evtString, "ComponentBaseSerializer.SerializeToString() serialized incorrectly"); serializer.Serialize(iCal, @"Calendars/Serialization/Event5.ics"); SerializeTest("Event5.ics", typeof(iCalendarSerializer)); }
public void BugFromForumTopic3355446() { var ical = new iCalendar(); var evt = ical.Create<Event>(); var altDescProp = new CalendarProperty("X-ALT-DESC"); altDescProp.AddParameter("FMTTYPE", "text/html"); altDescProp.Value = "<a href=\"http://test.com\">some html</a>"; evt.AddProperty(altDescProp); evt.Summary = "Test"; evt.Description = "Test"; evt.Start = new iCalDateTime(2012, 7, 30, 8, 0, 0); evt.Duration = TimeSpan.FromHours(1); var serializer = new iCalendarSerializer(); var serializedString = serializer.SerializeToString(ical); Assert.IsTrue(serializedString.Contains("FMTTYPE=text/html")); }
public void Bug3512192() { IICalendar calendar = new iCalendar(); calendar.Method = "PUBLISH"; IEvent evt = calendar.Create<Event>(); evt.Summary = "Test Event"; evt.Start = new iCalDateTime(2012, 3, 27, 22, 00, 00); evt.Duration = TimeSpan.FromHours(1); var attendees = new List<IAttendee>(); var attendee = new Attendee("MAILTO:[email protected]") { CommonName = "Test Name", Role = "OPT-PARTICIPANT", Members = new List<string>() { "Other", "Name" } }; attendees.Add(attendee); evt.Attendees = attendees; // Serialize (save) the iCalendar var serializer = new iCalendarSerializer(calendar); var result = serializer.SerializeToString(calendar); var calendars = serializer.Deserialize(new StringReader(result)) as IICalendarCollection; calendar = calendars.First(); evt = calendar.Events.First(); Assert.AreEqual(1, evt.Attendees.Count); Assert.AreEqual(attendee, evt.Attendees[0]); Assert.AreEqual("Test Name", evt.Attendees[0].CommonName); Assert.AreEqual("OPT-PARTICIPANT", evt.Attendees[0].Role); Assert.AreEqual(1, evt.Attendees[0].Members.Count); }
public void Bug3485766() { IICalendar calendar = new iCalendar(); IEvent evt = calendar.Create<Event>(); evt.Start = new iCalDateTime(2012, 5, 23, 8, 0, 0); evt.Duration = TimeSpan.FromMinutes(30); // Ensure the DTStamp is in universal time to begin with Assert.IsTrue(evt.DTStamp.IsUniversalTime); // Convert to local time evt.DTStamp = new iCalDateTime(evt.DTStamp.Local); // Serialize the calendar var serializer = new iCalendarSerializer(); var serialized = serializer.SerializeToString(calendar); IICalendarCollection calendars = serializer.Deserialize(new StringReader(serialized)) as IICalendarCollection; calendar = calendars.First(); evt = calendar.Events[0]; // Ensure the object was serialized as UTC Assert.IsTrue(evt.DTStamp.IsUniversalTime); }
public void XProperty4() { iCalendar iCal = new iCalendar(); iCal.AddProperty("X-WR-CALNAME", "DDay Test"); iCal.AddProperty("X-WR-CALDESC", "Events for a DDay Test"); iCal.AddProperty("X-PUBLISHED-TTL", "PT30M"); iCal.ProductID = "-//DDAYTEST//NONSGML www.test.com//EN"; // Create an event in the iCalendar Event evt = iCal.Create<Event>(); // Populate the properties evt.Start = new iCalDateTime(2009, 6, 28, 8, 0, 0); evt.Duration = TimeSpan.FromHours(1); evt.Url = new Uri("http://www.ftb.pl/news/59941_0_1/tunnel-electrocity-2008-timetable.htm"); evt.Summary = "This is a title"; evt.Description = "This is a description"; iCalendarSerializer serializer = new iCalendarSerializer(); string output = serializer.SerializeToString(iCal); serializer.Serialize(iCal, @"Calendars/Serialization/XProperty4.ics"); Assert.IsFalse(Regex.IsMatch(output, @"\r\n[\r\n]")); SerializeTest("XProperty4.ics", typeof(iCalendarSerializer)); }
public void TODO11() { iCalendar iCal = new iCalendar(); Todo todo = iCal.Create<Todo>(); todo.Summary = "xxxx"; todo.Description = "fdsdsfds"; // Set Start & Due date todo.DTStart = new DateTime(2007, 1, 1, 8, 0, 0); todo.Due = new DateTime(2007, 1, 7); todo.Created = DateTime.SpecifyKind(new DateTime(2007, 1, 1), DateTimeKind.Utc); todo.DTStamp = DateTime.SpecifyKind(new DateTime(2007, 1, 1), DateTimeKind.Utc); todo.UID = "b6709c95-5523-46aa-a7e5-1b5ea034b86a"; // Add an alarm in my task Alarm al = new Alarm(todo); al.Action = AlarmAction.Display; al.Description = "Reminder"; al.Trigger = new Trigger(); // Set reminder time al.Trigger.DateTime = new DateTime(2007, 1, 6, 8, 0, 0); // Save into calendar file. iCalendarSerializer serializer = new iCalendarSerializer(iCal); string serializedTodo = serializer.SerializeToString(); Assert.AreEqual( "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//DDay.iCal//NONSGML ddaysoftware.com//EN\r\nBEGIN:VTODO\r\nCREATED:20070101T000000Z\r\nDESCRIPTION:fdsdsfds\r\nDTSTAMP:20070101T000000Z\r\nDTSTART:20070101T080000\r\nDUE;VALUE=DATE:20070107\r\nDURATION:P5DT16H\r\nSEQUENCE:0\r\nSTATUS:NEEDS-ACTION\r\nSUMMARY:xxxx\r\nUID:b6709c95-5523-46aa-a7e5-1b5ea034b86a\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Reminder\r\nTRIGGER;VALUE=DATE-TIME:20070106T080000\r\nEND:VALARM\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", serializedTodo); }
public void TODO10() { iCalendar iCal = new iCalendar(); Todo todo = iCal.Create<Todo>(); todo.Summary = "xxxx"; todo.Description = "fdsdsfds"; // Set Start & Due date todo.DTStart = new DateTime(2007, 1, 1, 8, 0, 0); todo.Due = new DateTime(2007, 1, 7); todo.Created = DateTime.SpecifyKind(new DateTime(2007, 1, 1), DateTimeKind.Utc); todo.DTStamp = DateTime.SpecifyKind(new DateTime(2007, 1, 1), DateTimeKind.Utc); todo.UID = "b6709c95-5523-46aa-a7e5-1b5ea034b86a"; // Create an alarm Alarm al = new Alarm(); al.Trigger = new Trigger(TimeSpan.FromMinutes(-30)); al.Action = AlarmAction.Display; al.Description = "Reminder"; // Add the alarm to the todo item todo.AddAlarm(al); // Save into calendar file. iCalendarSerializer serializer = new iCalendarSerializer(iCal); string serializedTodo = serializer.SerializeToString(); Assert.AreEqual( "BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPRODID:-//DDay.iCal//NONSGML ddaysoftware.com//EN\r\nBEGIN:VTODO\r\nCREATED:20070101T000000Z\r\nDESCRIPTION:fdsdsfds\r\nDTSTAMP:20070101T000000Z\r\nDTSTART:20070101T080000\r\nDUE;VALUE=DATE:20070107\r\nDURATION:P5DT16H\r\nSEQUENCE:0\r\nSTATUS:NEEDS-ACTION\r\nSUMMARY:xxxx\r\nUID:b6709c95-5523-46aa-a7e5-1b5ea034b86a\r\nBEGIN:VALARM\r\nACTION:DISPLAY\r\nDESCRIPTION:Reminder\r\nTRIGGER:-PT30M\r\nEND:VALARM\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", serializedTodo); List<AlarmOccurrence> alarms = todo.PollAlarms( new DateTime(2007, 1, 1), new DateTime(2007, 2, 1)); iCalDateTime expectedAlarm = new iCalDateTime(2007, 1, 1, 7, 30, 0); Assert.AreEqual(1, alarms.Count, "There should be exactly 1 alarm"); Assert.AreEqual(expectedAlarm, alarms[0].DateTime, "The alarm should occur at " + expectedAlarm); }
/// <summary> /// This method is used when Start and End time both are supplied /// </summary> /// <param name="title"></param> /// <param name="body"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="location"></param> /// <param name="organizer"></param> /// <param name="eventId"></param> /// <param name="allDayEvent"></param> /// <returns></returns> private static string CreateCalendarEvent(string title, string body, DateTime startDate, DateTime endDate, string location, string organizer, string eventId, bool allDayEvent) { var iCal = new iCalendar { Method = "PUBLISH", //PUBLISH Version = "2.0" }; // Create the event var evt = iCal.Create<Event>(); //Subject evt.Summary = title; //Start Time evt.Start = new iCalDateTime(startDate.Year, startDate.Month, startDate.Day, startDate.Hour, startDate.Minute, startDate.Second); //End Time evt.End = new iCalDateTime(endDate.Year, endDate.Month, endDate.Day, endDate.Hour, endDate.Minute, endDate.Second); //Description of the Event evt.Description = body; //Location for the Event evt.Location = location; //Is All Day flag evt.IsAllDay = allDayEvent; //Event Id evt.UID = new Guid().ToString(); //organizer is mandatory for outlook 2007 - think about // throwing an exception here. if (!String.IsNullOrEmpty(organizer)) { evt.Organizer = new Organizer(organizer); } else { throw new Exception("Organizer provided was null"); } if (!String.IsNullOrEmpty(eventId)) { evt.UID = eventId; } var alarm = new Alarm { Duration = new TimeSpan(0, 15, 0), Trigger = new Trigger(new TimeSpan(0, 15, 0)), Action = AlarmAction.Display, Description = "Reminder" }; evt.Alarms.Add(alarm); // Save into calendar file. var serializer = new iCalendarSerializer(iCal); return serializer.SerializeToString(iCal); }
private static string CreateCalendarEvent(string title, string body, DateTime startDate, double duration, string location, string organizer, string eventId, bool allDayEvent, int recurrenceDaysInterval, int recurrenceCount, string freqType) { var iCal = new iCalendar { Method = "PUBLISH", //PUBLISH Version = "2.0" }; //if i use method PUBLISH: //if i use method REQUEST: it's an appointment, but then says meeting cannot be found in the calendar. if you click no response required, it gets deleted // outlook 2003 needs this property, // or we'll get an error (a Lunar error!) // Create the event var evt = iCal.Create<Event>(); evt.Summary = title; evt.Start = new iCalDateTime(startDate.Year, startDate.Month, startDate.Day, startDate.Hour, startDate.Minute, startDate.Second); evt.Duration = TimeSpan.FromHours(duration); evt.Description = body; evt.Location = location; evt.IsAllDay = allDayEvent; evt.UID = new Guid().ToString(); if (recurrenceDaysInterval > 0) { RecurrencePattern rp = new RecurrencePattern(); if (freqType == "Daily") { rp.Frequency = FrequencyType.Daily; } else if (freqType == "Weekly") { rp.Frequency = FrequencyType.Weekly; } else if (freqType == "Yearly") { rp.Frequency = FrequencyType.Yearly; } else if (freqType == "Monthly") { rp.Frequency = FrequencyType.Monthly; } rp.Interval = recurrenceDaysInterval; // interval of days rp.Count = recurrenceCount; // number of recurrence count evt.RecurrenceRules.Add(rp); } //organizer is mandatory for outlook 2007 - think about // throwing an exception here. if (!String.IsNullOrEmpty(organizer)) { evt.Organizer = new Organizer(organizer); } else { throw new Exception("Organizer provided was null"); } if (!String.IsNullOrEmpty(eventId)) { evt.UID = eventId; } //"REQUEST" will update an existing event with the same // UID (Unique ID) and a newer time stamp. //if (updatePreviousEvent) //{ // iCal.Method = "REQUEST"; //} var alarm = new Alarm { Duration = new TimeSpan(0, 15, 0), Trigger = new Trigger(new TimeSpan(0, 15, 0)), Action = AlarmAction.Display, Description = "Reminder" }; evt.Alarms.Add(alarm); // Save into calendar file. var serializer = new iCalendarSerializer(iCal); return serializer.SerializeToString(iCal); }
public void SERIALIZE18() { iCalendar iCal = new iCalendar(); Event evt = iCal.Create<Event>(); evt.Summary = "Test event title"; evt.Start = DateTime.Today; evt.End = DateTime.Today.AddDays(1); evt.IsAllDay = true; Recur rec = new Recur("FREQ=WEEKLY;INTERVAL=3;BYDAY=TU,FR,SU;COUNT=4"); evt.AddRecurrence(rec); iCalendarSerializer serializer = new iCalendarSerializer(iCal); string icalString = serializer.SerializeToString(); Assert.IsNotEmpty(icalString, "iCalendarSerializer.SerializeToString() must not be empty"); ComponentBaseSerializer compSerializer = new ComponentBaseSerializer(evt); string evtString = compSerializer.SerializeToString(); Assert.IsTrue(evtString.Equals("BEGIN:VEVENT\r\nDTEND:20070320T060000Z\r\nDTSTART;VALUE=DATE:20070319\r\nDURATION:P1D\r\nRRULE:FREQ=WEEKLY;INTERVAL=3;COUNT=4;BYDAY=TU,FR,SU\r\nSUMMARY:Test event title\r\nEND:VEVENT\r\n"), "ComponentBaseSerializer.SerializeToString() serialized incorrectly"); }