diff --git a/Shared/PlasmaShared/ISpringieService/RatingCategory.cs b/Shared/PlasmaShared/ISpringieService/RatingCategory.cs index fea5adc3d..e63bbbe1c 100644 --- a/Shared/PlasmaShared/ISpringieService/RatingCategory.cs +++ b/Shared/PlasmaShared/ISpringieService/RatingCategory.cs @@ -11,4 +11,8 @@ public enum RatingCategoryFlags { Casual = 1, MatchMaking = 2, Planetwars = 4 } + public enum RatingSearchOption + { + Any = 0, None = 1, Casual = 2, Competitive = 3, Planetwars = 4 + } } diff --git a/Zero-K.info/Controllers/BattlesController.cs b/Zero-K.info/Controllers/BattlesController.cs index 6e8976fd5..af17ac75f 100644 --- a/Zero-K.info/Controllers/BattlesController.cs +++ b/Zero-K.info/Controllers/BattlesController.cs @@ -67,6 +67,8 @@ public class BattleSearchModel public YesNoAny Mission { get; set; } public YesNoAny Bots { get; set; } public YesNoAny Victory { get; set; } + public YesNoAny Matchmaker { get; set; } + public RatingSearchOption Rating { get; set; } public RankSelector Rank { get; set; } = RankSelector.Undefined; public int? MinLength { get; set; } @@ -166,6 +168,34 @@ public ActionResult Index(BattleSearchModel model) { q = q.Where(b => b.Rank == rank); } + if (model.Matchmaker != YesNoAny.Any) + { + var bval = model.Matchmaker == YesNoAny.Yes; + q = q.Where(b => b.IsMatchMaker == bval); + } + + if (model.Rating != RatingSearchOption.Any) + { + switch (model.Rating) + { + case RatingSearchOption.Competitive: + q = q.Where(b => b.ApplicableRatings.HasFlag(RatingCategoryFlags.MatchMaking)); + break; + case RatingSearchOption.Casual: + q = q.Where(b => b.ApplicableRatings.HasFlag(RatingCategoryFlags.Casual)); + break; + case RatingSearchOption.Planetwars: + q = q.Where(b => b.ApplicableRatings.HasFlag(RatingCategoryFlags.Planetwars)); + break; + case RatingSearchOption.None: + q = q.Where(b => b.ApplicableRatings == 0); + break; + default: + // The default case being no filtering should be safe enough. + break; + } + } + q = q.OrderByDescending(b => b.StartTime); if (model.offset.HasValue) q = q.Skip(model.offset.Value); diff --git a/Zero-K.info/Views/Battles/BattleDetail.cshtml b/Zero-K.info/Views/Battles/BattleDetail.cshtml index f82bf2af1..cf49b3cc2 100644 --- a/Zero-K.info/Views/Battles/BattleDetail.cshtml +++ b/Zero-K.info/Views/Battles/BattleDetail.cshtml @@ -100,9 +100,37 @@ @Model.IsMission +