예제 #1
0
        public async Task <List <Event> > GetEventsBetweenDatesAsync(
            string calendarName, DateTimeZone start, DateTimeZone end, CancellationToken cancellationToken = default)
        {
            try
            {
                var calendarId = await GetCalendarIdAsync(calendarName, cancellationToken);

                var startDate = start.UniversalTime.Date.ToString("o");
                var endDate   = end.UniversalTime.Date.ToString("o");

                var queryOptions = new List <QueryOption>()
                {
                    new QueryOption("startDateTime", startDate),
                    new QueryOption("endDateTime", endDate)
                };

                ICalendarCalendarViewCollectionPage page = await _graphServiceClient.Me.Calendars[calendarId].CalendarView
                                                           .Request(queryOptions)
                                                           .GetAsync(cancellationToken);
                List <Event> events = page.ToList();

                // Query the rest of the pages
                while (page.NextPageRequest is not null)
                {
                    page = await page.NextPageRequest.GetAsync(cancellationToken);

                    events.AddRange(page.ToList());
                }

                _logger.LogInformation("{this} success, {eventCount} events found.",
                                       nameof(GetEventsBetweenDatesAsync),
                                       events.Count);

                return(events);
            }
            catch (Exception ex)
            {
                _logger.LogCritical(ex, "{this} failed.", nameof(GetEventsBetweenDatesAsync));
                return(new());
            }
        }