mirror of
https://github.com/Radarr/Radarr.git
synced 2024-11-20 01:42:35 +01:00
New: Scene and Nuked IndexerFlags for Newznab indexers
(cherry picked from commit 278c7891a3add639b4ff5bc1f4f5e8912dabc897)
This commit is contained in:
parent
7528882adf
commit
6095819005
@ -0,0 +1,128 @@
|
||||
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:newznab="http://www.newznab.com/DTD/2010/feeds/attributes/">
|
||||
<channel>
|
||||
<title>somenewznabindexer.com</title>
|
||||
<description>somenewznabindexer.com Feed</description>
|
||||
<link>https://somenewznabindexer.com/</link>
|
||||
<language>en-gb</language>
|
||||
<webMaster>contact@somenewznabindexer.com</webMaster>
|
||||
<category/>
|
||||
<newznab:response offset="0" total="100"/>
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">no custom attributes</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">prematch=1 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="prematch" value="1"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">haspretime=1 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="haspretime" value="1"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">prematch=0 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="prematch" value="0"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">haspretime=0 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="haspretime" value="0"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">nuked=1 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="nuked" value="1"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">nuked=0 attribute</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="nuked" value="0"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">prematch=1 and nuked=1 attributes</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="prematch" value="1"/>
|
||||
<newznab:attr name="nuked" value="1"/>
|
||||
</item>
|
||||
|
||||
<item>
|
||||
<title>title</title>
|
||||
<guid isPermaLink="true">haspretime=0 and nuked=0 attributes</guid>
|
||||
<link>link</link>
|
||||
<comments>comments</comments>
|
||||
<pubDate>Sat, 31 Aug 2024 12:28:40 +0300</pubDate>
|
||||
<category>category</category>
|
||||
<description>description</description>
|
||||
<enclosure url="url" length="500" type="application/x-nzb"/>
|
||||
|
||||
<newznab:attr name="haspretime" value="0"/>
|
||||
<newznab:attr name="nuked" value="0"/>
|
||||
</item>
|
||||
|
||||
</channel>
|
||||
</rss>
|
@ -9,6 +9,7 @@
|
||||
using NzbDrone.Core.Indexers;
|
||||
using NzbDrone.Core.Indexers.Newznab;
|
||||
using NzbDrone.Core.Languages;
|
||||
using NzbDrone.Core.Parser.Model;
|
||||
using NzbDrone.Core.Test.Framework;
|
||||
|
||||
namespace NzbDrone.Core.Test.IndexerTests.NewznabTests
|
||||
@ -98,5 +99,29 @@ public async Task should_parse_languages()
|
||||
releases[1].Languages.Should().BeEquivalentTo(new[] { Language.English, Language.Spanish });
|
||||
releases[2].Languages.Should().BeEquivalentTo(new[] { Language.French });
|
||||
}
|
||||
|
||||
[TestCase("no custom attributes")]
|
||||
[TestCase("prematch=1 attribute", IndexerFlags.G_Scene)]
|
||||
[TestCase("haspretime=1 attribute", IndexerFlags.G_Scene)]
|
||||
[TestCase("prematch=0 attribute")]
|
||||
[TestCase("haspretime=0 attribute")]
|
||||
[TestCase("nuked=1 attribute", IndexerFlags.Nuked)]
|
||||
[TestCase("nuked=0 attribute")]
|
||||
[TestCase("prematch=1 and nuked=1 attributes", IndexerFlags.G_Scene, IndexerFlags.Nuked)]
|
||||
[TestCase("haspretime=0 and nuked=0 attributes")]
|
||||
public async Task should_parse_indexer_flags(string releaseGuid, params IndexerFlags[] indexerFlags)
|
||||
{
|
||||
var feed = ReadAllText(@"Files/Indexers/Newznab/newznab_indexerflags.xml");
|
||||
|
||||
Mocker.GetMock<IHttpClient>()
|
||||
.Setup(o => o.ExecuteAsync(It.Is<HttpRequest>(v => v.Method == HttpMethod.Get)))
|
||||
.Returns<HttpRequest>(r => Task.FromResult(new HttpResponse(r, new HttpHeader(), feed)));
|
||||
|
||||
var releases = await Subject.FetchRecent();
|
||||
|
||||
var release = releases.Should().ContainSingle(r => r.Guid == releaseGuid).Subject;
|
||||
|
||||
indexerFlags.ToList().ForEach(f => release.IndexerFlags.Should().HaveFlag(f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -92,6 +92,7 @@ protected override ReleaseInfo ProcessItem(XElement item, ReleaseInfo releaseInf
|
||||
{
|
||||
releaseInfo = base.ProcessItem(item, releaseInfo);
|
||||
releaseInfo.ImdbId = GetImdbId(item);
|
||||
releaseInfo.IndexerFlags = GetFlags(item);
|
||||
|
||||
return releaseInfo;
|
||||
}
|
||||
@ -209,6 +210,23 @@ protected virtual int GetImdbYear(XElement item)
|
||||
return 1900;
|
||||
}
|
||||
|
||||
protected IndexerFlags GetFlags(XElement item)
|
||||
{
|
||||
IndexerFlags flags = 0;
|
||||
|
||||
if (TryGetNewznabAttribute(item, "prematch") == "1" || TryGetNewznabAttribute(item, "haspretime") == "1")
|
||||
{
|
||||
flags |= IndexerFlags.G_Scene;
|
||||
}
|
||||
|
||||
if (TryGetNewznabAttribute(item, "nuked") == "1")
|
||||
{
|
||||
flags |= IndexerFlags.Nuked;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
protected string TryGetNewznabAttribute(XElement item, string key, string defaultValue = "")
|
||||
{
|
||||
var attrElement = item.Elements(ns + "attr").FirstOrDefault(e => e.Attribute("name").Value.Equals(key, StringComparison.OrdinalIgnoreCase));
|
||||
|
66
src/NzbDrone.Core/Parser/Model/IndexerFlags.cs
Normal file
66
src/NzbDrone.Core/Parser/Model/IndexerFlags.cs
Normal file
@ -0,0 +1,66 @@
|
||||
using System;
|
||||
|
||||
namespace NzbDrone.Core.Parser.Model
|
||||
{
|
||||
[Flags]
|
||||
public enum IndexerFlags
|
||||
{
|
||||
/// <summary>
|
||||
/// Torrent download amount does not count
|
||||
/// </summary>
|
||||
G_Freeleech = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent download amount only counts 50%
|
||||
/// </summary>
|
||||
G_Halfleech = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent upload amount is doubled
|
||||
/// </summary>
|
||||
G_DoubleUpload = 4,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent is a very high quality encode, as applied manually by the PTP staff
|
||||
/// </summary>
|
||||
PTP_Golden = 8,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent from PTP that has been checked (by staff or torrent checkers) for release description requirements
|
||||
/// </summary>
|
||||
PTP_Approved = 16,
|
||||
|
||||
/// <summary>
|
||||
/// Uploader is an internal release group
|
||||
/// </summary>
|
||||
G_Internal = 32,
|
||||
|
||||
// AHD, internal
|
||||
[Obsolete]
|
||||
AHD_Internal = 64,
|
||||
|
||||
/// <summary>
|
||||
/// The release comes from a scene group
|
||||
/// </summary>
|
||||
G_Scene = 128,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent download amount only counts 75%
|
||||
/// </summary>
|
||||
G_Freeleech75 = 256,
|
||||
|
||||
/// <summary>
|
||||
/// Torrent download amount only counts 25%
|
||||
/// </summary>
|
||||
G_Freeleech25 = 512,
|
||||
|
||||
// AHD, internal
|
||||
[Obsolete]
|
||||
AHD_UserRelease = 1024,
|
||||
|
||||
/// <summary>
|
||||
/// The release is nuked
|
||||
/// </summary>
|
||||
Nuked = 2048
|
||||
}
|
||||
}
|
@ -99,22 +99,4 @@ public virtual string ToString(string format)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Flags]
|
||||
public enum IndexerFlags
|
||||
{
|
||||
G_Freeleech = 1, // General
|
||||
G_Halfleech = 2, // General, only 1/2 of download counted
|
||||
G_DoubleUpload = 4, // General
|
||||
PTP_Golden = 8, // PTP
|
||||
PTP_Approved = 16, // PTP
|
||||
G_Internal = 32, // General, uploader is an internal release group
|
||||
[Obsolete]
|
||||
AHD_Internal = 64, // AHD, internal
|
||||
G_Scene = 128, // General, the torrent comes from a "scene" group
|
||||
G_Freeleech75 = 256, // Signifies a torrent counts towards 75 percent of your download quota.
|
||||
G_Freeleech25 = 512, // Signifies a torrent counts towards 25 percent of your download quota.
|
||||
[Obsolete]
|
||||
AHD_UserRelease = 1024 // AHD, internal
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user