/// <summary> /// Prepares the report body as byte array by report body details. /// </summary> /// <param name="details">The details.</param> /// <returns></returns> public byte[] PrepareDocument(IReportBodyDetails details) { var threads = MessageSorter.ProcessMessages(details.Messages); var report = new StringBuilder(); var header = PrepareHeaderPart(details); report.AppendLine(header).AppendLine(string.Empty); threads.ForEach(c => report.AppendLine(PrepareContentPart(c, details.Since, details.IsChannel))); return(Encoding.UTF8.GetBytes(report.ToString())); }
/// <summary> /// Prepares the body. /// </summary> /// <param name="details">The details.</param> /// <param name="doc">The document.</param> /// <param name="messageTemplate">The message template.</param> protected void PrepareBody(IReportBodyDetails details, HtmlDocument doc, string messageTemplate) { var threadsNode = doc.GetElementbyId("history"); var threads = MessageSorter.ProcessMessages(details.Messages); foreach (var thread in threads) { threadsNode.SetAttributeValue("class", "threads-container"); if (details.IsChannel) { if (thread.IsFull) { threadsNode.AppendChild(PrepareMessageDetails(thread.Messages.First(), true, messageTemplate, details.IsChannel)); } else { if (details.Since.HasValue) { threadsNode.AppendChild(CreateConversationWarning(details.Since.Value)); } threadsNode.AppendChild(PrepareMessageDetails(thread.Messages.First(), false, messageTemplate, details.IsChannel)); } thread.Messages.Skip(1).ToList().ForEach(c => threadsNode.AppendChild(PrepareMessageDetails(c, false, messageTemplate, details.IsChannel))); } else { if (!thread.IsFull && details.Since.HasValue) { threadsNode.AppendChild(CreateConversationWarning(details.Since.Value)); } thread.Messages.ForEach(c => threadsNode.AppendChild(PrepareMessageDetails(c, false, messageTemplate, details.IsChannel))); } } }