From d5b085864c6fc9295775e53190daf0acd25231a1 Mon Sep 17 00:00:00 2001 From: JustArchi Date: Sun, 2 Jul 2017 10:00:02 +0200 Subject: [PATCH] Add random FarmingOrder + misc --- ArchiSteamFarm/BotConfig.cs | 3 ++- ArchiSteamFarm/CardsFarmer.cs | 27 ++++++++++++++++++++------- ArchiSteamFarm/Utilities.cs | 8 +++++++- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/ArchiSteamFarm/BotConfig.cs b/ArchiSteamFarm/BotConfig.cs index f92ddcf3c..76872ac51 100644 --- a/ArchiSteamFarm/BotConfig.cs +++ b/ArchiSteamFarm/BotConfig.cs @@ -211,7 +211,8 @@ namespace ArchiSteamFarm { HoursAscending, HoursDescending, NamesAscending, - NamesDescending + NamesDescending, + Random } internal enum EPermission : byte { diff --git a/ArchiSteamFarm/CardsFarmer.cs b/ArchiSteamFarm/CardsFarmer.cs index a41ed4cb5..409a8d868 100755 --- a/ArchiSteamFarm/CardsFarmer.cs +++ b/ArchiSteamFarm/CardsFarmer.cs @@ -188,7 +188,12 @@ namespace ArchiSteamFarm { return; } - if (!await IsAnythingToFarm().ConfigureAwait(false)) { + bool? isAnythingToFarm = await IsAnythingToFarm().ConfigureAwait(false); + if (isAnythingToFarm == null) { + return; + } + + if (!isAnythingToFarm.Value) { Bot.ArchiLogger.LogGenericInfo(Strings.NothingToIdle); await Bot.OnFarmingFinished(false).ConfigureAwait(false); return; @@ -543,7 +548,7 @@ namespace ArchiSteamFarm { return; } } - } while (await IsAnythingToFarm().ConfigureAwait(false)); + } while ((await IsAnythingToFarm().ConfigureAwait(false)).GetValueOrDefault()); CurrentGamesFarming.ClearAndTrim(); NowFarming = false; @@ -713,13 +718,13 @@ namespace ArchiSteamFarm { return null; } - private async Task IsAnythingToFarm() { + private async Task IsAnythingToFarm() { // Find the number of badge pages Bot.ArchiLogger.LogGenericInfo(Strings.CheckingFirstBadgePage); HtmlDocument htmlDocument = await Bot.ArchiWebHandler.GetBadgePage(1).ConfigureAwait(false); if (htmlDocument == null) { Bot.ArchiLogger.LogGenericWarning(Strings.WarningCouldNotCheckBadges); - return false; + return null; } byte maxPages = 1; @@ -729,12 +734,12 @@ namespace ArchiSteamFarm { string lastPage = htmlNode.InnerText; if (string.IsNullOrEmpty(lastPage)) { Bot.ArchiLogger.LogNullError(nameof(lastPage)); - return false; + return null; } if (!byte.TryParse(lastPage, out maxPages) || (maxPages == 0)) { Bot.ArchiLogger.LogNullError(nameof(maxPages)); - return false; + return null; } } @@ -777,8 +782,12 @@ namespace ArchiSteamFarm { await Task.WhenAll(tasks).ConfigureAwait(false); } + if (GamesToFarm.Count == 0) { + return false; + } + SortGamesToFarm(); - return GamesToFarm.Count > 0; + return true; } private async Task ShouldFarm(Game game) { @@ -801,6 +810,7 @@ namespace ArchiSteamFarm { private void SortGamesToFarm() { IOrderedEnumerable gamesToFarm; + switch (Bot.BotConfig.FarmingOrder) { case BotConfig.EFarmingOrder.Unordered: return; @@ -828,6 +838,9 @@ namespace ArchiSteamFarm { case BotConfig.EFarmingOrder.NamesDescending: gamesToFarm = GamesToFarm.OrderByDescending(game => game.GameName); break; + case BotConfig.EFarmingOrder.Random: + gamesToFarm = GamesToFarm.OrderBy(game => Utilities.RandomNext()); + break; default: Bot.ArchiLogger.LogGenericError(string.Format(Strings.ErrorIsInvalid, nameof(Bot.BotConfig.FarmingOrder))); return; diff --git a/ArchiSteamFarm/Utilities.cs b/ArchiSteamFarm/Utilities.cs index d82e8e951..d954b9083 100644 --- a/ArchiSteamFarm/Utilities.cs +++ b/ArchiSteamFarm/Utilities.cs @@ -34,7 +34,7 @@ using Humanizer; namespace ArchiSteamFarm { internal static class Utilities { - //private static readonly Random Random = new Random(); + private static readonly Random Random = new Random(); [MethodImpl(MethodImplOptions.AggressiveInlining)] [SuppressMessage("ReSharper", "UnusedParameter.Global")] @@ -105,6 +105,12 @@ namespace ArchiSteamFarm { return true; } + internal static int RandomNext() { + lock (Random) { + return Random.Next(); + } + } + internal static IEnumerable ToEnumerable(this T item) { yield return item; }