More amends, inc a bit of Localisation

This commit is contained in:
Thomas Hounsell 2015-09-10 21:01:39 +01:00
parent d2521cdc8d
commit b17e622280
5 changed files with 300 additions and 140 deletions

View File

@ -1,4 +1,5 @@
using BuildFeed.Models; using BuildFeed.Local;
using BuildFeed.Models;
using BuildFeed.Models.ApiModel; using BuildFeed.Models.ApiModel;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -8,141 +9,147 @@
namespace BuildFeed.Controllers namespace BuildFeed.Controllers
{ {
public class apiController : ApiController public class apiController : ApiController
{ {
public IEnumerable<BuildModel> GetBuilds() private Build bModel;
{
return new Build().SelectInBuildOrder();
}
public IEnumerable<string> GetWin10Labs() public apiController() : base()
{ {
Build b = new Build(); bModel = new Build();
List<string> labs = new List<string>(); }
labs.AddRange(b.SelectBuildLabs(6, 4));
labs.AddRange(b.SelectBuildLabs(10, 0));
return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray(); public IEnumerable<BuildModel> GetBuilds()
} {
return bModel.SelectInBuildOrder();
}
[HttpPost] public IEnumerable<string> GetWin10Labs()
public bool AddWin10Builds(NewBuild apiModel) {
{ List<string> labs = new List<string>();
if (apiModel == null) labs.AddRange(bModel.SelectBuildLabs(6, 4));
labs.AddRange(bModel.SelectBuildLabs(10, 0));
return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray();
}
[HttpPost]
public bool AddWin10Builds(NewBuild apiModel)
{
if (apiModel == null)
{
return false;
}
if (Membership.ValidateUser(apiModel.Username, apiModel.Password))
{
bModel.InsertAll(apiModel.NewBuilds.Select(nb => new BuildModel()
{ {
return false; MajorVersion = nb.MajorVersion,
} MinorVersion = nb.MinorVersion,
if (Membership.ValidateUser(apiModel.Username, apiModel.Password)) Number = nb.Number,
{ Revision = nb.Revision,
new Build().InsertAll(apiModel.NewBuilds.Select(nb => new BuildModel() Lab = nb.Lab,
{ BuildTime = nb.BuildTime,
MajorVersion = nb.MajorVersion, FlightLevel = nb.FlightLevel
MinorVersion = nb.MinorVersion, }));
Number = nb.Number, return true;
Revision = nb.Revision, }
Lab = nb.Lab, else
BuildTime = nb.BuildTime, {
FlightLevel = nb.FlightLevel return false;
})); }
return true; }
}
else
{
return false;
}
}
public IEnumerable<SearchResult> GetSearchResult(string query) public IEnumerable<SearchResult> GetSearchResult(string query)
{ {
if (string.IsNullOrWhiteSpace(query)) if (string.IsNullOrWhiteSpace(query))
{ {
return new SearchResult[0]; return new SearchResult[0];
} }
List<SearchResult> results = new List<SearchResult>(); List<SearchResult> results = new List<SearchResult>();
var sourceResults = from s in Enum.GetValues(typeof(TypeOfSource)).Cast<TypeOfSource>().Select(s => new { Text = DisplayHelpers.GetDisplayTextForEnum(s), Value = s }) var sourceResults = from s in Enum.GetValues(typeof(TypeOfSource)).Cast<TypeOfSource>().Select(s => new { Text = DisplayHelpers.GetDisplayTextForEnum(s), Value = s })
where s.Text.ToLower().Contains(query.ToLower()) where s.Text.ToLower().Contains(query.ToLower())
orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending
select new SearchResult()
{
Url = Url.Route("Source Root", new { controller = "front", action = "viewSource", source = s.Value }),
Label = s.Text.Replace(query, "<strong>" + query + "</strong>"),
Title = s.Text,
Group = "Source"
};
results.AddRange(sourceResults);
var versionResults = from v in new Build().SelectBuildVersions()
where $"{v.Major}.{v.Minor}".StartsWith(query)
orderby v.Major descending, v.Minor descending
select new SearchResult()
{
Url = Url.Route("Version Root", new { controller = "front", action = "viewVersion", major = v.Major, minor = v.Minor }),
Label = $"{v.Major}.{v.Minor}".Replace(query, "<strong>" + query + "</strong>"),
Title = "",
Group = "Version"
};
results.AddRange(versionResults);
var yearResults = from y in new Build().SelectBuildYears()
where y.ToString().Contains(query)
orderby y descending
select new SearchResult()
{
Url = Url.Route("Year Root", new { controller = "front", action = "viewYear", year = y }),
Label = y.ToString().Replace(query, "<strong>" + query + "</strong>"),
Title = "",
Group = "Year"
};
results.AddRange(yearResults);
var labResults = from l in new Build().SelectBuildLabs()
where l.ToLower().Contains(query.ToLower())
orderby l.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending
select new SearchResult() select new SearchResult()
{ {
Url = Url.Route("Lab Root", new { controller = "front", action = "viewLab", lab = l }), Url = Url.Route("Source Root", new { controller = "front", action = "viewSource", source = s.Value }),
Label = l.Replace(query, "<strong>" + query + "</strong>"), Label = s.Text.Replace(query, "<strong>" + query + "</strong>"),
Title = l, Title = s.Text,
Group = "Lab" Group = Common.SearchSource
}; };
results.AddRange(labResults); results.AddRange(sourceResults);
var buildResults = from b in new Build().Select() var versionResults = from v in bModel.SelectBuildVersions()
where b.FullBuildString.ToLower().Contains(query.ToLower()) where $"{v.Major}.{v.Minor}".StartsWith(query)
orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending, orderby v.Major descending, v.Minor descending
b.BuildTime descending select new SearchResult()
select new SearchResult() {
{ Url = Url.Route("Version Root", new { controller = "front", action = "viewVersion", major = v.Major, minor = v.Minor }),
Url = Url.Route("Build", new { controller = "front", action = "viewBuild", id = b.Id }), Label = $"{v.Major}.{v.Minor}".Replace(query, "<strong>" + query + "</strong>"),
Label = b.FullBuildString.Replace(query, "<strong>" + query + "</strong>"), Title = "",
Title = b.FullBuildString, Group = Common.SearchVersion
Group = "Build" };
};
results.AddRange(buildResults); results.AddRange(versionResults);
if (results.Count == 0) var yearResults = from y in bModel.SelectBuildYears()
where y.ToString().Contains(query)
orderby y descending
select new SearchResult()
{
Url = Url.Route("Year Root", new { controller = "front", action = "viewYear", year = y }),
Label = y.ToString().Replace(query, "<strong>" + query + "</strong>"),
Title = "",
Group = Common.SearchYear
};
results.AddRange(yearResults);
var labResults = from l in bModel.SearchBuildLabs(query)
orderby l.IndexOf(query.ToLower()) ascending,
l.Length ascending
select new SearchResult()
{
Url = Url.Route("Lab Root", new { controller = "front", action = "viewLab", lab = l }),
Label = l.Replace(query, $"<strong>{query}</strong>"),
Title = l,
Group = Common.SearchLab
};
results.AddRange(labResults);
var buildResults = from b in bModel.Select()
where b.FullBuildString.ToLower().Contains(query.ToLower())
orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending,
b.BuildTime descending
select new SearchResult()
{
Url = Url.Route("Build", new { controller = "front", action = "viewBuild", id = b.Id }),
Label = b.FullBuildString.Replace(query, $"<strong>{query}</strong>"),
Title = b.FullBuildString,
Group = Common.SearchBuild
};
results.AddRange(buildResults);
if (results.Count == 0)
{
results.Add(new SearchResult()
{ {
results.Add(new SearchResult() Url = "/",
{ Label = Common.SearchEmpty,
Url = "/", Group = ""
Label = "No Results found", });
Group = "" }
});
}
return results.Take(15); return results.Take(15);
} }
} }
} }

View File

@ -159,6 +159,15 @@ public static string Search {
} }
} }
/// <summary>
/// Looks up a localized string similar to Build.
/// </summary>
public static string SearchBuild {
get {
return ResourceManager.GetString("SearchBuild", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Search BuildFeed.... /// Looks up a localized string similar to Search BuildFeed....
/// </summary> /// </summary>
@ -168,6 +177,24 @@ public static string SearchBuildFeed {
} }
} }
/// <summary>
/// Looks up a localized string similar to No results found.
/// </summary>
public static string SearchEmpty {
get {
return ResourceManager.GetString("SearchEmpty", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Lab.
/// </summary>
public static string SearchLab {
get {
return ResourceManager.GetString("SearchLab", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Search query. /// Looks up a localized string similar to Search query.
/// </summary> /// </summary>
@ -177,6 +204,33 @@ public static string SearchQuery {
} }
} }
/// <summary>
/// Looks up a localized string similar to Source.
/// </summary>
public static string SearchSource {
get {
return ResourceManager.GetString("SearchSource", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Version.
/// </summary>
public static string SearchVersion {
get {
return ResourceManager.GetString("SearchVersion", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Year.
/// </summary>
public static string SearchYear {
get {
return ResourceManager.GetString("SearchYear", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Sitemap. /// Looks up a localized string similar to Sitemap.
/// </summary> /// </summary>

View File

@ -174,4 +174,22 @@
<data name="PageTitleSegment" xml:space="preserve"> <data name="PageTitleSegment" xml:space="preserve">
<value>[!!! | Þáϱè {0} !!!]</value> <value>[!!! | Þáϱè {0} !!!]</value>
</data> </data>
<data name="SearchBuild" xml:space="preserve">
<value>[!!! ßúïℓδ !!!]</value>
</data>
<data name="SearchEmpty" xml:space="preserve">
<value>[!!! Nô řèƨúℓƭƨ ƒôúñδ ℓôřè !!!]</value>
</data>
<data name="SearchLab" xml:space="preserve">
<value>[!!! £áβ !!!]</value>
</data>
<data name="SearchSource" xml:space="preserve">
<value>[!!! §ôúrçè l !!!]</value>
</data>
<data name="SearchVersion" xml:space="preserve">
<value>[!!! Vèřƨïôñ !!!]</value>
</data>
<data name="SearchYear" xml:space="preserve">
<value>[!!! Ýèář !!!]</value>
</data>
</root> </root>

View File

@ -174,4 +174,22 @@
<data name="PageTitleSegment" xml:space="preserve"> <data name="PageTitleSegment" xml:space="preserve">
<value>| Page {0}</value> <value>| Page {0}</value>
</data> </data>
<data name="SearchBuild" xml:space="preserve">
<value>Build</value>
</data>
<data name="SearchEmpty" xml:space="preserve">
<value>No results found</value>
</data>
<data name="SearchLab" xml:space="preserve">
<value>Lab</value>
</data>
<data name="SearchSource" xml:space="preserve">
<value>Source</value>
</data>
<data name="SearchVersion" xml:space="preserve">
<value>Version</value>
</data>
<data name="SearchYear" xml:space="preserve">
<value>Year</value>
</data>
</root> </root>

View File

@ -1,4 +1,5 @@
using BuildFeed.Local; using BuildFeed.Local;
using BuildFeed.Models.ApiModel;
using BuildFeed.Models.ViewModel.Front; using BuildFeed.Models.ViewModel.Front;
using MongoDB.Bson; using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson.Serialization.Attributes;
@ -350,45 +351,97 @@ public long SelectVersionCount(int major, int minor)
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public IEnumerable<BuildVersion> SelectBuildVersions() public List<BuildVersion> SelectBuildVersions()
{ {
var task = _buildCollection.DistinctAsync(b => new BuildVersion() { Major = b.MajorVersion, Minor = b.MinorVersion }, b => true); var task = _buildCollection.Aggregate()
.Group(b => new BuildVersion()
{
Major = b.MajorVersion,
Minor = b.MinorVersion,
},
// incoming bullshit hack
bg => new Tuple<BuildVersion>(bg.Key))
.SortByDescending(b => b.Item1.Major)
.ThenByDescending(b => b.Item1.Minor)
.ToListAsync();
task.Wait(); task.Wait();
var outTask = task.Result.ToListAsync();
outTask.Wait(); // work ourselves out of aforementioned bullshit hack
return outTask.Result return task.Result.Select(b => b.Item1).ToList();
.OrderByDescending(y => y.Major)
.ThenByDescending(y => y.Minor);
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public IEnumerable<int> SelectBuildYears() public IEnumerable<int> SelectBuildYears()
{ {
var task = _buildCollection.DistinctAsync(b => b.BuildTime.Value.Year, b => b.BuildTime.HasValue); var task = _buildCollection.Aggregate()
.Match(b => b.BuildTime != null)
.Group(b => ((DateTime)b.BuildTime).Year,
// incoming bullshit hack
bg => new Tuple<int>(bg.Key))
.SortByDescending(b => b.Item1)
.ToListAsync();
task.Wait(); task.Wait();
var outTask = task.Result.ToListAsync();
outTask.Wait(); // work ourselves out of aforementioned bullshit hack
return outTask.Result.OrderBy(b => b); return task.Result.Select(b => b.Item1).ToList();
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public List<string> SearchBuildLabs(string query)
{
var task = _buildCollection.Aggregate()
.Match(b => b.Lab != null)
.Match(b => b.Lab != "")
.Match(b => b.Lab.ToLower().Contains(query.ToLower()))
.Group(b => b.Lab.ToLower(),
// incoming bullshit hack
bg => new Tuple<string>(bg.Key))
.ToListAsync();
task.Wait();
// work ourselves out of aforementioned bullshit hack
return task.Result.Select(b => b.Item1).ToList();
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public IEnumerable<string> SelectBuildLabs() public IEnumerable<string> SelectBuildLabs()
{ {
var task = _buildCollection.DistinctAsync(b => b.Lab.ToLower(), b => !string.IsNullOrWhiteSpace(b.Lab)); var task = _buildCollection.Aggregate()
.Match(b => b.Lab != null)
.Match(b => b.Lab != "")
.Group(b => b.Lab.ToLower(),
// incoming bullshit hack
bg => new Tuple<string>(bg.Key))
.SortBy(b => b.Item1)
.ToListAsync();
task.Wait(); task.Wait();
var outTask = task.Result.ToListAsync();
outTask.Wait(); // work ourselves out of aforementioned bullshit hack
return outTask.Result.OrderBy(b => b); return task.Result.Select(b => b.Item1).ToList();
} }
[DataObjectMethod(DataObjectMethodType.Select, false)] [DataObjectMethod(DataObjectMethodType.Select, false)]
public IEnumerable<string> SelectBuildLabs(byte major, byte minor) public IEnumerable<string> SelectBuildLabs(byte major, byte minor)
{ {
var task = _buildCollection.DistinctAsync(b => b.Lab.ToLower(), b => !string.IsNullOrWhiteSpace(b.Lab) && b.MajorVersion == major && b.MinorVersion == minor); var task = _buildCollection.Aggregate()
.Match(b => b.MajorVersion == major)
.Match(b => b.MinorVersion == minor)
.Match(b => b.Lab != null)
.Match(b => b.Lab != "")
.Group(b => b.Lab.ToLower(),
// incoming bullshit hack
bg => new Tuple<string>(bg.Key))
.SortBy(b => b.Item1)
.ToListAsync();
task.Wait(); task.Wait();
var outTask = task.Result.ToListAsync();
outTask.Wait(); // work ourselves out of aforementioned bullshit hack
return outTask.Result.OrderBy(b => b); return task.Result.Select(b => b.Item1).ToList();
} }
[DataObjectMethod(DataObjectMethodType.Insert, true)] [DataObjectMethod(DataObjectMethodType.Insert, true)]
@ -470,11 +523,21 @@ public enum LevelOfFlight
High = 3 High = 3
} }
public struct BuildVersion public class BuildVersion
{ {
public byte Major { get; set; } public byte Major { get; set; }
public byte Minor { get; set; } public byte Minor { get; set; }
public BuildVersion()
{
}
public BuildVersion(byte major, byte minor)
{
Major = major;
Minor = minor;
}
public override string ToString() public override string ToString()
{ {
return $"{Major}.{Minor}"; return $"{Major}.{Minor}";