public static async void CreateEvents(string userId, string calendarId)
        {
            var graphClient = GetAuthenticatedClient();

            var events = new List <Event>
            {
                new Event
                {
                    Subject = "Event 1",
                    Body    = new ItemBody {
                        Content = "Event 1 Body"
                    },
                    Categories = new string[] { "Information" },
                    Start      = DateTimeTimeZone.FromDateTime(DateTime.Now.AddDays(1)),
                    End        = DateTimeTimeZone.FromDateTime(DateTime.Now.AddDays(2))
                },
                new Event
                {
                    Subject = "Event 2",
                    Body    = new ItemBody {
                        Content = "Event 2 Body"
                    },
                    Categories = new string[] { "Information" },
                    Start      = DateTimeTimeZone.FromDateTime(DateTime.Now.AddDays(1)),
                    End        = DateTimeTimeZone.FromDateTime(DateTime.Now.AddDays(2))
                }
            };

            var tasks = from myEvent in events select CreateEvent(userId, calendarId, myEvent);

            await Task.WhenAll(tasks);
        }
Exemple #2
0
 private async Task AddEventAsync(string name, DateTime start, DateTime end)
 {
     await Graph.Me.Calendar.Events.Request().AddAsync(new Event
     {
         Subject    = name,
         Start      = DateTimeTimeZone.FromDateTime(start),
         End        = DateTimeTimeZone.FromDateTime(end),
         Categories = new[] { "ak_event" }
     });
 }
Exemple #3
0
        /// <summary>
        /// Convers the graph's event model into our own internal <seealso cref="CalendarSkillEventModel" />.
        /// </summary>
        /// <param name="ev">Event.</param>
        /// <param name="timeZone">Timezone.</param>
        /// <param name="index">Index.</param>
        /// <param name="userEmail">User email.</param>
        /// <returns>Model representing the event.</returns>
        private CalendarSkillEventModel ParseEvent(Event ev, TimeZoneInfo timeZone, int index, string userEmail)
        {
            var currentDateTime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, timeZone);
            var startTZ         = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(ev.Start.DateTime), timeZone);
            var endTZ           = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(ev.End.DateTime), timeZone);

            ev.Start = DateTimeTimeZone.FromDateTime(startTZ, timeZone);
            ev.End   = DateTimeTimeZone.FromDateTime(endTZ, timeZone);

            return(new CalendarSkillEventModel(ev, currentDateTime, index, userEmail));
        }
Exemple #4
0
        public async Task <Event> CreateCalendarEvent(string userEmail)
        {
            IGraphServiceClient client = _factory.Create(new GraphConfig());
            var   tomorrow             = DateTime.Now.AddDays(1);
            Event newEvvent            = new Event
            {
                Subject = "Dinner Party",
                Start   = DateTimeTimeZone.FromDateTime(tomorrow),
                End     = DateTimeTimeZone.FromDateTime(tomorrow.AddHours(1))
            };

            return(await client.Users[userEmail].Calendar.Events.Request().AddAsync(newEvvent));
        }
        public static IObservable <IList <Event> > NewCalendarEvents(this ICalendarRequestBuilder builder, int count, string title)
        {
            var dateTime = DateTime.Now;

            return(Observable.Range(0, count).SelectMany(i => {
                var task = new Event()
                {
                    Subject = $"{i}{title}",
                    End = DateTimeTimeZone.FromDateTime(dateTime), Start = DateTimeTimeZone.FromDateTime(dateTime)
                };

                return builder.Events.Request().AddAsync(task);
            }).Buffer(count));
        }
Exemple #6
0
        /// <inheritdoc/>
        internal override async Task <CalendarSkillEventModel> CallGraphServiceWithResultAsync(IGraphServiceClient client, IReadOnlyDictionary <string, object> parameters, CancellationToken cancellationToken)
        {
            var timeZone = GraphUtils.ConvertTimeZoneFormat((string)parameters["Timezone"]);

            Event ev = await client.Me.Events[(string)parameters["EventId"]].Request().GetAsync(cancellationToken).ConfigureAwait(false);

            var startTZ = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(ev.Start.DateTime), timeZone);
            var endTZ   = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Parse(ev.End.DateTime), timeZone);

            ev.Start = DateTimeTimeZone.FromDateTime(startTZ, timeZone);
            ev.End   = DateTimeTimeZone.FromDateTime(endTZ, timeZone);

            return(new CalendarSkillEventModel(ev, TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, timeZone)));
        }
