/// <summary> /// Creates calendar Objects and events /// </summary> /// <param name="model"></param> /// <returns>a MemoryStream</returns> private MemoryStream GetCalendarBookingBytes(CalendarInviteViewModel model) { var iCal = new Calendar(); var evt = iCal.Create <CalendarEvent>(); evt.Summary = model.Title; evt.Start = new CalDateTime(model.StartDate); evt.End = new CalDateTime(model.EndDate); evt.Description = model.Body; evt.Location = model.Address; if (model.StartDate.TimeOfDay.Hours == 0) { evt.IsAllDay = true; } evt.Uid = new Guid().ToString(); //evt.Organizer = new Organizer(organizer); evt.Alarms.Add(new Alarm { Duration = new TimeSpan(30, 0, 0), Trigger = new Trigger(new TimeSpan(30, 0, 0)), Action = AlarmAction.Display, Description = "Reminder" }); SerializationContext ctx = new SerializationContext(); ISerializerFactory factory = new SerializerFactory(); var serializer = factory.Build(iCal.GetType(), ctx) as IStringSerializer; var output = serializer.SerializeToString(iCal); var bytes = Encoding.UTF8.GetBytes(output); MemoryStream ms = new MemoryStream(bytes); return(ms); }
private IHttpActionResult IcsFileContentResult(CalendarInviteViewModel entity, MemoryStream memory) { var filename = entity.FileName; var message = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(memory.ToArray()) }; var encoder = Encoding.GetEncoding("us-ascii", new EncoderReplacementFallback(string.Empty), new DecoderExceptionFallback()); string asciiFileName = encoder.GetString(encoder.GetBytes(filename)); // Set content headers message.Content.Headers.ContentLength = memory.Length; message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = asciiFileName }; return(new System.Web.Http.Results.ResponseMessageResult(message)); }
/// <summary> ///Generates calendar object using CalendarInviteObject /// </summary> /// <param name="model"></param> /// <returns>ResponseMessageResult</returns> public IHttpActionResult CalendarBookingFileResult(CalendarInviteViewModel model) { var bytes = GetCalendarBookingBytes(model); return(IcsFileContentResult(model, bytes)); }