private async Task <bool> FarmCards(Game game) { if (game == null) { Bot.ArchiLogger.LogNullError(nameof(game)); return(false); } if (game.AppID != game.PlayableAppID) { Bot.ArchiLogger.LogGenericWarning(string.Format(Strings.WarningIdlingGameMismatch, game.AppID, game.GameName, game.PlayableAppID)); } await Bot.IdleGame(game).ConfigureAwait(false); bool success = true; DateTime endFarmingDate = DateTime.UtcNow.AddHours(Program.GlobalConfig.MaxFarmingTime); while ((DateTime.UtcNow < endFarmingDate) && (await ShouldFarm(game).ConfigureAwait(false)).GetValueOrDefault(true)) { Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StillIdling, game.AppID, game.GameName)); DateTime startFarmingPeriod = DateTime.UtcNow; if (await FarmingResetSemaphore.WaitAsync(Program.GlobalConfig.FarmingDelay * 60 * 1000 + ExtraFarmingDelaySeconds * 1000).ConfigureAwait(false)) { success = KeepFarming; } // Don't forget to update our GamesToFarm hours game.HoursPlayed += (float)DateTime.UtcNow.Subtract(startFarmingPeriod).TotalHours; if (!success) { break; } } Bot.ArchiLogger.LogGenericInfo(string.Format(Strings.StoppedIdling, game.AppID, game.GameName)); return(success); }