using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using BuildFeed.Models; using BuildFeed.Models.ApiModel; namespace BuildFeed.Controllers { public class apiController : ApiController { public IEnumerable GetBuilds() { return Build.SelectInBuildOrder(); } public IEnumerable GetWin10Labs() { List labs = new List(); labs.AddRange(Build.SelectBuildLabs(6, 4)); labs.AddRange(Build.SelectBuildLabs(10, 0)); return labs.GroupBy(l => l).Select(l => l.Key).ToArray(); } public IEnumerable GetSearchResult(string query) { if (string.IsNullOrWhiteSpace(query)) { return new SearchResult[0]; } List results = new List(); var sourceResults = from s in Enum.GetValues(typeof(BuildFeed.Models.TypeOfSource)).Cast().Select(s => new { Text = DisplayHelpers.GetDisplayTextForEnum(s), Value = s }) where s.Text.ToLower().Contains(query.ToLower()) orderby s.Text.ToLower().IndexOf(query.ToLower()) ascending select new SearchResult() { Url = Url.Route("Source Root", new { controller = "build", action = "source", source = s.Value }), Label = s.Text.Replace(query, "" + query + ""), Title = s.Text, Group = "Source" }; results.AddRange(sourceResults); var versionResults = from v in Build.SelectBuildVersions() where string.Format("{0}.{1}", v.Major, v.Minor).StartsWith(query) orderby v.Major descending, v.Minor descending select new SearchResult() { Url = Url.Route("Version Root", new { controller = "build", action = "version", major = v.Major, minor = v.Minor }), Label = string.Format("{0}.{1}", v.Major, v.Minor).Replace(query, "" + query + ""), Title = "", Group = "Version" }; results.AddRange(versionResults); var yearResults = from y in Build.SelectBuildYears() where y.ToString().Contains(query) orderby y descending select new SearchResult() { Url = Url.Route("Year Root", new { controller = "build", action = "year", year = y }), Label = y.ToString().Replace(query, "" + query + ""), Title = "", Group = "Year" }; results.AddRange(yearResults); var labResults = from l in Build.SelectBuildLabs() where l.ToLower().Contains(query.ToLower()) orderby l.ToLower().IndexOf(query.ToLower()) ascending select new SearchResult() { Url = Url.Route("Lab Root", new { controller = "build", action = "lab", lab = l }), Label = l.Replace(query, "" + query + ""), Title = l, Group = "Lab" }; results.AddRange(labResults); var buildResults = from b in Build.Select() where b.FullBuildString.ToLower().Contains(query.ToLower()) orderby b.FullBuildString.ToLower().IndexOf(query.ToLower()) ascending, b.BuildTime descending select new SearchResult() { Url = Url.Route("Actions", new { controller = "build", action = "info", id = b.Id }), Label = b.FullBuildString.Replace(query, "" + query + ""), Title = b.FullBuildString, Group = "Build" }; results.AddRange(buildResults); if (results.Count == 0) { results.Add(new SearchResult() { Url = "/", Label = "No Results found", Group = "" }); } return results.Take(6); } } }