public async Task <DateTime> CreateNewSnapshotAsync(WGApiClient client) { var stats = client.GetPlayerTankStatsAsync(ID); var marks = client.GetPlayerMarksAsync(ID); await Task.WhenAll(stats, marks); var marksDict = marks.Result.ToDictionary(m => m.TankID, m => m.Mark); Func <int, int> tryGetMark = id => { if (marksDict.TryGetValue(id, out int mark)) { return(mark); } return(0); }; var newSnapshot = stats.Result.Select(s => new TankStatistics(s.TankID, s.Stats, tryGetMark(s.TankID))); DateTime now = DateTime.Now; if (false == AvailableDates.Any() || CreateIntermediateSnapshot(Load(AvailableDates.Max()), newSnapshot).Any()) { await SaveAsync(newSnapshot, now); return(now); } return(DateTime.MinValue); }
public bool IsDateAvailable(DateTime start, DateTime end) { if (!AvailableDates.Any(date => date.StartDate <= start && date.EndDate >= end)) { return(false); } foreach (var contract in Contracts) { if (start > contract.CheckIn && start < contract.CheckOut) { return(false); } if (end > contract.CheckIn && end < contract.CheckOut) { return(false); } if (start < contract.CheckIn && end > contract.CheckOut) { return(false); } } return(true); }