Esempio n. 1
0
        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");
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public static CalendarCollection GetCalendars(string incoming) => CalendarCollection.Load(incoming);
Esempio n. 4
0
        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);
            }
        }