using System; using System.Text; using System.Collections.Generic; namespace RF.Events { public enum PriorityLevel : int { Normal = 5, High = 1, Low = 9 } public class Event { private const string _DATEFORMAT = "yyyyMMdd\\THHmmss\\Z"; public Event() { } public DateTime StartTime; public DateTime EndTime; public string Location = string.Empty; public string Title = string.Empty; public string Description = string.Empty; public bool UseAlarm = true; public PriorityLevel Priority = PriorityLevel.Normal; public string Category = string.Empty; public override string ToString() { return Output; } public string Output { get { StringBuilder sb = new StringBuilder(); sb.Append("BEGIN:VEVENT\n\n"); sb.Append("DTSTART:"); sb.Append(StartTime.ToUniversalTime().ToString(_DATEFORMAT)); sb.Append("\nDTEND:"); sb.Append(EndTime.ToUniversalTime().ToString(_DATEFORMAT)); sb.Append("\nLOCATION:"); sb.Append(Location); sb.Append("\nCATEGORIES:"); sb.Append(Category); sb.Append("\nTRANSP:OPAQUE\n"); sb.Append("SEQUENCE:0\n"); sb.AppendFormat("UID:RFCALITEM{0}\n", DateTime.Now.Ticks); sb.Append("DTSTAMP:"); sb.Append(StartTime.ToUniversalTime().ToString(_DATEFORMAT)); sb.Append("\nDESCRIPTION:"); sb.Append(Description); sb.Append("\nSUMMARY:"); sb.Append(Title); sb.Append("\n\nPRIORITY:"); sb.Append((int)Priority); sb.Append("\nCLASS:PUBLIC\n"); if (UseAlarm) { sb.Append("BEGIN:VALARM\n"); sb.Append("TRIGGER:PT15M\n"); sb.Append("ACTION:DISPLAY\n"); sb.Append("DESCRIPTION:Reminder\n"); sb.Append("PRIORITY:5\n"); sb.Append("END:VALARM\n"); } sb.Append("END:VEVENT\n"); return sb.ToString(); } } } public class iCalendar { public iCalendar() { this.Events = new List(); } public List Events; public override string ToString() { return this.Output; } public string Output { get { StringBuilder sb = new StringBuilder(); sb.Append("BEGIN:VCALENDAR\n"); sb.Append("PRODID:-//RyanFarley.com//iCalendar Sample MIMEDIR//EN\n"); sb.Append("VERSION:2.0\n"); sb.Append("METHOD:PUBLISH\n"); foreach (Event ev in Events) sb.Append(ev.Output); sb.Append("END:VCALENDAR"); return sb.ToString(); } } } }