public static List <IEvent> parseics(String path) { try { IICalendarCollection calendars = iCalendar.LoadFromFile(@path); List <IDateTime> listdatetime = new List <IDateTime>(); List <DDay.iCal.IEvent> listevent = new List <DDay.iCal.IEvent>(); IList <Occurrence> occurrences = calendars.GetOccurrences(new DateTime(2017, 1, 1), new DateTime(2018, 3, 26)); int i = 0; foreach (Occurrence occurrence in occurrences) { DateTime occurrenceTime = occurrence.Period.StartTime.Local.AddHours(1); IRecurringComponent rc = occurrence.Source as IRecurringComponent; if (rc != null) { rc.Calendar.Events[i].Start.AddHours(1); rc.Calendar.Events[i].End.AddHours(1); listevent.Add(rc.Calendar.Events[i]); i++; } } return(listevent); } catch (Exception e) { Console.WriteLine("ERREUR : " + e.Message); return(null); } }
static void DoCalendarStuff() { IICalendarCollection calendars = iCalendar.LoadFromFile(@"a.ics"); // Termine in den nächsten 2 Tagen finden. Wenn gefunden: Alarmicon! IList <Occurrence> occurrences = calendars.GetOccurrences(DateTime.Today.AddDays(1), DateTime.Today.AddDays(2)); foreach (Occurrence occurrence in occurrences) { DateTime occurrenceTime = occurrence.Period.StartTime.Local; if (occurrence.Source is IRecurringComponent rc) { if (CheckMessage(rc.Summary, occurrenceTime)) { text += rc.Summary + ": " + occurrenceTime.ToShortDateString() + CRLF; } } } // Wenn Termine gefunden, dann Alarmicon. Sonst den Nächstbesten suchen, aber keinen Alarm und kein Balloon. if (text != "") { lock (notifyIcon) { notifyIcon.Icon = iconAchtung; ShowBalloon(); } } else { // Wenn keine Termime in den nächsten 2 Tagen anliegen, dann den nächsten suchen, aber Icon nicht setzen und // Balloon nicht auslösen occurrences = calendars.GetOccurrences(DateTime.Today.AddDays(3), DateTime.Today.AddDays(365)); foreach (Occurrence occurrence in occurrences) { DateTime occurrenceTime = occurrence.Period.StartTime.Local; if (occurrence.Source is IRecurringComponent rc) { if (CheckMessage(rc.Summary, occurrenceTime)) { text = "Nächster: " + rc.Summary + ": " + occurrenceTime.ToShortDateString() + CRLF; break; } } } } }
static void Main(string[] args) { // Load the calendar file IICalendarCollection calendars = iCalendar.LoadFromFile(@"Business.ics"); // // Get all events that occur today. // IList <Occurrence> occurrences = calendars.GetOccurrences(DateTime.Today, DateTime.Today.AddDays(1)); Console.WriteLine("Today's Events:"); // Iterate through each occurrence and display information about it foreach (Occurrence occurrence in occurrences) { DateTime occurrenceTime = occurrence.Period.StartTime.Local; IRecurringComponent rc = occurrence.Source as IRecurringComponent; if (rc != null) { Console.WriteLine(rc.Summary + ": " + occurrenceTime.ToShortTimeString()); } } // // Get all occurrences for the next 7 days, starting tomorrow. // occurrences = calendars.GetOccurrences(DateTime.Today.AddDays(1), DateTime.Today.AddDays(7)); Console.WriteLine(Environment.NewLine + "Upcoming Events:"); // Start with tomorrow foreach (Occurrence occurrence in occurrences) { DateTime occurrenceTime = occurrence.Period.StartTime.Local; IRecurringComponent rc = occurrence.Source as IRecurringComponent; if (rc != null) { Console.WriteLine(rc.Summary + ": " + occurrenceTime.ToString()); } } }
protected List <string> GetUpcomingEvents(string filepath) { IICalendarCollection calendars = Calendar.LoadFromFile(Path.Combine(@"C:\ICSFiles\" + filepath + ".ics")); IList <Occurrence> occurrencesn = calendars.GetOccurrences(DateTime.Today.AddDays(1), DateTime.Today.AddDays(7)).ToList(); List <string> Events = new List <string>(); foreach (Occurrence occurrence in occurrencesn) { DateTime occurrenceTime = occurrence.Period.StartTime.AsSystemLocal; DateTime occurrenceTimee = occurrence.Period.EndTime.AsSystemLocal; IRecurringComponent rc = occurrence.Source as IRecurringComponent; if (rc != null) { Events.Add(rc.Summary + ": " + occurrenceTime.ToShortTimeString() + " - " + occurrenceTimee.ToShortTimeString()); } } return(Events); }
protected void loadButton_Click(object sender, EventArgs e) { if (Page.IsValid) { string saveDir = @"\Calendars\"; string appPath = Request.PhysicalApplicationPath; //Getting the duration and max days to check int durationMinutes, maxDays; bool minutesInputBool = int.TryParse(minutesInput.Text, out durationMinutes); bool maxDaysBool = int.TryParse(maxDaysInput.Text, out maxDays); if (FileUpload1.HasFile && FileUpload2.HasFile) { //Saving both calendars string savePath1 = appPath + saveDir + Server.HtmlEncode(FileUpload1.FileName); FileUpload1.SaveAs(savePath1); string savePath2 = appPath + saveDir + Server.HtmlEncode(FileUpload2.FileName); FileUpload2.SaveAs(savePath2); //Creating the calendars and getting the occurences (events). IICalendarCollection firstCalendar = iCalendar.LoadFromFile(savePath1); IICalendarCollection secondCalendar = iCalendar.LoadFromFile(savePath2); IList <Occurrence> occurrences1 = firstCalendar.GetOccurrences(DateTime.Today, DateTime.Today.AddDays(maxDays)); IList <Occurrence> occurrences2 = secondCalendar.GetOccurrences(DateTime.Today, DateTime.Today.AddDays(maxDays)); List <DateTime> freeSlots = new List <DateTime>(); //This list will contain all the occurences from both calendars List <Occurrence> allOccurences = new List <Occurrence>(); //Merging the calendars into @allOccurences mergeCalendars(occurrences1, occurrences2, allOccurences); //Finding free spots findFreeSpots(durationMinutes, maxDays, freeSlots, allOccurences); Label1.Text = "This options are available:<br />"; //Printing all the available spots foreach (DateTime dt in freeSlots) { Label1.Text += dt.ToShortDateString() + " at " + dt.ToShortTimeString() + "<br />"; } } minutesInput.Text = ""; maxDaysInput.Text = ""; } }
public ActionResult ImportEvents(HttpPostedFileBase file, string from = "", string to = "", bool showEndDate = false) { int courseId = ActiveCourseUser.AbstractCourseID; DateTime fromDate = new DateTime(); DateTime toDate = new DateTime(); bool fromParse = false; bool toParse = false; fromParse = DateTime.TryParse(from, out fromDate); toParse = DateTime.TryParse(to, out toDate); IICalendarCollection calendars = iCalendar.LoadFromStream(new StreamReader(file.InputStream)); IList <Occurrence> occurrences = fromParse && toParse?calendars.GetOccurrences(fromDate, toDate) : calendars.GetOccurrences(DateTime.Today.AddYears(-1), DateTime.Today.AddYears(1)); //if no range specified, arbitrarily choose +/- 1 year max future/past range List <OSBLE.Models.HomePage.Event> events = new List <OSBLE.Models.HomePage.Event>(); List <OSBLE.Models.HomePage.Event> nullDescriptionEvents = new List <OSBLE.Models.HomePage.Event>(); foreach (Occurrence occurrence in occurrences) { IRecurringComponent component = occurrence.Source as IRecurringComponent; OSBLE.Models.HomePage.Event newEvent = new OSBLE.Models.HomePage.Event { Poster = ActiveCourseUser, Approved = true, StartDate = DateTime.SpecifyKind(occurrence.Period.StartTime.Local.Date, DateTimeKind.Unspecified).CourseToUTC(courseId), EndDate = showEndDate ? (occurrence.Period.EndTime.IsUniversalTime ? DateTime.SpecifyKind(occurrence.Period.EndTime.Local.Date, DateTimeKind.Unspecified) : DateTime.SpecifyKind(occurrence.Period.EndTime.Local.Date, DateTimeKind.Unspecified).CourseToUTC(courseId)) : (DateTime?)null, StartTime = occurrence.Period.StartTime.IsUniversalTime ? DateTime.SpecifyKind(occurrence.Period.StartTime.Local, DateTimeKind.Unspecified) : DateTime.SpecifyKind(occurrence.Period.StartTime.Local, DateTimeKind.Unspecified).CourseToUTC(courseId), EndTime = occurrence.Period.EndTime.IsUniversalTime ? DateTime.SpecifyKind(occurrence.Period.EndTime.Local, DateTimeKind.Unspecified) : DateTime.SpecifyKind(occurrence.Period.EndTime.Local, DateTimeKind.Unspecified).CourseToUTC(courseId), Description = component.Description, Title = String.IsNullOrEmpty(((DDay.iCal.Event)component).Location) ? component.Summary : component.Summary + " - " + ((DDay.iCal.Event)component).Location, }; if (String.IsNullOrEmpty(newEvent.Description)) { nullDescriptionEvents.Add(newEvent); } else { events.Add(newEvent); } } //add non duplicate events with null description. doing this because it seems google saves an additional event when you //edit an event in a recurring series to add more description foreach (var nullDescriptionEvent in nullDescriptionEvents) { if (events.Where(e => e.StartDate == nullDescriptionEvent.StartDate && e.EndDate == nullDescriptionEvent.EndDate && e.StartTime == nullDescriptionEvent.StartTime && e.EndTime == nullDescriptionEvent.EndTime).Count() == 0) { events.Add(nullDescriptionEvent); } } CreateEvents(events); return(RedirectToAction("Index", "Event")); }