private TorrentRssIndexerParserSettings GetGenericTorrentRssParserSettings(IndexerResponse response, TorrentRssIndexerSettings indexerSettings) { var parser = new TorrentRssParser { UseEnclosureUrl = true, UseEnclosureLength = true, ParseSeedersInDescription = true }; var item = parser.GetItems(response).FirstOrDefault(); if (item == null) { throw new UnsupportedFeedException("Empty feed, cannot check if feed is parsable."); } var settings = new TorrentRssIndexerParserSettings() { UseEnclosureUrl = true, UseEnclosureLength = true, ParseSeedersInDescription = true }; if (item.Element("enclosure") == null) { parser.UseEnclosureUrl = settings.UseEnclosureUrl = false; } var releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (!releases.Any(v => v.Seeders.HasValue)) { _logger.Trace("Feed doesn't have Seeders in Description, disabling option."); parser.ParseSeedersInDescription = settings.ParseSeedersInDescription = false; } if (!releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Trace("Feed has valid size in enclosure."); return(settings); } parser.UseEnclosureLength = settings.UseEnclosureLength = false; foreach (var sizeElementName in new[] { "size", "Size" }) { parser.SizeElementName = settings.SizeElementName = sizeElementName; releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (!releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Trace("Feed has valid size in Size element."); return(settings); } } parser.SizeElementName = settings.SizeElementName = null; parser.ParseSizeInDescription = settings.ParseSizeInDescription = true; releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (releases.Count(r => r.Size >= ValidSizeThreshold) > releases.Count() / 2) { if (releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Debug("Feed {0} contains very small releases.", response.Request.Url); } _logger.Trace("Feed has valid size in description."); return(settings); } parser.ParseSizeInDescription = settings.ParseSizeInDescription = false; _logger.Debug("Feed doesn't have release size."); releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); ValidateReleaseSize(releases, indexerSettings); return(settings); }
private TorrentRssIndexerParserSettings GetGenericTorrentRssParserSettings(IndexerResponse response, TorrentRssIndexerSettings indexerSettings) { var parser = new TorrentRssParser { UseEnclosureUrl = true, UseEnclosureLength = true, ParseSeedersInDescription = true }; var item = parser.GetItems(response).FirstOrDefault(); if (item == null) { throw new UnsupportedFeedException("Empty feed, cannot check if feed is parsable."); } var settings = new TorrentRssIndexerParserSettings() { UseEnclosureUrl = true, UseEnclosureLength = true, ParseSeedersInDescription = true }; if (item.Element("enclosure") == null) { parser.UseEnclosureUrl = settings.UseEnclosureUrl = false; } var releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (!releases.Any(v => v.Seeders.HasValue)) { _logger.Trace("Feed doesn't have Seeders in Description, disabling option."); parser.ParseSeedersInDescription = settings.ParseSeedersInDescription = false; } if (!releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Trace("Feed has valid size in enclosure."); return settings; } parser.UseEnclosureLength = settings.UseEnclosureLength = false; foreach (var sizeElementName in new[] { "size", "Size" }) { parser.SizeElementName = settings.SizeElementName = sizeElementName; releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (!releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Trace("Feed has valid size in Size element."); return settings; } } parser.SizeElementName = settings.SizeElementName = null; parser.ParseSizeInDescription = settings.ParseSizeInDescription = true; releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); if (releases.Count(r => r.Size >= ValidSizeThreshold) > releases.Count() / 2) { if (releases.Any(r => r.Size < ValidSizeThreshold)) { _logger.Debug("Feed {0} contains very small releases.", response.Request.Url); } _logger.Trace("Feed has valid size in description."); return settings; } parser.ParseSizeInDescription = settings.ParseSizeInDescription = false; _logger.Debug("Feed doesn't have release size."); releases = ParseResponse(parser, response); ValidateReleases(releases, indexerSettings); ValidateReleaseSize(releases, indexerSettings); return settings; }