public void EmptyLines2() { var calendars = CalendarCollection.Load(IcsFiles.EmptyLines2); Assert.AreEqual(2, calendars.Count); Assert.AreEqual(2, calendars[0].Events.Count, "iCalendar should have 2 events"); Assert.AreEqual(2, calendars[1].Events.Count, "iCalendar should have 2 events"); }
public async void Run(object state) { var response = await _client.GetAsync(_options.Value.UpstreamICalUrl); response.EnsureSuccessStatusCode(); var stream = await response.Content.ReadAsStreamAsync(); var calendars = CalendarCollection.Load(stream); var calendar = calendars.FirstOrDefault(); if (calendar is null) { _logger.LogWarning("Calendar is empty. Skipping sync"); return; } // Add or update events var upstreamCalendarEvents = calendar.Events.OrderBy(x => x.Start).ToList(); foreach (var calendarEvent in upstreamCalendarEvents) { var entry = _mapper.Map <CalendarEventEntity>(calendarEvent); entry.Source = _options.Value.UpstreamICalUrl; await _calendarService.AddOrUpdateCalendarEntryAsync(entry); } // Purge obsolete events var events = (await _calendarService.GetAllEventsAsync()).ToList(); var obsoleteEventIds = events.Where(x => x.Source == _options.Value.UpstreamICalUrl) .Select(x => x.Id) .Except(upstreamCalendarEvents .Select(x => x.Uid)); // TODO: Add tests foreach (var obsoleteEventId in obsoleteEventIds) { await _calendarService.RemoveEventAsync(obsoleteEventId); } _logger.LogInformation("Synchronized calendar from upstream source ({UpstreamSourceUrl})", _options.Value.UpstreamICalUrl); }
public static CalendarCollection GetCalendars(string incoming) => CalendarCollection.Load(incoming);
private void ConvertIcalendarToAppointment(byte[] iCalendarPayload) { var iCalendarStream = new MemoryStream(iCalendarPayload); var calendarCollection = CalendarCollection.Load(iCalendarStream); if (calendarCollection.Count >= 1) { if (calendarCollection.Count >= 2) { Debug.WriteLine("Note: the library only parses the first calendar object."); } var curCalendar = calendarCollection.First(); ProductId = curCalendar.ProductId; if (curCalendar.Events != null && curCalendar.Events.Count >= 1) { if (curCalendar.Events.Count >= 2) { Debug.WriteLine("Note: the library only parses the first event object."); } var evt = curCalendar.Events.First(); // Internalize event data var ap = new Appointment { // Event description and main properties Subject = evt.Summary, Details = evt.Description, // Time StartTime = evt.Start.AsUtc, Duration = evt.Duration, AllDay = evt.IsAllDay, // Location Location = evt.Location, // TODO: recurrence }; if (evt.Url != null) { ap.Uri = evt.Url; } if (evt.Organizer != null) { ap.Organizer = new AppointmentOrganizer { DisplayName = evt.Organizer.CommonName }; if (evt.Organizer.Value != null) { ap.Organizer.Address = evt.Organizer.Value.ToString(); } } // Reminder if (evt.Alarms != null && evt.Alarms.Count > 0) { ap.Reminder = evt.Alarms.First().Trigger.Duration; } AppointmentData = ap; } else { throw new NdefException(NdefExceptionMessagesUwp.ExIcalendarNoEventFound); } } else { throw new NdefException(NdefExceptionMessagesUwp.ExIcalendarNoCalendarFound); } }