mirror of
https://github.com/Prowlarr/Prowlarr.git
synced 2025-09-17 17:14:18 +02:00
Fixed: Category parsing for some not-so-great Torznab feeds
MoreThanTv
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:torznab="http://torznab.com/schemas/2015/feed">
|
||||
<channel>
|
||||
<item>
|
||||
<title>Out of the Past 1947 720p BluRay FLAC2.0 x264-CtrlHD.mkv</title>
|
||||
<guid isPermaLink="true">https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836164</guid>
|
||||
<link>https://www.morethantv.me/torrents.php?action=download&id=(removed)&authkey=(removed)&torrent_pass=(removed)</link>
|
||||
<comments>https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836164</comments>
|
||||
<pubDate>Tue, 20 Dec 2022 21:32:17 +0000</pubDate>
|
||||
<size>5412993028</size>
|
||||
<files>1</files>
|
||||
<grabs>2</grabs>
|
||||
<category>2000</category>
|
||||
<category>2040</category>
|
||||
<description>A private eye escapes his past to run a gas station in a small town, but his past catches up with him. Now he must return to the big city world of danger, corruption, double crosses, and duplicitous dames.</description>
|
||||
<enclosure url="https://www.morethantv.me/torrents.php?action=download&id=(removed)&authkey=(removed)&torrent_pass=(removed)" length="103641" type="application/x-bittorrent" />
|
||||
<torznab:attr name="size" value="5412993028" />
|
||||
<torznab:attr name="poster" value="anon" />
|
||||
<torznab:attr name="seeders" value="3" />
|
||||
<torznab:attr name="leechers" value="0" />
|
||||
<torznab:attr name="peers" value="3" />
|
||||
<torznab:attr name="infohash" value="(removed)" />
|
||||
<torznab:attr name="downloadvolumefactor" value="1" />
|
||||
<torznab:attr name="uploadvolumefactor" value="1" />
|
||||
<torznab:attr name="tag" value="anonymous" />
|
||||
<torznab:attr name="imdb" value="0039689" />
|
||||
<torznab:attr name="imdbid" value="tt0039689" />
|
||||
</item>
|
||||
<item>
|
||||
<title>Out of the Past 1947 1080p USA Blu-ray AVC DTS-HD MA 2.0-PCH</title>
|
||||
<guid isPermaLink="true">https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836165</guid>
|
||||
<link>https://www.morethantv.me/torrents.php?action=download&id=(removed)&authkey=(removed)&torrent_pass=(removed)</link>
|
||||
<comments>https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836165</comments>
|
||||
<pubDate>Tue, 20 Dec 2022 21:47:40 +0000</pubDate>
|
||||
<size>30524085127</size>
|
||||
<files>78</files>
|
||||
<grabs>0</grabs>
|
||||
<category>2000</category>
|
||||
<category>2040</category>
|
||||
<description>A private eye escapes his past to run a gas station in a small town, but his past catches up with him. Now he must return to the big city world of danger, corruption, double crosses, and duplicitous dames.</description>
|
||||
<enclosure url="https://www.morethantv.me/torrents.php?action=download&id=(removed)&authkey=(removed)&torrent_pass=(removed)" length="150224" type="application/x-bittorrent" />
|
||||
<torznab:attr name="size" value="30524085127" />
|
||||
<torznab:attr name="poster" value="anon" />
|
||||
<torznab:attr name="seeders" value="1" />
|
||||
<torznab:attr name="leechers" value="0" />
|
||||
<torznab:attr name="peers" value="1" />
|
||||
<torznab:attr name="infohash" value="(removed)" />
|
||||
<torznab:attr name="downloadvolumefactor" value="1" />
|
||||
<torznab:attr name="uploadvolumefactor" value="1" />
|
||||
<torznab:attr name="tag" value="anonymous" />
|
||||
<torznab:attr name="imdb" value="0039689" />
|
||||
<torznab:attr name="imdbid" value="tt0039689" />
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
@@ -34,6 +34,10 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
};
|
||||
|
||||
_caps = new IndexerCapabilities();
|
||||
|
||||
_caps.Categories.AddCategoryMapping(2000, NewznabStandardCategory.Movies, "Movies");
|
||||
_caps.Categories.AddCategoryMapping(2040, NewznabStandardCategory.MoviesHD, "Movies/HD");
|
||||
|
||||
Mocker.GetMock<INewznabCapabilitiesProvider>()
|
||||
.Setup(v => v.GetCapabilities(It.IsAny<NewznabSettings>(), It.IsAny<IndexerDefinition>()))
|
||||
.Returns(_caps);
|
||||
@@ -129,6 +133,38 @@ namespace NzbDrone.Core.Test.IndexerTests.TorznabTests
|
||||
releaseInfo.Peers.Should().BeNull();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public async Task should_parse_recent_feed_from_torznab_morethantv()
|
||||
{
|
||||
var recentFeed = ReadAllText(@"Files/Indexers/Torznab/torznab_morethantv.xml");
|
||||
|
||||
Mocker.GetMock<IIndexerHttpClient>()
|
||||
.Setup(o => o.ExecuteProxiedAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get), Subject.Definition))
|
||||
.Returns<HttpRequest, IndexerDefinition>((r, d) => Task.FromResult(new HttpResponse(r, new HttpHeader(), new CookieCollection(), recentFeed)));
|
||||
|
||||
var releases = (await Subject.Fetch(new MovieSearchCriteria())).Releases;
|
||||
|
||||
releases.Should().HaveCount(2);
|
||||
|
||||
releases.First().Should().BeOfType<TorrentInfo>();
|
||||
var releaseInfo = releases.First() as TorrentInfo;
|
||||
|
||||
releaseInfo.Title.Should().Be("Out of the Past 1947 720p BluRay FLAC2.0 x264-CtrlHD.mkv");
|
||||
releaseInfo.DownloadProtocol.Should().Be(DownloadProtocol.Torrent);
|
||||
releaseInfo.DownloadUrl.Should().Be("https://www.morethantv.me/torrents.php?action=download&id=(removed)&authkey=(removed)&torrent_pass=(removed)");
|
||||
releaseInfo.InfoUrl.Should().Be("https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836164");
|
||||
releaseInfo.CommentUrl.Should().Be("https://www.morethantv.me/torrents.php?id=(removed)&torrentid=836164");
|
||||
releaseInfo.Indexer.Should().Be(Subject.Definition.Name);
|
||||
releaseInfo.PublishDate.Should().Be(DateTime.Parse("Tue, 20 Dec 2022 21:32:17 +0000").ToUniversalTime());
|
||||
releaseInfo.Size.Should().Be(5412993028);
|
||||
releaseInfo.TvdbId.Should().Be(0);
|
||||
releaseInfo.TvRageId.Should().Be(0);
|
||||
releaseInfo.InfoHash.Should().Be("(removed)");
|
||||
releaseInfo.Seeders.Should().Be(3);
|
||||
releaseInfo.Peers.Should().Be(3);
|
||||
releaseInfo.Categories.Count().Should().Be(4);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void should_use_pagesize_reported_by_caps()
|
||||
{
|
||||
|
@@ -127,6 +127,12 @@ namespace NzbDrone.Core.Indexers.Newznab
|
||||
var cats = TryGetMultipleNewznabAttributes(item, "category");
|
||||
var results = new List<IndexerCategory>();
|
||||
|
||||
// Try to find <category> elements for some indexers that suck at following the rules.
|
||||
if (results.Count == 0)
|
||||
{
|
||||
cats = item.Elements("category").Select(e => e.Value).ToList();
|
||||
}
|
||||
|
||||
foreach (var cat in cats)
|
||||
{
|
||||
var indexerCat = capabilities.Categories.MapTrackerCatToNewznab(cat);
|
||||
|
@@ -165,9 +165,15 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
protected override ICollection<IndexerCategory> GetCategory(XElement item)
|
||||
{
|
||||
var capabilities = _capabilitiesProvider.GetCapabilities(_settings, _definition);
|
||||
var cats = TryGetMultipleNewznabAttributes(item, "category");
|
||||
var cats = TryGetMultipleTorznabAttributes(item, "category");
|
||||
var results = new List<IndexerCategory>();
|
||||
|
||||
// Try to find <category> elements for some indexers that suck at following the rules.
|
||||
if (results.Count == 0)
|
||||
{
|
||||
cats = item.Elements("category").Select(e => e.Value).ToList();
|
||||
}
|
||||
|
||||
foreach (var cat in cats)
|
||||
{
|
||||
var indexerCat = capabilities.Categories.MapTrackerCatToNewznab(cat);
|
||||
@@ -265,7 +271,7 @@ namespace NzbDrone.Core.Indexers.Torznab
|
||||
return defaultValue;
|
||||
}
|
||||
|
||||
protected List<string> TryGetMultipleNewznabAttributes(XElement item, string key)
|
||||
protected List<string> TryGetMultipleTorznabAttributes(XElement item, string key)
|
||||
{
|
||||
var attrElements = item.Elements(ns + "attr").Where(e => e.Attribute("name").Value.Equals(key, StringComparison.OrdinalIgnoreCase));
|
||||
var results = new List<string>();
|
||||
|
Reference in New Issue
Block a user