public static string GetFormattedString(SearchResult searchResult, ResultParameters parameters = null, bool includeUrl = true) { if (searchResult.IsEmpty()) { return(null); } string result = ""; if (searchResult.FilteredResult is Area) { Area inputArea = searchResult.FilteredResult as Area; Area latestAreaData = new Area { ID = inputArea.ID }; Parsers.ParseAreaAsync(latestAreaData, false, false).Wait(); //Get most updated data (straight from MountainProject page) if (!string.IsNullOrEmpty(latestAreaData.Statistics.ToString())) { result += $"{Markdown.Bold(latestAreaData.Name)} [{latestAreaData.Statistics}]" + Markdown.NewLine; } else { result += $"{Markdown.Bold(latestAreaData.Name)}" + Markdown.NewLine; } result += GetLocationString(latestAreaData, searchResult.RelatedLocation); result += GetPopularRoutes(latestAreaData, parameters); if (includeUrl) { result += latestAreaData.URL; } } else if (searchResult.FilteredResult is Route) { Route inputRoute = searchResult.FilteredResult as Route; Route latestRouteData = new Route { ID = inputRoute.ID }; Parsers.ParseRouteAsync(latestRouteData, false).Wait(); //Get most updated data (straight from MountainProject page) result += $"{Markdown.Bold(latestRouteData.Name)} {GetRouteAdditionalInfo(latestRouteData, parameters, showGrade: false, showHeight: false)}"; result += Markdown.NewLine; result += $"Type: {string.Join(", ", latestRouteData.Types)}" + Markdown.NewLine; result += $"Grade: {GetRouteGrade(latestRouteData, parameters)}" + Markdown.NewLine; if (latestRouteData.Height != null && latestRouteData.Height.Value != 0) { result += $"Height: {Math.Round(latestRouteData.Height.GetValue(Dimension.Units.Feet), 1)} ft/" + $"{Math.Round(latestRouteData.Height.GetValue(Dimension.Units.Meters), 1)} m" + Markdown.NewLine; } result += $"Rating: {latestRouteData.Rating}/4" + Markdown.NewLine; result += GetLocationString(latestRouteData, searchResult.RelatedLocation); if (includeUrl) { result += latestRouteData.URL; } } return(result); }
public static string GetLocationString(MPObject child, Area referenceLocation = null) { MPObject innerParent, outerParent; innerParent = null; outerParent = MountainProjectDataSearch.GetParent(child, 1); //Get state that route/area is in if (child is Route) { innerParent = MountainProjectDataSearch.GetParent(child, -2); //Get the "second to last" parent https://github.com/derekantrican/MountainProject/issues/12 if (innerParent.URL == outerParent.URL) { innerParent = MountainProjectDataSearch.GetParent(child, -1); } } else if (child is Area) { innerParent = MountainProjectDataSearch.GetParent(child, -1); //Get immediate parent } if (innerParent == null || //If "child" is a dest area, the parent will be "All Locations" which won't be in our directory innerParent.URL == Utilities.INTERNATIONALURL) //If "child" is an area like "Europe" { return(""); } if (outerParent.URL == Utilities.INTERNATIONALURL) //If this is international, get the country instead of the state (eg "China") { if (child.ParentUrls.Count > 3) { if (child.ParentUrls.Contains(Utilities.AUSTRALIAURL)) //Australia is both a continent and a country so it is an exception { outerParent = MountainProjectDataSearch.GetParent(child, 2); } else { outerParent = MountainProjectDataSearch.GetParent(child, 3); } } else { return(""); //Return a blank string if we are in an area like "China" (so we don't return a string like "China is located in Asia") } } if (referenceLocation != null) //Override the "innerParent" in situations where we want the location string to include the "insisted" location { //Only override if the location is not already present if (innerParent.URL != referenceLocation.URL && outerParent.URL != referenceLocation.URL) { innerParent = referenceLocation; } } string locationString = $"Located in {Markdown.Link(innerParent.Name, innerParent.URL)}"; if (outerParent != null && outerParent.URL != innerParent.URL) { locationString += $", {Markdown.Link(outerParent.Name, outerParent.URL)}"; } locationString += Markdown.NewLine; return(locationString); }