Exemplo n.º 1
0
        public async Task LoadGames()
        {
            Library.Games.Clear();

            string profileLink = $"{Url}/badges";
            int    totalPages  = 1;
            int    currentPage = 0;

            do
            {
                currentPage++;

                string response = await UserWebClient.GetHttp($"{profileLink}?p={currentPage}");

                HtmlDocument document = new HtmlDocument();
                document.LoadHtml(response);

                if (!ProcessBadgesOnPage(document))
                {
                    break;
                }

                if (currentPage != 1)
                {
                    continue;
                }

                HtmlNodeCollection pages = document.DocumentNode.SelectNodes("//a[@class='pagelink']");

                string href     = pages?.Last().Attributes["href"]?.Value;
                string maxPages = href?.Split('=').Last();
                int.TryParse(maxPages, out totalPages);
            }while (currentPage < totalPages);
        }
Exemplo n.º 2
0
        public async Task CheckIdlingStatus(GameStatus gameStatus)
        {
            if (!IsIdling)
            {
                return;
            }

            foreach (Game game in Games.Where(x => x.Status == gameStatus))
            {
                HtmlDocument document = new HtmlDocument();
                string       response = await UserWebClient.GetHttp($"{UserSettings.ProfileUrl}/gamecards/{game.AppId}");

                document.LoadHtml(response);

                HtmlNode cardsNode = document.DocumentNode.SelectSingleNode(".//span[@class='progress_info_bold']");
                string   cards     = cardsNode?.InnerText.Split(' ').First();

                HtmlNode playtimeNode = document.DocumentNode.SelectSingleNode(".//div[@class='badge_title_stats_playtime']");
                string   playtime     = WebUtility.HtmlDecode(playtimeNode?.InnerText).Trim().Split(' ').First();

                int.TryParse(cards, out int remainingCards);
                double.TryParse(playtime, NumberStyles.Any, new NumberFormatInfo(), out double hoursPlayed);

                game.UpdateStats(remainingCards, hoursPlayed);

                if (!game.HasDrops)
                {
                    game.StopIdling();
                    game.Status = GameStatus.Finished;
                    continue;
                }

                if (game.Status == GameStatus.FastIdling && game.FastIdleTries > 0)
                {
                    game.FastIdleTries--;

                    if (game.FastIdleTries == 0 && game.RemainingCards == game.OriginalRemainingCards)
                    {
                        game.Status = GameStatus.NormalIdling;
                    }
                }
            }

            if (Games.All(x => x.Status == GameStatus.Stopped || x.Status == GameStatus.Finished))
            {
                IsIdling = false;
                IsPaused = false;
            }
        }