private async Task LoadHostedContent(ChatMessage message)
        {
            var jsonFile = MgTeamChannelMessage.GetBackupMessageHostedContentFile(_Options.SourcePath, _TeamId, _ChannelId, message);

            _Logger.LogTrace($"File: {jsonFile}");

            if (System.IO.File.Exists(jsonFile))
            {
                using System.IO.FileStream fs = System.IO.File.OpenRead(jsonFile);
                message.HostedContents        = await JsonSerializer.DeserializeAsync <ChatMessageHostedContentsCollectionPage>(fs);
            }
        }
        public async Task LoadReplies()
        {
            _Replies = new List <ChatMessage>();

            var jsonDirectory = MgTeamChannelMessage.GetBackupPath(_Options.SourcePath, _TeamId, _ChannelId, _MessageId);

            _Logger.LogTrace($"File: {jsonDirectory}");

            foreach (var jsonFile in System.IO.Directory.GetFiles(jsonDirectory, MgTeamChannelMessage.MessageReplyFilePattern))
            {
                _Replies.Add(await LoadMessageFile(jsonFile));
            }
        }
        public async Task LoadMessage()
        {
            var jsonFile = MgTeamChannelMessage.GetBackupMessageFile(_Options.SourcePath, _TeamId, _ChannelId, _MessageId);

            _Message = await LoadMessageFile(jsonFile);
        }
        private void GetHtmlForPost(HtmlNode threadNode, ChatMessage message)
        {
            var htmlDocument = threadNode.OwnerDocument;
            var messagetNode = message.ReplyToId == null?htmlDocument.CreateElement("post") : htmlDocument.CreateElement("reply");

            threadNode.AppendChild(messagetNode);

            if (!string.IsNullOrEmpty(message.Subject))
            {
                var messageSubjectNode = htmlDocument.CreateElement("h2");
                messagetNode.AppendChild(messageSubjectNode);
                messageSubjectNode.InnerHtml = message.Subject;
            }

            var messageInfoNode = htmlDocument.CreateElement("chatmeta");

            messagetNode.AppendChild(messageInfoNode);
            messageInfoNode.InnerHtml = "Created: " + message.CreatedDateTime.Value.ToString(_Options.DateTimeFormat);
            if (message.LastEditedDateTime != null)
            {
                messageInfoNode.InnerHtml += " | Edited: " + message.LastEditedDateTime.Value.ToString(_Options.DateTimeFormat);
            }
            if (message.From?.User != null)
            {
                messageInfoNode.InnerHtml += " | Author: " + message.From.User.DisplayName;
            }
            if (message.From?.Application != null)
            {
                messageInfoNode.InnerHtml += " | Application: " + message.From.Application.DisplayName;
            }
            if (message.DeletedDateTime != null)
            {
                var messageBodyNode = htmlDocument.CreateElement("p");
                messagetNode.AppendChild(messageBodyNode);
                messageBodyNode.InnerHtml = "DELETED CONTENT";
            }
            else
            {
                var messageBodyNode = htmlDocument.CreateElement("p");
                messagetNode.AppendChild(messageBodyNode);

                messageBodyNode.InnerHtml = message.Body.Content;

                var imageNodes = messageBodyNode.SelectNodes(".//img");
                if (imageNodes != null)
                {
                    foreach (var imgNode in imageNodes)
                    {
                        if (imgNode.Attributes["src"].Value.EndsWith("$value"))
                        {
                            var chunks          = imgNode.Attributes["src"].Value.Split('/');
                            var hostedContentid = chunks[chunks.Length - 2];

                            var blobFileName = MgTeamChannelMessage.GetBackupMessageHostedContentBlob(_Options.SourcePath, _TeamId, _ChannelId, message, hostedContentid);

                            if (_Options.UseInlineImages)
                            {
                                var blobFileb64 = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(blobFileName));
                                imgNode.SetAttributeValue("src", $"data:image/png;base64,{blobFileb64}");
                            }
                            else
                            {
                                string outFilename = null;
                                if (message.ReplyToId == null)
                                {
                                    outFilename = GetOutputMessageImgFile(_Options.TargetPath, _TeamId, _ChannelId, message.Id, null, System.IO.Path.GetFileName(blobFileName));
                                }
                                else
                                {
                                    outFilename = GetOutputMessageImgFile(_Options.TargetPath, _TeamId, _ChannelId, message.ReplyToId, message.Id, System.IO.Path.GetFileName(blobFileName));
                                }
                                System.IO.File.Copy(blobFileName, outFilename, true);
                                System.IO.File.SetCreationTime(outFilename, message.CreatedDateTime.Value.DateTime);
                                System.IO.File.SetLastWriteTime(outFilename, message.CreatedDateTime.Value.DateTime);

                                imgNode.SetAttributeValue("src", $"./img/{System.IO.Path.GetFileName(outFilename)}");
                            }

                            imgNode.SetAttributeValue("class", "hc");
                        }

                        imgNode.SetAttributeValue("style", "");
                    }
                }
            }
        }