private IImageSupplier DetermineImageSupplier(BasicInfo basicInfo) { basicInfo.ThrowIfNull(nameof(basicInfo)); return(basicInfo switch { OmdbMovieInfo _ => new OmdbImageSupplier(), TmdbMovieInfo _ => new TmdbImageSupplier(TmdbServiceConfiguration.Configuration), SteamGameInfo _ => new SteamImageSupplier(), _ => throw new ArgumentOutOfRangeException(nameof(basicInfo), basicInfo, "Got unknown type to process.") });
/// <inheritdoc /> public override async Task <bool> GetResponse(BufferBlock <string> entitiesQueue, BufferBlock <BasicInfo> responsesQueue, bool outputResults) { // Use HashSet to avoid duplicated data which can produce errors in further work. var searchResults = new HashSet <BasicInfo>(); while (await entitiesQueue.OutputAvailableAsync()) { string movie = await entitiesQueue.ReceiveAsync(); Item response; try { response = await _omdbClient.GetItemByTitleAsync(movie); } catch (Exception ex) { _logger.Warn(ex, $"{movie} wasn't processed."); GlobalMessageHandler.OutputMessage($"{movie} wasn't processed."); continue; } if (!response.Response.IsEqualWithInvariantCulture("True")) { _logger.Warn($"{movie} wasn't processed."); GlobalMessageHandler.OutputMessage($"{movie} wasn't processed."); continue; } // Get first search result from response and ignore all the rest. if (outputResults) { GlobalMessageHandler.OutputMessage($"Got {response.Title} from {Tag}"); } OmdbMovieInfo extractedInfo = _dataMapper.Transform(response); if (searchResults.Add(extractedInfo)) { await responsesQueue.SendAsync(extractedInfo); } } return(searchResults.Count != 0); }
/// <inheritdoc /> public override List <BasicInfo> GetResponse(List <string> entities, bool outputResults) { // Use HashSet to avoid duplicated data which can produce errors in further work. var searchResults = new HashSet <BasicInfo>(); foreach (string movie in entities) { Item response; try { response = _omdbClient.GetItemByTitle(movie); } catch (Exception ex) { _logger.Warn(ex, $"{movie} wasn't processed."); GlobalMessageHandler.OutputMessage($"{movie} wasn't processed."); continue; } if (!response.Response.IsEqualWithInvariantCulture("True")) { _logger.Warn($"{movie} wasn't processed."); GlobalMessageHandler.OutputMessage($"{movie} wasn't processed."); continue; } // Get first search result from response and ignore all the rest. if (outputResults) { GlobalMessageHandler.OutputMessage($"Got {response.Title} from {Tag}"); } OmdbMovieInfo extractedInfo = _dataMapper.Transform(response); searchResults.Add(extractedInfo); } return(searchResults.ToList()); }