private object WorkDay(HttpListenerContext context, string path) { var parameters = this.QueryParser(context.Request.Url.Query); if (!parameters.TryGetValue("date", out var dateString) || !DateTime.TryParse(dateString, out var day)) { context.Response.StatusCode = 400; return(new { status = "Bad Request: parameter 'date' was missing or malformed" }); } int blur = 35; if (parameters.TryGetValue("blur", out string blurValue)) { if (byte.TryParse(blurValue, out byte blurParam)) { blur = blurParam; } else { context.Response.StatusCode = 400; return(new { status = "Bad Request: parameter 'blur' was malformed" }); } } var acts = ActivityManager.GetSharedMonthActivities((short)day.Year, (byte)day.Month, "*", blur); var dayActs = acts.Values.Where(x => x.Days.ContainsKey((byte)day.Day)).Select(x => x.Days[(byte)day.Day]).ToList(); var xx = dayActs.SelectMany(x => x.RangesWhere(y => y.WasActive && y.Classification == WorkPlayType.Work)); var combined = RangeContainer.UintRangeContainer(); combined.Add(xx); var totalTime = SecondToTime((uint)combined.Sum(x => x.End - x.Start + 1)); return(new { date = day.ToString("yyyy-MM-dd"), totalTime, dayNumber = day.Day, work = combined.Select(x => new[] { SecondToTime(x.Start), SecondToTime(x.End) }) }); }