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); }
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" } }); }
/// <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)); }
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)); }
/// <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))); }
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 }); }
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)); }