Exemple #1
0
        /// <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()));
        }
Exemple #2
0
        /// <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)));
                }
            }
        }