Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }