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;
@ -10,17 +11,23 @@ namespace BuildFeed.Controllers
{ {
public class apiController : ApiController public class apiController : ApiController
{ {
private Build bModel;
public apiController() : base()
{
bModel = new Build();
}
public IEnumerable<BuildModel> GetBuilds() public IEnumerable<BuildModel> GetBuilds()
{ {
return new Build().SelectInBuildOrder(); return bModel.SelectInBuildOrder();
} }
public IEnumerable<string> GetWin10Labs() public IEnumerable<string> GetWin10Labs()
{ {
Build b = new Build();
List<string> labs = new List<string>(); List<string> labs = new List<string>();
labs.AddRange(b.SelectBuildLabs(6, 4)); labs.AddRange(bModel.SelectBuildLabs(6, 4));
labs.AddRange(b.SelectBuildLabs(10, 0)); labs.AddRange(bModel.SelectBuildLabs(10, 0));
return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray(); return labs.GroupBy(l => l).Select(l => l.Key).Where(l => l.All(c => c != '(')).ToArray();
} }
@ -34,7 +41,7 @@ public bool AddWin10Builds(NewBuild apiModel)
} }
if (Membership.ValidateUser(apiModel.Username, apiModel.Password)) if (Membership.ValidateUser(apiModel.Username, apiModel.Password))
{ {
new Build().InsertAll(apiModel.NewBuilds.Select(nb => new BuildModel() bModel.InsertAll(apiModel.NewBuilds.Select(nb => new BuildModel()
{ {
MajorVersion = nb.MajorVersion, MajorVersion = nb.MajorVersion,
MinorVersion = nb.MinorVersion, MinorVersion = nb.MinorVersion,
@ -69,13 +76,13 @@ orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) asce
Url = Url.Route("Source Root", new { controller = "front", action = "viewSource", source = s.Value }), Url = Url.Route("Source Root", new { controller = "front", action = "viewSource", source = s.Value }),
Label = s.Text.Replace(query, "<strong>" + query + "</strong>"), Label = s.Text.Replace(query, "<strong>" + query + "</strong>"),
Title = s.Text, Title = s.Text,
Group = "Source" Group = Common.SearchSource
}; };
results.AddRange(sourceResults); results.AddRange(sourceResults);
var versionResults = from v in new Build().SelectBuildVersions() var versionResults = from v in bModel.SelectBuildVersions()
where $"{v.Major}.{v.Minor}".StartsWith(query) where $"{v.Major}.{v.Minor}".StartsWith(query)
orderby v.Major descending, v.Minor descending orderby v.Major descending, v.Minor descending
select new SearchResult() select new SearchResult()
@ -83,13 +90,13 @@ orderby s.Text.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) asce
Url = Url.Route("Version Root", new { controller = "front", action = "viewVersion", major = v.Major, minor = v.Minor }), 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>"), Label = $"{v.Major}.{v.Minor}".Replace(query, "<strong>" + query + "</strong>"),
Title = "", Title = "",
Group = "Version" Group = Common.SearchVersion
}; };
results.AddRange(versionResults); results.AddRange(versionResults);
var yearResults = from y in new Build().SelectBuildYears() var yearResults = from y in bModel.SelectBuildYears()
where y.ToString().Contains(query) where y.ToString().Contains(query)
orderby y descending orderby y descending
select new SearchResult() select new SearchResult()
@ -97,36 +104,36 @@ orderby y descending
Url = Url.Route("Year Root", new { controller = "front", action = "viewYear", year = y }), Url = Url.Route("Year Root", new { controller = "front", action = "viewYear", year = y }),
Label = y.ToString().Replace(query, "<strong>" + query + "</strong>"), Label = y.ToString().Replace(query, "<strong>" + query + "</strong>"),
Title = "", Title = "",
Group = "Year" Group = Common.SearchYear
}; };
results.AddRange(yearResults); results.AddRange(yearResults);
var labResults = from l in new Build().SelectBuildLabs() var labResults = from l in bModel.SearchBuildLabs(query)
where l.ToLower().Contains(query.ToLower()) orderby l.IndexOf(query.ToLower()) ascending,
orderby l.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending l.Length ascending
select new SearchResult() select new SearchResult()
{ {
Url = Url.Route("Lab Root", new { controller = "front", action = "viewLab", lab = l }), Url = Url.Route("Lab Root", new { controller = "front", action = "viewLab", lab = l }),
Label = l.Replace(query, "<strong>" + query + "</strong>"), Label = l.Replace(query, $"<strong>{query}</strong>"),
Title = l, Title = l,
Group = "Lab" Group = Common.SearchLab
}; };
results.AddRange(labResults); results.AddRange(labResults);
var buildResults = from b in new Build().Select() var buildResults = from b in bModel.Select()
where b.FullBuildString.ToLower().Contains(query.ToLower()) where b.FullBuildString.ToLower().Contains(query.ToLower())
orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending, orderby b.FullBuildString.ToLower().IndexOf(query.ToLower(), StringComparison.Ordinal) ascending,
b.BuildTime descending b.BuildTime descending
select new SearchResult() select new SearchResult()
{ {
Url = Url.Route("Build", new { controller = "front", action = "viewBuild", id = b.Id }), Url = Url.Route("Build", new { controller = "front", action = "viewBuild", id = b.Id }),
Label = b.FullBuildString.Replace(query, "<strong>" + query + "</strong>"), Label = b.FullBuildString.Replace(query, $"<strong>{query}</strong>"),
Title = b.FullBuildString, Title = b.FullBuildString,
Group = "Build" Group = Common.SearchBuild
}; };
results.AddRange(buildResults); results.AddRange(buildResults);
@ -137,7 +144,7 @@ b.BuildTime descending
results.Add(new SearchResult() results.Add(new SearchResult()
{ {
Url = "/", Url = "/",
Label = "No Results found", Label = Common.SearchEmpty,
Group = "" Group = ""
}); });
} }

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}";