public static Continent GetContinent(ContinentCodes code) { switch (code) { case ContinentCodes.AM: return(Americas); case ContinentCodes.AF: return(Africa); case ContinentCodes.AN: return(Antarctica); case ContinentCodes.AS: return(Asia); case ContinentCodes.EU: return(Europe); case ContinentCodes.NA: return(NorthAmerica); case ContinentCodes.OC: return(Oceania); case ContinentCodes.SA: return(SouthAmerica); default: throw new ArgumentException("Could not get continent name by given argument", code.ToString()); } }
private void DrawVerboseTable(Dictionary <DnsServer, List <DnsResponse> > results, RunOptions options) { var resultsByContinent = results.OrderBy(pair => pair.Key.ContinentCode.ToString()); var parentTable = new Table() .Border(TableBorder.MinimalHeavyHead) .BorderColor(Color.White) .AddColumn(new TableColumn($"[green][u]{i18n.dug.Table_Server_Info}[/][/]").Centered()) .AddColumn(new TableColumn($"[green][u]{i18n.dug.Table_Results}[/][/]").Centered()); ContinentCodes currentContinent = null; foreach (var resultPair in resultsByContinent) { var server = resultPair.Key; //Check if we need to render a continent name if (server.ContinentCode.Code != currentContinent?.Code) { currentContinent = server.ContinentCode; parentTable.AddRow(new Markup($"[bold underline blue] {currentContinent.Name} [/]")); parentTable.AddEmptyRow(); } //Create Server info for left column var serverInfoGrid = new Grid(); serverInfoGrid.AddColumn(new GridColumn().NoWrap()); serverInfoGrid.AddRow(server.IPAddress.ToString()); // serverInfoGrid.AddRow(string.IsNullOrEmpty(server.CountryFlag) ? "" : server.CountryFlag); //I would really like to use these flag emojis but it seems like it has very little terminal support, most render them incorrectly... serverInfoGrid.AddRow(server.CityCountryName); serverInfoGrid.AddRow("DNSSEC: " + (server.DNSSEC == null ? "❓" : ((bool)server.DNSSEC ? "🔒" : "🔓"))); serverInfoGrid.AddRow($"{i18n.dug.Table_Reliability}: {server.Reliability * 100}%"); serverInfoGrid.AddEmptyRow(); var resultTable = new Table().AddColumns("", "", ""); //Currently you must declare the column headers, even when you dont want to render them. resultTable.ShowHeaders = false; foreach (var result in resultPair.Value.OrderBy(res => res.RecordType.ToString())) { var answerString = TemplateHelper.GetAnswersString(result); answerString = MarkupHelper.FormatDnsResponseMarkup(answerString, options.Hostname); resultTable.AddRow(result.RecordType.ToString(), answerString, $"{result.ResponseTime}ms"); } parentTable.AddRow(serverInfoGrid, resultTable); } AnsiConsole.Render(parentTable); }