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}"); } }