async Task <dynamic> ShowPlayersAsync(DateConstraint dateConstraint, CancellationToken token) { var models = await CreateModelsAsync(dateConstraint); ViewBag.Date = dateConstraint; return(View["players.cshtml", models]); }
async Task <List <PlayerModel> > CreateModelsAsync(DateConstraint constraint) { const string PlayerQuery = @" select Player.* from Player inner join ( select TeamSwitch.PlayerId, max(date(TeamSwitch.Time)) as Time from TeamSwitch group by TeamSwitch.PlayerId) LatestTeamSwitch on Player.Id = LatestTeamSwitch.PlayerId where LatestTeamSwitch.Time >= @Start and LatestTeamSwitch.Time < @End"; IEnumerable <Player> players; if (constraint.Start == DateTime.MinValue && constraint.End == DateTime.MaxValue) { players = await DatabaseProvider.Connection.GetAllAsync <Player>(); } else { players = await DatabaseProvider.Connection.QueryAsync <Player>(PlayerQuery, new { constraint.Start, constraint.End }); } var models = new List <PlayerModel>(); foreach (var player in players) { models.Add(await PlayerModel.CreateAsync(player, constraint)); } return(models); }
private float ComputeRouteWeight(DateConstraint constraint, DateTime date, RouteSegment[] route) { const float maxPenality = 1.2f; float duration = (float)(route.Last().DateTo - route.First().DateFrom).TotalSeconds; // Changes count float changes = MathUtil.Clamp(MathUtil.Map(route.Length, 0, 4, 1, maxPenality), 1, maxPenality); // Priority to use trams float buses = MathUtil.Clamp(MathUtil.Map(route.Count(s => s.Line.Type != LineType.Tram), 0, 4, 1, maxPenality), 1, maxPenality); // Changes duration float changeDuration = Enumerable.Range(1, route.Length - 1).Select(i => route[i].DateFrom - route[i - 1].DateTo).Sum(d => (float)d.TotalSeconds); // Diff from asked float diff = 1; switch (constraint) { case DateConstraint.Now: diff = (float)MathUtil.Clamp(MathUtil.Map((route.First().DateFrom - date).TotalMinutes, 0, 15, 1, maxPenality), 1, maxPenality); break; case DateConstraint.From: diff = (float)MathUtil.Clamp(MathUtil.Map(Math.Abs((route.First().DateFrom - date).TotalMinutes), 0, 15, 1, maxPenality), 1, maxPenality); break; case DateConstraint.To: diff = (float)MathUtil.Clamp(MathUtil.Map(Math.Abs((route.Last().DateTo - date).TotalMinutes), 0, 15, 1, maxPenality), 1, maxPenality); break; } return((duration + changeDuration) * changes * buses * diff); }
public static IHtmlString GameLink(Game game, string cssClasses = null, DateConstraint dateConstraint = null) { string classesFragment = null; if (cssClasses != null) { classesFragment = $"class=\"{cssClasses}\""; } var markup = $"<a {classesFragment} href=\"{DateConstrainedLink($"{GameModule.BasePath}/{game.Id}", dateConstraint)}\">{game.Map}</a>"; return(new NonEncodedHtmlString(markup)); }
async Task <dynamic> ShowGamesAsync(DateConstraint dateConstraint, CancellationToken token) { var games = await QueryGamesAsync(dateConstraint); var models = new List <GameModel>(); foreach (var game in games) { models.Add(await GameModel.CreateAsync(game)); } ViewBag.Date = dateConstraint; return(View["games.cshtml", models]); }
public static string DateConstrainedLink(string baseLink, DateConstraint dateConstraint) { if (dateConstraint == null) { return(baseLink); } var joiner = string.Empty; if (!baseLink.EndsWith("/")) { joiner = "/"; } return(baseLink + joiner + dateConstraint.UrlFragment); }
public PlayerModule() : base(BasePath) { async Task <PlayerModel> CreateModelAsync(string steamId, DateConstraint constraint) { var player = await DatabaseProvider.GetPlayerAsync(steamId); if (player == null) { return(null); } var model = await PlayerModel.CreateAsync(player, constraint); return(model); } async Task <dynamic> ShowPlayerAsync(string steamId, DateConstraint dateConstraint, CancellationToken token) { var model = await CreateModelAsync(steamId, dateConstraint); if (model == null) { return(HttpStatusCode.NotFound); } ViewBag.Date = dateConstraint; return(View[model]); } Get["/{SteamId}"] = parameters => Response.AsRedirect($"/Player/{parameters.SteamId}/Today"); Get["/{SteamId}/{Date:dateform}", runAsync : true] = async(parameters, token) => await ShowPlayerAsync(parameters.SteamId, (DateConstraint)parameters.Date, token); Get["/{SteamId}/From/{StartDate}/To/{EndDate}", runAsync : true] = async(parameters, token) => { if (DateConstraint.TryParse(parameters.StartDate, parameters.EndDate, out DateConstraint dateConstraint)) { return(await ShowPlayerAsync(parameters.SteamId, dateConstraint, token)); } else { return(HttpStatusCode.NotFound); } }; }
public GamesModule() : base(BasePath) { Get["/"] = _ => Response.AsRedirect("/Games/Today"); Get["/{Date:dateform}", runAsync : true] = async(parameters, token) => await ShowGamesAsync((DateConstraint)parameters.Date, token); Get["/From/{StartDate}/To/{EndDate}", runAsync : true] = async(parameters, token) => { if (DateConstraint.TryParse(parameters.StartDate, parameters.EndDate, out DateConstraint dateConstraint)) { return(await ShowGamesAsync(dateConstraint, token)); } else { return(HttpStatusCode.NotFound); } }; }
public static async Task <PlayerModel> CreateAsync(Player player, DateConstraint constraint) { var parameters = new { player.Id, constraint.Start, constraint.End }; var kills = await DatabaseProvider.Connection.ExecuteScalarAsync <int>("select count(*) from Kill where Kill.KillerId = @Id and Kill.Time >= @Start and Kill.Time < @End", parameters); var deaths = await DatabaseProvider.Connection.ExecuteScalarAsync <int>("select count(*) from Kill where Kill.VictimId = @Id and Kill.Time >= @Start and Kill.Time < @End", parameters); var assists = await DatabaseProvider.Connection.ExecuteScalarAsync <int>("select count(*) from Assist where Assist.AssisterId = @Id and Assist.Time >= @Start and Assist.Time < @End", parameters); // TODO: Check player activity with team switches during the given time range var firstSeen = await DatabaseProvider.Connection.QueryFirstOrDefaultAsync <DateTime?>("select date(Time) from TeamSwitch where TeamSwitch.PlayerId = @Id order by TeamSwitch.Time asc limit 1", parameters); var lastSeen = await DatabaseProvider.Connection.QueryFirstOrDefaultAsync <DateTime?>("select date(Time) from TeamSwitch where TeamSwitch.PlayerId = @Id order by TeamSwitch.Time desc limit 1", parameters); return(new PlayerModel { Player = player, FirstSeen = firstSeen, LastSeen = lastSeen, Kills = kills, Deaths = deaths, Assists = assists, }); }
public static IHtmlString FormatTeam(IEnumerable <Player> players, Team team, DateConstraint dateConstraint = null) { string className = null; switch (team) { case Team.Terrorists: className = "terrorist"; break; case Team.CounterTerrorists: className = "counter-terrorist"; break; } var links = players.Select(p => RoutingHelper.PlayerLink(p, className, dateConstraint)); var linkList = string.Join("<br />", links.Select(l => l.ToHtmlString())); return(new NonEncodedHtmlString(linkList)); }
public override bool ShowObject(string settingsXml) { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(settingsXml); int dataSource = 1; bool saveObjectType = false; bool manageSiblings = false; bool byUrl = true; if (WidgetHost.ParentPageType == PageType.None) { if (WidgetHost.ParentObjectType == 1) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 3); } else if (WidgetHost.ParentObjectType == 19) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 0); } byUrl = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ByUrl", false); } else if (WidgetHost.ParentPageType == PageType.Overview || WidgetHost.ParentPageType == PageType.Homepage) { if (WidgetHost.ParentObjectType == 1) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 3); } else if (WidgetHost.ParentObjectType == 19) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 0); } byUrl = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ByUrl", true); } else if (WidgetHost.ParentPageType == PageType.Detail) { if (WidgetHost.ParentObjectType == 1) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 3); } else if (WidgetHost.ParentObjectType == 19) { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 0); } else if (!string.IsNullOrEmpty(Request.QueryString["OID"])) { dataSource = 4; } byUrl = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ByUrl", true); } else { dataSource = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DataSource", 1); byUrl = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ByUrl", false); } string objectType = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ObjectType", "0"); string userId = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "UserId", string.Empty); string communitId = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "CommunityId", string.Empty); int pageSize = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "MaxNumber", 5); QuickSort sortBy = (QuickSort)XmlHelper.GetElementValue(xmlDocument.DocumentElement, "SortBy", (int)QuickSort.StartDate); QuickSortDirection sortDirection = (QuickSortDirection)XmlHelper.GetElementValue(xmlDocument.DocumentElement, "SortDirection", (int)QuickSortDirection.Desc); bool showPagerTop = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ShowPagerTop", true); bool showPagerBottom = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "ShowPagerBottom", true); int featured = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "Featured", 0); DateConstraint dateConstraint = (DateConstraint)Enum.Parse(typeof(DateConstraint), XmlHelper.GetElementValue(xmlDocument.DocumentElement, "DateConstraint", "None")); bool renderHtml = XmlHelper.GetElementValue(xmlDocument.DocumentElement, "RenderHtml", false); if (objectType == "0") { if (string.IsNullOrEmpty(Request.QueryString["OT"])) { return(false); } else { objectType = Request.QueryString["OT"]; } } else { saveObjectType = true; } string template = "SmallOutputObject.ascx"; string repeater = "DataObjectLists.ascx"; if (WidgetHost.OutputTemplate != null) { if (!string.IsNullOrEmpty(WidgetHost.OutputTemplate.OutputTemplateControl)) { template = WidgetHost.OutputTemplate.OutputTemplateControl; } if (!string.IsNullOrEmpty(WidgetHost.OutputTemplate.RepeaterControl)) { repeater = WidgetHost.OutputTemplate.RepeaterControl; } } QuickParameters paras = new QuickParameters(); if (WidgetHost.ParentObjectType == 1) // Community { paras.QuerySourceType = QuerySourceType.Community; } else if (WidgetHost.ParentObjectType == 19) // Profile { paras.QuerySourceType = QuerySourceType.Profile; } else if (WidgetHost.ParentObjectType == 20) // Page { paras.QuerySourceType = QuerySourceType.Page; } else { paras.QuerySourceType = QuerySourceType.MyContent; } if (XmlHelper.GetElementValue(xmlDocument.DocumentElement, "Anonymous", false)) { paras.Udc = UserDataContext.GetUserDataContext(Constants.ANONYMOUS_USERNAME); } else { paras.Udc = UserDataContext.GetUserDataContext(); } paras.ObjectType = Helper.GetObjectTypeNumericID(objectType); if (featured > 0) { paras.Featured = featured; } if (dataSource != 4) { paras.Tags1 = QuickParameters.GetDelimitedTagIds(XmlHelper.GetElementValue(xmlDocument.DocumentElement, "TagList1", string.Empty), Constants.TAG_DELIMITER); paras.Tags2 = QuickParameters.GetDelimitedTagIds(XmlHelper.GetElementValue(xmlDocument.DocumentElement, "TagList2", string.Empty), Constants.TAG_DELIMITER); paras.Tags3 = QuickParameters.GetDelimitedTagIds(XmlHelper.GetElementValue(xmlDocument.DocumentElement, "TagList3", string.Empty), Constants.TAG_DELIMITER); } if (dataSource == 0) { DataObject profil = DataObject.Load <DataObject>(this.WidgetHost.ParentCommunityID); paras.UserID = profil.UserID; byUrl = false; } else if (!string.IsNullOrEmpty(userId)) { paras.UserID = userId.ToGuid(); } else if (dataSource == 2) { paras.Communities = communitId.Replace(",", "|"); } else if (dataSource == 3) { paras.CommunityID = this.WidgetHost.ParentCommunityID; } else if (dataSource == 4) { DataObject detail = DataObject.Load <DataObject>(Request.QueryString["OID"].ToGuid()); paras.CommunityID = detail.CommunityID; //paras.ExcludeObjectIds = detail.ObjectID.ToString(); byUrl = false; manageSiblings = true; } else if (dataSource != 1) { return(false); } if ((!showPagerTop && !showPagerBottom) || sortBy == QuickSort.Random) { paras.Amount = pageSize; paras.DisablePaging = true; if (sortBy == QuickSort.Random) { paras.IgnoreCache = true; } } else { paras.PageNumber = 1; paras.PageSize = pageSize; } paras.SortBy = sortBy; paras.Direction = sortDirection; paras.ShowState = ObjectShowState.Published; switch (dateConstraint) { case DateConstraint.UntilYesterday: paras.FromStartDate = SqlDateTime.MinValue.Value; paras.ToStartDate = DateTime.Today.GetEndOfDay() - new TimeSpan(1, 0, 0, 0); paras.FromEndDate = SqlDateTime.MinValue.Value; paras.ToEndDate = DateTime.Today.GetEndOfDay() - new TimeSpan(1, 0, 0, 0); paras.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; break; case DateConstraint.UntilToday: paras.FromStartDate = SqlDateTime.MinValue.Value; paras.ToStartDate = DateTime.Today.GetEndOfDay(); paras.FromEndDate = SqlDateTime.MinValue.Value; paras.ToEndDate = DateTime.Today.GetEndOfDay(); paras.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; break; case DateConstraint.Today: paras.FromStartDate = SqlDateTime.MinValue.Value; paras.ToStartDate = DateTime.Today.GetEndOfDay(); paras.FromEndDate = DateTime.Today.GetStartOfDay(); paras.ToEndDate = SqlDateTime.MaxValue.Value; paras.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; break; case DateConstraint.FromToday: paras.FromStartDate = DateTime.Today.GetStartOfDay(); paras.ToStartDate = SqlDateTime.MaxValue.Value; paras.FromEndDate = DateTime.Today.GetStartOfDay(); paras.ToEndDate = SqlDateTime.MaxValue.Value; paras.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; break; case DateConstraint.FromTomorrow: paras.FromStartDate = DateTime.Today.GetStartOfDay() + new TimeSpan(1, 0, 0, 0); paras.ToStartDate = SqlDateTime.MaxValue.Value; paras.FromEndDate = DateTime.Today.GetStartOfDay() + new TimeSpan(1, 0, 0, 0); paras.ToEndDate = SqlDateTime.MaxValue.Value; paras.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; break; } if (byUrl) { paras.FromNameValueCollection(Request.QueryString); if (saveObjectType) { paras.ObjectType = Helper.GetObjectTypeNumericID(objectType); } } if (paras.SortBy != QuickSort.Title && paras.SortBySecond == QuickSort.NotSorted) { paras.SortBySecond = QuickSort.Title; paras.DirectionSecond = QuickSortDirection.Asc; } IRepeater overview = CreateControl(paras, showPagerTop, showPagerBottom, repeater, template, manageSiblings, renderHtml); if (overview != null) { this.Ph.Controls.Add((Control)overview); return(overview.HasContent); } return(false); }
async Task <List <Game> > QueryGamesAsync(DateConstraint constraint) { var games = await DatabaseProvider.Connection.QueryAsync <Game>("select * from Game where Game.Time >= @Start and Game.Time < @End", new { constraint.Start, constraint.End }); return(games.AsList()); }
public static IHtmlString PlayerLink(Player player, string cssClasses = null, DateConstraint dateConstraint = null) { string classesFragment = null; if (cssClasses != null) { classesFragment = $"class=\"{cssClasses}\""; } var markup = $"<a {classesFragment} href=\"{DateConstrainedLink($"{PlayerModule.BasePath}/{player.SteamId}", dateConstraint)}\">{player.Name}</a>"; return(new NonEncodedHtmlString(markup)); }
private async Task Search(Stop from, Stop to, DateConstraint constraint, DateTime date) { swipeRefresh?.Post(() => swipeRefresh.Refreshing = true); await Task.Run(() => { routeSegments.Clear(); // Build a new route searcher RouteSearch routeSearch = new RouteSearch(); routeSearch.Settings.AllowWalkLinks = false; routeSearch.Prepare(TramUrWayApplication.Lines); // Start enumeration DateTime end = DateTime.Now + TimeSpan.FromSeconds(5); IEnumerable <RouteLink[]> routesEnumerable = routeSearch.FindRoutes(from, to); IEnumerator <RouteLink[]> routesEnumerator = routesEnumerable.GetEnumerator(); while (true) { Task <bool> moveNextTask = Task.Run(() => routesEnumerator.MoveNext()); // Exit if timed out TimeSpan timeout = end - DateTime.Now; if (!moveNextTask.Wait(timeout)) { break; } // Exit if enumeration finished if (moveNextTask.Result == false) { break; } RouteLink[] route = routesEnumerator.Current; TimeSpan tolerance = TimeSpan.FromMinutes(15); // We found a route, try to find times if (constraint == DateConstraint.Now) { routeSegments.AddRange(routeSearch.SimulateTimeStepsFrom(route, date, TimeSpan.Zero, tolerance)); } else if (constraint == DateConstraint.From) { routeSegments.AddRange(routeSearch.SimulateTimeStepsFrom(route, date, tolerance, tolerance)); } else if (constraint == DateConstraint.To) { throw new NotImplementedException(); } else if (constraint == DateConstraint.Last) { throw new NotImplementedException(); } // Filter out too long times TimeSpan maxTime = TimeSpan.FromMinutes(0.05 * (to.Position - from.Position)); routeSegments.RemoveAll(r => r.Last().DateTo - r.First().DateFrom > maxTime); routeSegments.Sort((r1, r2) => (int)(ComputeRouteWeight(constraint, date, r1) - ComputeRouteWeight(constraint, date, r2))); // Group routes by from and to time steps RouteSegment[][] routeSegmentsCopy = routeSegments.GroupBy(r => GetRouteHash(r)).Select(g => g.First()).ToArray(); RunOnUiThread(() => routeSegmentAdapter.RouteSegments = routeSegmentsCopy); } RunOnUiThread(() => { noResultsView.Visibility = routeSegments.Count == 0 ? ViewStates.Visible : ViewStates.Gone; recyclerView.Visibility = routeSegments.Count > 0 ? ViewStates.Visible : ViewStates.Gone; swipeRefresh?.PostDelayed(() => swipeRefresh.Refreshing = false, 200); }); }); }
protected void Page_Load(object sender, EventArgs e) { string queryString = Helper.GetFilteredQueryString(Request.QueryString, new List <string> { "DC", "PN", "FE" }, true); lnkToday1.NavigateUrl = string.Format("{0}?{1}&DC={2}&FE=1", Request.GetRawPath(), queryString, DateConstraint.Today); lnkToday1.ID = null; lnkToday2.NavigateUrl = string.Format("{0}?{1}&DC={2}&FE=2", Request.GetRawPath(), queryString, DateConstraint.Today); lnkToday2.ID = null; lnkFromTomorrow.NavigateUrl = string.Format("{0}?{1}&DC={2}", Request.GetRawPath(), queryString, DateConstraint.FromTomorrow); lnkFromTomorrow.ID = null; lnkUntilYesterday.NavigateUrl = string.Format("{0}?{1}&DC={2}", Request.GetRawPath(), queryString, DateConstraint.UntilYesterday); lnkUntilYesterday.ID = null; pager.PageSize = pageSize; quickParameters = new QuickParameters(); quickParameters.SortBy = QuickSort.StartDate; quickParameters.Direction = QuickSortDirection.Asc; quickParameters.FromNameValueCollection(Request.QueryString); quickParameters.PageSize = pageSize; quickParameters.Udc = UserDataContext.GetUserDataContext(); quickParameters.ShowState = ObjectShowState.Published; DateConstraint dateConstraint = (DateConstraint)Enum.Parse(typeof(DateConstraint), Request.QueryString["DC"] ?? "Today"); switch (dateConstraint) { case DateConstraint.UntilYesterday: quickParameters.FromStartDate = SqlDateTime.MinValue.Value; quickParameters.ToStartDate = DateTime.Today.GetEndOfDay() - new TimeSpan(1, 0, 0, 0); quickParameters.FromEndDate = SqlDateTime.MinValue.Value; quickParameters.ToEndDate = DateTime.Today.GetEndOfDay() - new TimeSpan(1, 0, 0, 0); quickParameters.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; quickParameters.Direction = QuickSortDirection.Desc; LitTitle.Text = language.GetString("TitleEvent" + DateConstraint.UntilYesterday); lnkToday1.Visible = true; lnkToday2.Visible = true; lnkFromTomorrow.Visible = true; break; case DateConstraint.Today: quickParameters.FromStartDate = SqlDateTime.MinValue.Value; quickParameters.ToStartDate = DateTime.Today.GetEndOfDay(); quickParameters.FromEndDate = DateTime.Today.GetStartOfDay(); quickParameters.ToEndDate = SqlDateTime.MaxValue.Value; quickParameters.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; if (quickParameters.Featured == 1 || !quickParameters.Featured.HasValue) { quickParameters.Featured = 1; LitTitle.Text = language.GetString("TitleEvent" + DateConstraint.Today); lnkToday2.Visible = true; } else { LitTitle.Text = language.GetString("TitleEventTodayMultiDay"); lnkToday1.Visible = true; } lnkUntilYesterday.Visible = true; lnkFromTomorrow.Visible = true; break; case DateConstraint.FromTomorrow: quickParameters.FromStartDate = DateTime.Today.GetStartOfDay() + new TimeSpan(1, 0, 0, 0); quickParameters.ToStartDate = SqlDateTime.MaxValue.Value; quickParameters.FromEndDate = DateTime.Today.GetStartOfDay() + new TimeSpan(1, 0, 0, 0); quickParameters.ToEndDate = SqlDateTime.MaxValue.Value; quickParameters.DateQueryMethode = QuickDateQueryMethode.BetweenStartRangeEndRange; LitTitle.Text = language.GetString("TitleEvent" + DateConstraint.FromTomorrow); lnkToday1.Visible = true; lnkToday2.Visible = true; lnkUntilYesterday.Visible = true; break; } currentPage = quickParameters.PageNumber; if (Request.IsAuthenticated) { lnkCreate.Visible = true; lnkCreate.NavigateUrl = "/M/Admin/EditEvent.aspx"; lnkCreate.ID = null; } Reload(); }