Exemple #7
0
        public void FromDateTime_Should_Convert_DateTime_To_DateTimeTimeZone()
        {
            DateTimeStyles dateTimeStyles   = DateTimeStyles.RoundtripKind;
            var            dateTime         = DateTime.ParseExact("2019-01-25T06:37:39.8058788Z", DateTimeFormat, CultureInfo.InvariantCulture, dateTimeStyles);
            var            expectedDateTime = dateTime.ToString(DateTimeFormat, CultureInfo.InvariantCulture);

            DateTimeTimeZone expectedDateTimeTimeZone = new DateTimeTimeZone
            {
                TimeZone = "UTC",
                DateTime = expectedDateTime
            };

            var actualDateTimeTimeZone = DateTimeTimeZone.FromDateTime(dateTime, "UTC");

            Assert.Equal(expectedDateTimeTimeZone.DateTime, actualDateTimeTimeZone.DateTime);
            Assert.Equal(expectedDateTimeTimeZone.TimeZone, actualDateTimeTimeZone.TimeZone);
        }
        /// <inheritdoc/>
        internal override async Task <WorkingHours> CallGraphServiceWithResultAsync(IGraphServiceClient client, IReadOnlyDictionary <string, object> parameters, CancellationToken cancellationToken)
        {
            var addressProperty = (string)parameters["Address"];
            var startProperty   = DateTime.UtcNow.Date;
            var endProperty     = startProperty.Date.AddHours(23).AddMinutes(59);

            ICalendarGetScheduleCollectionPage schedule = await client.Me.Calendar.GetSchedule(
                Schedules : new[] { addressProperty },
                StartTime : DateTimeTimeZone.FromDateTime(startProperty, "UTC"),
                EndTime : DateTimeTimeZone.FromDateTime(endProperty, "UTC"))
                                                          .Request()
                                                          .PostAsync()
                                                          .ConfigureAwait(false);

            var workingHours = schedule.First().WorkingHours;

            return(workingHours);
        }
        private Event CreateGraphEvent(DateTimeOffset start, int durationInMinutes)
        {
            const string timeZoneUtc = "UTC";
            var          end         = start.AddMinutes(durationInMinutes);

            var startTime = DateTimeTimeZone.FromDateTime(start.DateTime);

            startTime.TimeZone = timeZoneUtc;

            var endTime = DateTimeTimeZone.FromDateTime(end.DateTime);

            endTime.TimeZone = timeZoneUtc;

            return(new Event
            {
                Start = startTime,
                End = endTime
            });
        }
Exemple #10
0
        private async Task DoSomethingAsync()
        {
            try
            {
                var token = await TokenService.GetAuthenticationResultForUserAsync(new[] { "User.Read", "Calendars.ReadWrite" });

                Console.WriteLine(token.AccessToken);

                await Graph.Me.Calendar.Events.Request().AddAsync(new Event
                {
                    Subject = "Hey stupid",
                    Start   = DateTimeTimeZone.FromDateTime(DateTime.Now),
                    End     = DateTimeTimeZone.FromDateTime(DateTime.Now.AddMinutes(15))
                });

                _name = (await Graph.Me.Request().GetAsync()).DisplayName;
            }
            catch (Exception ex)
            {
                ConsentHandler.HandleException(ex);
            }
        }
        public async Task <Meeting> SetupMeetingEvent(string title, DateTime start, DateTime end, Meeting meeting, TeamChannel channel, IFormFile[] files, string[] attendees)
        {
            var attachments = new List <DriveItem>();

            var meetingAttendees = new List <MeetingAttendee>();
            var taskFiles        = new List <TaskFile>();

            if (files != null && files.Length > 0)
            {
                var users = new List <User>();

                foreach (var attendee in attendees)
                {
                    var graphUser = await _userService.GetUserByEmail(attendee);

                    users.Add(graphUser);

                    meetingAttendees.Add(new MeetingAttendee
                    {
                        Email     = attendee,
                        Name      = graphUser.UserPrincipalName,
                        MeetingId = meeting.Id
                    });
                }

                foreach (var file in files)
                {
                    using (var fileStram = file.OpenReadStream())
                    {
                        var uploadFile = await _fileService.UploadFile(meeting.TeamId, meeting.FolderId, file.FileName, fileStram);

                        attachments.Add(uploadFile);
                        await _planTaskService.CreatePreReadTaskForEachUser(channel.PlanId, meeting.BucketId, $"[Pre-reading] {file.FileName}", uploadFile, start, users.Select(i => i.Id).ToArray());

                        taskFiles.Add(new TaskFile
                        {
                            Location  = uploadFile.WebUrl,
                            Name      = uploadFile.Name,
                            MeetingId = meeting.Id
                        });
                    }
                }
            }

            var joinUrl = await _communicationService.CreateOnlineMeeting(title, start, (await _userService.Me()).Id);

            var model = new EmailTemplateViewModel()
            {
                Agendas     = meeting.Agendas.Select(a => a.Title),
                Attachments = attachments,
                JoinUrl     = joinUrl
            };

            var emailContent = await _viewRenderService.RenderToStringAsync("Templates/Invitation", model);

            var meetingEvent = await _calendarService.CreateEvent(title,
                                                                  DateTimeTimeZone.FromDateTime(start),
                                                                  DateTimeTimeZone.FromDateTime(end),
                                                                  emailContent,
                                                                  attendees.Select(mail =>
                                                                                   new Attendee
            {
                EmailAddress = new EmailAddress {
                    Address = mail
                },
                Type = AttendeeType.Required
            }),
                                                                  meeting,
                                                                  meeting.BucketId);

            meeting.EventId = meetingEvent.Id;
            await _meetingDBService.UpdateMeeting(meeting, meetingAttendees, taskFiles);

            return(meeting);
        }
 /// <summary>
 /// Converts the dateTime to a DateTimeTimeZone object
 /// </summary>
 /// <param name="dateTime">>A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).</param>
 /// <param name="timeZoneInfo">The expected values for timeZone are specified here: https://docs.microsoft.com/en-us/graph/api/resources/datetimetimezone?view=graph-rest-1.0 </param>
 /// <returns></returns>
 public static DateTimeTimeZone ToDateTimeTimeZone(this DateTime dateTime, TimeZoneInfo timeZoneInfo)
 {
     return(DateTimeTimeZone.FromDateTime(dateTime, timeZoneInfo));
 }
 /// <summary>
 /// Converts the dateTime to a DateTimeTimeZone object
 /// <para>This method assumes the value is expressed on the same timezone as the target mailbox and the local machine</para>
 /// </summary>
 /// <param name="dateTime">>A single point of time in a combined date and time representation ({date}T{time}; for example, 2017-08-29T04:00:00.0000000).</param>
 /// <returns></returns>
 public static DateTimeTimeZone ToDateTimeTimeZone(this DateTime dateTime)
 {
     return(DateTimeTimeZone.FromDateTime(dateTime));
 }