public async Task<IEnumerable<Game>> SearchForAllGamesAsync(string query, string[] limitFields = null) {
var results = new List<Game>();
var result = await InternalSearchForGames(query, limitFields: limitFields).ConfigureAwait(false);
if (result == null || result.StatusCode != GiantBombBase.StatusOk)
return null;
results.AddRange(result.Results);
if (result.NumberOfTotalResults > result.Limit) {
double remaining = Math.Ceiling(Convert.ToDouble(result.NumberOfTotalResults) / Convert.ToDouble(result.Limit));
// Start on page 2
for (var i = 2; i <= remaining; i++) {
result = await InternalSearchForGames(query, i, result.Limit, limitFields).ConfigureAwait(false);
if (result.StatusCode != GiantBombBase.StatusOk)
break;
results.AddRange(result.Results);
}
}
// FIX: Clean duplicates that GiantBomb returns
// Can only do it if we have IDs in the resultset
if (limitFields == null || limitFields.Contains("id"))
{
results = results.Distinct(new GameDistinctComparer()).ToList();
}
return results;
}