private void ShowRunHistoryInMainPanel()

in Office365APIEditor/UI/RequestForm.cs [1489:1639]


        private void ShowRunHistoryInMainPanel(RunInformation runInfo)
        {
            // Show the details of selected run history.

            textBox_Request.Text = runInfo.RequestUrl;

            dataGridView_RequestHeader.Rows.Clear();

            string[] headers = runInfo.RequestHeader.Replace("\r", "").Split('\n');

            foreach (string header in headers)
            {
                if (header == "")
                {
                    continue;
                }

                string[] delimiter = { ": " };
                string[] headerParts = header.Split(delimiter, StringSplitOptions.RemoveEmptyEntries);

                string headerName = "";
                string headerValue = "";

                if (headerParts.Length == 0)
                {
                    // invalid format
                    continue;
                }
                else if (headerParts.Length == 1)
                {
                    // header value is missing.
                    headerName = headerParts[0];
                }
                else if (headerParts.Length == 2)
                {
                    headerName = headerParts[0];
                    headerValue = headerParts[1];
                }
                else
                {
                    // Header value contains ": " .
                    headerName = headerParts[0];
                    headerValue = header.Remove(0, headerName.Length + 2);
                }

                dataGridView_RequestHeader.Rows.Add(headerName, headerValue);
            }

            scintilla_RequestBody.Text = runInfo.RequestBody;

            switch (runInfo.RequestMethod.ToUpper())
            {
                case "GET":
                    radioButton_GET.Select();
                    break;
                case "POST":
                    radioButton_POST.Select();
                    break;
                case "PATCH":
                    radioButton_PATCH.Select();
                    break;
                case "DELETE":
                    radioButton_DELETE.Select();
                    break;
                case "PUT":
                    radioButton_PUT.Select();
                    break;
                default:
                    break;
            }

            label_StatusCode.Text = runInfo.ResponseStatusCode;
            textBox_ResponseHeaders.Text = runInfo.ResponseHeader.Replace("\n", Environment.NewLine);

            bool isImage = false;
            bool isCsv = false;

            if (textBox_ResponseHeaders.Text.Contains("Content-Type: image/jpeg") || textBox_ResponseHeaders.Text.Contains("Content-Type: image/png"))
            {
                isImage = true;
            }

            isCsv = Regex.Match(textBox_ResponseHeaders.Text, "attachment; filename=\".*\\.csv\"", RegexOptions.None).Success;

            originalJsonResponse = runInfo.ResponseBody;
            indentedJsonResponse = "";
            decodedJsonResponse = "";
            indentedAndDecodedJsonResponse = "";
            scintilla_ResponseBody.ReadOnly = false;
            scintilla_ResponseBody.Text = ShapeJsonResponseIfNeeded(originalJsonResponse);
            scintilla_ResponseBody.ReadOnly = true;

            if (isImage) {
                // Create new bitmap object to display the response
                byte[] binaryResponse = Convert.FromBase64String(originalJsonResponse);                
                MemoryStream memoryStream = new MemoryStream();
                byte[] pictureData = binaryResponse;
                memoryStream.Write(pictureData, 0, Convert.ToInt32(pictureData.Length));
                Bitmap bitmapResponse = new Bitmap(memoryStream, false);
                memoryStream.Dispose();
                pictureBox_Photo.Image = bitmapResponse;

                // Show Preview tab
                tabControl_Response.SelectTab(2);
            }
            else if (isCsv)
            {
                // Create DataTable

                StringReader stringReader = new StringReader(originalJsonResponse);
                string line = stringReader.ReadLine();

                DataTable dataTable = new DataTable();
                DataRow dataRow;

                if (line != "")
                {
                    // Create headers.
                    foreach (var column in line.Split(','))
                    {
                        dataTable.Columns.Add(column);
                    }

                    // Add rows.
                    while ((line = stringReader.ReadLine()) != null)
                    {
                        dataRow = dataTable.NewRow();
                        dataRow.ItemArray = line.Split(',');
                        dataTable.Rows.Add(dataRow);
                    }
                }

                dataGridView_CSV.DataSource = dataTable;

                // Show CSV tab
                tabControl_Response.SelectTab(3);
            }
            else
            {
                // Show Body tab
                tabControl_Response.SelectTab(1);
                scintilla_ResponseBody.SetEmptySelection(0);
            }

            // Show the picturebox in preview tab if response is image.
            pictureBox_Photo.Visible = isImage;

            // Show the DataGridView and Link in CSV tab if response is CSV.
            dataGridView_CSV.Visible = isCsv;
            linkLabel_SaveCsvResponse.Visible = isCsv;
        }