コード例 #1
0
        public async Task CheckForUpdate(DisplayedMetadata[] rows, string game, CancellationTokenSource cancellationToken)
        {
            try
            {
                // Check GameBanana Items
                DisplayedMetadata[] gameBananaRows = rows.Where(row => UrlConverter.Convert(row.link) == "GameBanana").ToArray();
                if (gameBananaRows.Length > 0)
                {
                    string gameBananaRequestUrl = "https://api.gamebanana.com/Core/Item/Data?";
                    // GameBanana
                    foreach (DisplayedMetadata row in gameBananaRows)
                    {
                        // Convert the url
                        Uri    uri      = CreateUri(row.link);
                        string itemType = uri.Segments[1];
                        itemType = char.ToUpper(itemType[0]) + itemType.Substring(1, itemType.Length - 3);
                        string itemId = uri.Segments[2];
                        gameBananaRequestUrl += $"itemtype[]={itemType}&itemid[]={itemId}&fields[]=Updates().bSubmissionHasUpdates(),Updates().aGetLatestUpdates(),Files().aFiles()&";
                    }
                    gameBananaRequestUrl += "return_keys=1";
                    // Parse the response
                    string responseString = await client.GetStringAsync(gameBananaRequestUrl);

                    responseString = responseString.Replace("\"Files().aFiles()\": []", "\"Files().aFiles()\": {}");
                    GameBananaItem[] response = JsonConvert.DeserializeObject <GameBananaItem[]>(responseString);
                    if (response == null)
                    {
                        Console.WriteLine("[ERROR] Error whilst checking for package updates: No response from GameBanana API");
                    }
                    else
                    {
                        for (int i = 0; i < gameBananaRows.Length; i++)
                        {
                            try
                            {
                                await GameBananaUpdate(response[i], gameBananaRows[i], game, new Progress <DownloadProgress>(ReportUpdateProgress), CancellationTokenSource.CreateLinkedTokenSource(cancellationToken.Token));
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine($"[ERROR] Error whilst updating/checking for updates for {gameBananaRows[i].name}: {e.Message}");
                            }
                        }
                    }
                }
                // Check GitHub Items
                DisplayedMetadata[] gitHubRows = rows.Where(row => UrlConverter.Convert(row.link) == "GitHub").ToArray();
                if (gitHubRows.Length > 0)
                {
                    foreach (DisplayedMetadata row in gitHubRows)
                    {
                        try
                        {
                            Uri     uri           = CreateUri(row.link);
                            Release latestRelease = await gitHubClient.Repository.Release.GetLatest(uri.Segments[1].Replace("/", ""), uri.Segments[2].Replace("/", ""));
                            await GitHubUpdate(latestRelease, row, game, new Progress <DownloadProgress>(ReportUpdateProgress), cancellationToken);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine($"[ERROR] Error whilst updating/checking for updates for {row.name}: {e.Message}");
                        }
                    }
                }
            }
            catch (HttpRequestException e)
            {
                Console.WriteLine($"[ERROR] Connection error whilst checking for updates: {e.Message}");
            }
            catch (Exception e)
            {
                Console.WriteLine($"[ERROR] Error whilst checking for updates: {e.Message}");
            }
        }