mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Add indexer: Immortalseed. Add category mapping framework.
This commit is contained in:
@@ -158,20 +158,20 @@ namespace JackettTest.Indexers
|
|||||||
indexer.LoadFromSavedConfiguration(JObject.Parse("{\"cookies\":\"bbtid=c\"}"));
|
indexer.LoadFromSavedConfiguration(JObject.Parse("{\"cookies\":\"bbtid=c\"}"));
|
||||||
var results = await indexer.PerformQuery(new Jackett.Models.TorznabQuery() { SanitizedSearchTerm = "Series S1", Season = 1 });
|
var results = await indexer.PerformQuery(new Jackett.Models.TorznabQuery() { SanitizedSearchTerm = "Series S1", Season = 1 });
|
||||||
|
|
||||||
results.Length.Should().Be(44);
|
results.Count().Should().Be(44);
|
||||||
results[0].Title.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
|
results.First().Title.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
|
||||||
results[0].Guid.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
results.First().Guid.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
||||||
results[0].Comments.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
results.First().Comments.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
||||||
results[0].Size.Should().Be(10307921920);
|
results.First().Size.Should().Be(10307921920);
|
||||||
results[0].Description.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
|
results.First().Description.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
|
||||||
results[0].Link.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
results.First().Link.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
|
||||||
results[0].Peers.Should().Be(161);
|
results.First().Peers.Should().Be(161);
|
||||||
results[0].Seeders.Should().Be(151);
|
results.First().Seeders.Should().Be(151);
|
||||||
results[0].MinimumRatio.Should().Be(1);
|
results.First().MinimumRatio.Should().Be(1);
|
||||||
|
|
||||||
results[1].Title.Should().Be("Yowamushi Pedal Season 1 (BD 720p) [Commie]");
|
results.ElementAt(1).Title.Should().Be("Yowamushi Pedal Season 1 (BD 720p) [Commie]");
|
||||||
results[4].Title.Should().Be("Dungeon ni Deai o Motomeru no wa Machigatte Iru Darouka: Familia Myth Season 1 (480p) [HorribleSubs]");
|
results.ElementAt(4).Title.Should().Be("Dungeon ni Deai o Motomeru no wa Machigatte Iru Darouka: Familia Myth Season 1 (480p) [HorribleSubs]");
|
||||||
results[5].Title.Should().Be("Is It Wrong to Try to Pick Up Girls in a Dungeon? Season 1 (480p) [HorribleSubs]");
|
results.ElementAt(5).Title.Should().Be("Is It Wrong to Try to Pick Up Girls in a Dungeon? Season 1 (480p) [HorribleSubs]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -38,6 +38,7 @@
|
|||||||
<th>First Seen</th>
|
<th>First Seen</th>
|
||||||
<th>Tracker</th>
|
<th>Tracker</th>
|
||||||
<th>Name</th>
|
<th>Name</th>
|
||||||
|
<th>Category</th>
|
||||||
<th>Seeds</th>
|
<th>Seeds</th>
|
||||||
<th>Leechers</th>
|
<th>Leechers</th>
|
||||||
<th>Download</th>
|
<th>Download</th>
|
||||||
@@ -52,6 +53,7 @@
|
|||||||
<td>{{formatRelative FirstSeen}}</td>
|
<td>{{formatRelative FirstSeen}}</td>
|
||||||
<td>{{Tracker}}</td>
|
<td>{{Tracker}}</td>
|
||||||
<td><a href="{{Comments}}">{{Title}}</a></td>
|
<td><a href="{{Comments}}">{{Title}}</a></td>
|
||||||
|
<td>{{CategoryDesc}}</td>
|
||||||
<td>{{Seeders}}</td>
|
<td>{{Seeders}}</td>
|
||||||
<td>{{Peers}}</td>
|
<td>{{Peers}}</td>
|
||||||
<td><a href="{{Link}}"><i class="fa fa-download"></i></a></td>
|
<td><a href="{{Link}}"><i class="fa fa-download"></i></a></td>
|
||||||
|
BIN
src/Jackett/Content/logos/immortalseed.png
Normal file
BIN
src/Jackett/Content/logos/immortalseed.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.2 KiB |
@@ -69,14 +69,16 @@ namespace Jackett.Controllers
|
|||||||
cacheService.CacheRssResults(indexer.DisplayName, releases);
|
cacheService.CacheRssResults(indexer.DisplayName, releases);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
releases = indexer.FilterResults(torznabQuery, releases);
|
||||||
|
|
||||||
// Log info
|
// Log info
|
||||||
if (string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
|
if (string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
|
||||||
{
|
{
|
||||||
logger.Info(string.Format("Found {0} releases from {1}", releases.Length, indexer.DisplayName));
|
logger.Info(string.Format("Found {0} releases from {1}", releases.Count(), indexer.DisplayName));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
logger.Info(string.Format("Found {0} releases from {1} for: {2}", releases.Length, indexer.DisplayName, torznabQuery.SanitizedSearchTerm));
|
logger.Info(string.Format("Found {0} releases from {1} for: {2}", releases.Count(), indexer.DisplayName, torznabQuery.SanitizedSearchTerm));
|
||||||
}
|
}
|
||||||
|
|
||||||
var severUrl = string.Format("{0}://{1}:{2}/", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port);
|
var severUrl = string.Format("{0}://{1}:{2}/", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port);
|
||||||
|
@@ -74,7 +74,7 @@ namespace Jackett.Indexers
|
|||||||
release.Link = new Uri(DownloadUrl + id);
|
release.Link = new Uri(DownloadUrl + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -122,7 +122,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DateTime UnixTimestampToDateTime(double unixTime)
|
static DateTime UnixTimestampToDateTime(double unixTime)
|
||||||
|
@@ -33,7 +33,7 @@ namespace Jackett.Indexers
|
|||||||
description: "Powered by Tentacles",
|
description: "Powered by Tentacles",
|
||||||
manager: i,
|
manager: i,
|
||||||
client: client,
|
client: client,
|
||||||
caps: new TorznabCapabilities(TorznabCategory.Anime),
|
caps: new TorznabCapabilities(TorznabCatType.Anime),
|
||||||
logger: l)
|
logger: l)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -114,7 +114,7 @@ namespace Jackett.Indexers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
// The result list
|
// The result list
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
@@ -127,7 +127,7 @@ namespace Jackett.Indexers
|
|||||||
return releases.ToArray();
|
return releases.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> GetResults(string searchTerm)
|
public async Task<IEnumerable<ReleaseInfo>> GetResults(string searchTerm)
|
||||||
{
|
{
|
||||||
// This tracker only deals with full seasons so chop off the episode/season number if we have it D:
|
// This tracker only deals with full seasons so chop off the episode/season number if we have it D:
|
||||||
if (!string.IsNullOrWhiteSpace(searchTerm))
|
if (!string.IsNullOrWhiteSpace(searchTerm))
|
||||||
@@ -327,7 +327,7 @@ namespace Jackett.Indexers
|
|||||||
cache.Add(new CachedQueryResult(searchTerm, releases));
|
cache.Add(new CachedQueryResult(searchTerm, releases));
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.Select(s => (ReleaseInfo)s.Clone()).ToArray();
|
return releases.Select(s => (ReleaseInfo)s.Clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -68,7 +68,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ namespace Jackett.Indexers
|
|||||||
: base(name: "BakaBT",
|
: base(name: "BakaBT",
|
||||||
description: "Anime Community",
|
description: "Anime Community",
|
||||||
link: "http://bakabt.me/",
|
link: "http://bakabt.me/",
|
||||||
caps: new TorznabCapabilities(TorznabCategory.Anime),
|
caps: new TorznabCapabilities(TorznabCatType.Anime),
|
||||||
manager: i,
|
manager: i,
|
||||||
client: wc,
|
client: wc,
|
||||||
logger: l)
|
logger: l)
|
||||||
@@ -65,7 +65,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
|
|
||||||
// This tracker only deals with full seasons so chop off the episode/season number if we have it D:
|
// This tracker only deals with full seasons so chop off the episode/season number if we have it D:
|
||||||
@@ -170,7 +170,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<byte[]> Download(Uri link)
|
public override async Task<byte[]> Download(Uri link)
|
||||||
|
@@ -29,6 +29,8 @@ namespace Jackett.Indexers
|
|||||||
protected IWebClient webclient;
|
protected IWebClient webclient;
|
||||||
protected string cookieHeader = "";
|
protected string cookieHeader = "";
|
||||||
|
|
||||||
|
private List<CategoryMapping> categoryMapping = new List<CategoryMapping>();
|
||||||
|
|
||||||
public BaseIndexer(string name, string link, string description, IIndexerManagerService manager, IWebClient client, Logger logger, TorznabCapabilities caps = null)
|
public BaseIndexer(string name, string link, string description, IIndexerManagerService manager, IWebClient client, Logger logger, TorznabCapabilities caps = null)
|
||||||
{
|
{
|
||||||
if (!link.EndsWith("/"))
|
if (!link.EndsWith("/"))
|
||||||
@@ -46,6 +48,19 @@ namespace Jackett.Indexers
|
|||||||
TorznabCaps = caps;
|
TorznabCaps = caps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int MapTrackerCatToNewznab(string input)
|
||||||
|
{
|
||||||
|
if (null != input) {
|
||||||
|
input = input.ToLowerInvariant();
|
||||||
|
var mapping = categoryMapping.Where(m => m.TrackerCategory == input).FirstOrDefault();
|
||||||
|
if(mapping!= null)
|
||||||
|
{
|
||||||
|
return mapping.NewzNabCategory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
public static string GetIndexerID(Type type)
|
public static string GetIndexerID(Type type)
|
||||||
{
|
{
|
||||||
return StringUtil.StripNonAlphaNumeric(type.Name.ToLowerInvariant());
|
return StringUtil.StripNonAlphaNumeric(type.Name.ToLowerInvariant());
|
||||||
@@ -239,5 +254,40 @@ namespace Jackett.Indexers
|
|||||||
onError();
|
onError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public virtual IEnumerable<ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable<ReleaseInfo> results)
|
||||||
|
{
|
||||||
|
foreach(var result in results)
|
||||||
|
{
|
||||||
|
if(query.Categories.Length == 0 || query.Categories.Contains(result.Category) || result.Category == 0 || TorznabCatType.QueryContainsParentCategory(query.Categories, result.Category))
|
||||||
|
{
|
||||||
|
yield return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void AddCategoryMapping(string trackerCategory, int newznabCategory)
|
||||||
|
{
|
||||||
|
categoryMapping.Add(new CategoryMapping(trackerCategory, newznabCategory));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void AddCategoryMapping(int trackerCategory, TorznabCategory newznabCategory)
|
||||||
|
{
|
||||||
|
categoryMapping.Add(new CategoryMapping(trackerCategory.ToString(), newznabCategory.ID));
|
||||||
|
if (!TorznabCaps.Categories.Contains(newznabCategory))
|
||||||
|
TorznabCaps.Categories.Add(newznabCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void AddCategoryMapping(string trackerCategory, TorznabCategory newznabCategory)
|
||||||
|
{
|
||||||
|
categoryMapping.Add(new CategoryMapping(trackerCategory.ToString(), newznabCategory.ID));
|
||||||
|
if (!TorznabCaps.Categories.Contains(newznabCategory))
|
||||||
|
TorznabCaps.Categories.Add(newznabCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void AddCategoryMapping(int trackerCategory, int newznabCategory)
|
||||||
|
{
|
||||||
|
categoryMapping.Add(new CategoryMapping(trackerCategory.ToString(), newznabCategory));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -56,7 +56,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -61,10 +61,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
|
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
|
||||||
var results = await RequestStringWithCookies(episodeSearchUrl);
|
var results = await RequestStringWithCookies(episodeSearchUrl);
|
||||||
@@ -107,7 +106,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -74,10 +74,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
var results = await RequestStringWithCookies(episodeSearchUrl);
|
var results = await RequestStringWithCookies(episodeSearchUrl);
|
||||||
@@ -129,7 +128,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -65,10 +65,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
string episodeSearchUrl;
|
string episodeSearchUrl;
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(query.SanitizedSearchTerm))
|
if (string.IsNullOrEmpty(query.SanitizedSearchTerm))
|
||||||
@@ -125,7 +124,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -62,10 +62,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
var response = await RequestStringWithCookies(episodeSearchUrl);
|
var response = await RequestStringWithCookies(episodeSearchUrl);
|
||||||
@@ -117,7 +116,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results, ex);
|
OnParseError(results, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -59,11 +59,10 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchurls = new List<string>();
|
var searchurls = new List<string>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var searchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString.Trim()));
|
var searchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString.Trim()));
|
||||||
var results = await RequestStringWithCookies(searchUrl);
|
var results = await RequestStringWithCookies(searchUrl);
|
||||||
@@ -132,7 +131,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,9 @@ namespace Jackett.Indexers
|
|||||||
// Called on startup when initializing indexers from saved configuration
|
// Called on startup when initializing indexers from saved configuration
|
||||||
void LoadFromSavedConfiguration(JToken jsonConfig);
|
void LoadFromSavedConfiguration(JToken jsonConfig);
|
||||||
|
|
||||||
Task<ReleaseInfo[]> PerformQuery(TorznabQuery query);
|
Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query);
|
||||||
|
|
||||||
|
IEnumerable<ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable<ReleaseInfo> input);
|
||||||
|
|
||||||
Task<byte[]> Download(Uri link);
|
Task<byte[]> Download(Uri link);
|
||||||
}
|
}
|
||||||
|
@@ -30,7 +30,7 @@ namespace Jackett.Indexers
|
|||||||
client: wc,
|
client: wc,
|
||||||
logger: l)
|
logger: l)
|
||||||
{
|
{
|
||||||
TorznabCaps.Categories.Add(new TorznabCategory { ID = "5070", Name = "TV/Anime" });
|
TorznabCaps.Categories.Add(TorznabCatType.Anime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<ConfigurationData> GetConfigurationForSetup()
|
public Task<ConfigurationData> GetConfigurationForSetup()
|
||||||
@@ -67,7 +67,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -134,7 +134,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results, ex);
|
OnParseError(results, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
156
src/Jackett/Indexers/ImmortalSeed.cs
Normal file
156
src/Jackett/Indexers/ImmortalSeed.cs
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
using CsQuery;
|
||||||
|
using Jackett.Models;
|
||||||
|
using Jackett.Services;
|
||||||
|
using Jackett.Utils;
|
||||||
|
using Jackett.Utils.Clients;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
|
using NLog;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
|
namespace Jackett.Indexers
|
||||||
|
{
|
||||||
|
public class ImmortalSeed : BaseIndexer, IIndexer
|
||||||
|
{
|
||||||
|
private string BrowsePage { get { return SiteLink + "browse.php"; } }
|
||||||
|
private string LoginUrl { get { return SiteLink + "takelogin.php"; } }
|
||||||
|
private string QueryString { get { return "?do=search&keywords={0}&search_type=t_name&category=0&include_dead_torrents=no"; } }
|
||||||
|
|
||||||
|
public ImmortalSeed(IIndexerManagerService i, IWebClient wc, Logger l)
|
||||||
|
: base(name: "ImmortalSeed",
|
||||||
|
description: "ImmortalSeed",
|
||||||
|
link: "http://immortalseed.me/",
|
||||||
|
caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(),
|
||||||
|
manager: i,
|
||||||
|
client: wc,
|
||||||
|
logger: l)
|
||||||
|
{
|
||||||
|
AddCategoryMapping(32, TorznabCatType.Anime);
|
||||||
|
AddCategoryMapping(47, TorznabCatType.TVSD);
|
||||||
|
AddCategoryMapping(8, TorznabCatType.TVHD);
|
||||||
|
AddCategoryMapping(48, TorznabCatType.TVHD);
|
||||||
|
AddCategoryMapping(9, TorznabCatType.TVSD);
|
||||||
|
AddCategoryMapping(4, TorznabCatType.TVHD);
|
||||||
|
AddCategoryMapping(6, TorznabCatType.TVSD);
|
||||||
|
|
||||||
|
AddCategoryMapping(22, TorznabCatType.Books);
|
||||||
|
AddCategoryMapping(41, TorznabCatType.Comic);
|
||||||
|
AddCategoryMapping(23, TorznabCatType.Apps);
|
||||||
|
|
||||||
|
AddCategoryMapping(16, TorznabCatType.MoviesHD);
|
||||||
|
AddCategoryMapping(17, TorznabCatType.MoviesSD);
|
||||||
|
AddCategoryMapping(14, TorznabCatType.MoviesSD);
|
||||||
|
AddCategoryMapping(34, TorznabCatType.MoviesForeign);
|
||||||
|
AddCategoryMapping(18, TorznabCatType.MoviesForeign);
|
||||||
|
AddCategoryMapping(33, TorznabCatType.MoviesForeign);
|
||||||
|
|
||||||
|
AddCategoryMapping(34, TorznabCatType.Audio);
|
||||||
|
AddCategoryMapping(37, TorznabCatType.AudioLossless);
|
||||||
|
AddCategoryMapping(35, TorznabCatType.AudioBooks);
|
||||||
|
AddCategoryMapping(36, TorznabCatType.AudioLossy);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<ConfigurationData> GetConfigurationForSetup()
|
||||||
|
{
|
||||||
|
return Task.FromResult<ConfigurationData>(new ConfigurationDataBasicLogin());
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task ApplyConfiguration(JToken configJson)
|
||||||
|
{
|
||||||
|
var incomingConfig = new ConfigurationDataBasicLogin();
|
||||||
|
incomingConfig.LoadValuesFromJson(configJson);
|
||||||
|
var pairs = new Dictionary<string, string> {
|
||||||
|
{ "username", incomingConfig.Username.Value },
|
||||||
|
{ "password", incomingConfig.Password.Value }
|
||||||
|
};
|
||||||
|
var request = new Utils.Clients.WebRequest()
|
||||||
|
{
|
||||||
|
Url = LoginUrl,
|
||||||
|
Type = RequestType.POST,
|
||||||
|
Referer = SiteLink,
|
||||||
|
PostData = pairs
|
||||||
|
};
|
||||||
|
var response = await webclient.GetString(request);
|
||||||
|
CQ splashDom = response.Content;
|
||||||
|
var link = splashDom[".trow2 a"].First();
|
||||||
|
var resultPage = await RequestStringWithCookies(link.Attr("href"), response.Cookies);
|
||||||
|
CQ resultDom = resultPage.Content;
|
||||||
|
|
||||||
|
ConfigureIfOK(response.Cookies, resultPage.Content.Contains("/logout.php"), () =>
|
||||||
|
{
|
||||||
|
var tries = resultDom["#main tr:eq(1) td font"].First().Text();
|
||||||
|
var errorMessage = "Incorrect username or password! " + tries + " tries remaining.";
|
||||||
|
throw new ExceptionWithConfigData(errorMessage, (ConfigurationData)incomingConfig);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
|
{
|
||||||
|
var releases = new List<ReleaseInfo>();
|
||||||
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
|
var searchUrl = BrowsePage;
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(searchString))
|
||||||
|
{
|
||||||
|
searchUrl += string.Format(QueryString, HttpUtility.UrlEncode(searchString));
|
||||||
|
}
|
||||||
|
|
||||||
|
var results = await RequestStringWithCookies(searchUrl);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
CQ dom = results.Content;
|
||||||
|
|
||||||
|
var rows = dom["#sortabletable tr"];
|
||||||
|
foreach (var row in rows.Skip(1))
|
||||||
|
{
|
||||||
|
var release = new ReleaseInfo();
|
||||||
|
var qRow = row.Cq();
|
||||||
|
release.Title = qRow.Find(".tooltip-content div").First().Text();
|
||||||
|
release.Description = qRow.Find(".tooltip-content div").Get(1).InnerText.Trim();
|
||||||
|
|
||||||
|
var qLink = row.Cq().Find("td:eq(2) a:eq(1)");
|
||||||
|
release.Link = new Uri(qLink.Attr("href"));
|
||||||
|
release.Guid = release.Link;
|
||||||
|
release.Comments = new Uri(qRow.Find(".tooltip-target a").First().Attr("href"));
|
||||||
|
|
||||||
|
// 07-22-2015 11:08 AM
|
||||||
|
var dateString = qRow.Find("td:eq(1) div").Last().Children().Remove().End().Text().Trim();
|
||||||
|
release.PublishDate = DateTime.ParseExact(dateString, "MM-dd-yyyy hh:mm tt", CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
|
var sizeStr = qRow.Find("td:eq(4)").Text().Trim();
|
||||||
|
release.Size = ReleaseInfo.GetBytes(sizeStr);
|
||||||
|
|
||||||
|
release.Seeders = ParseUtil.CoerceInt(qRow.Find("td:eq(6)").Text().Trim());
|
||||||
|
release.Peers = ParseUtil.CoerceInt(qRow.Find("td:eq(7)").Text().Trim()) + release.Seeders;
|
||||||
|
|
||||||
|
var catLink = row.Cq().Find("td:eq(0) a").First().Attr("href");
|
||||||
|
var catSplit = catLink.IndexOf("category=");
|
||||||
|
if (catSplit > -1)
|
||||||
|
{
|
||||||
|
catLink = catLink.Substring(catSplit + 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
release.Category = MapTrackerCatToNewznab(catLink);
|
||||||
|
releases.Add(release);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
OnParseError(results.Content, ex);
|
||||||
|
}
|
||||||
|
|
||||||
|
return releases;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -72,10 +72,9 @@ namespace Jackett.Indexers
|
|||||||
release.Link = new Uri(DownloadUrl + id);
|
release.Link = new Uri(DownloadUrl + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
|
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
|
||||||
WebClientStringResult response = null;
|
WebClientStringResult response = null;
|
||||||
@@ -136,7 +135,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -69,10 +69,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
|
|
||||||
@@ -119,7 +118,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -61,10 +61,9 @@ namespace Jackett.Indexers
|
|||||||
return Task.FromResult<ConfigurationData>(new ConfigurationDataBasicLogin());
|
return Task.FromResult<ConfigurationData>(new ConfigurationDataBasicLogin());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
|
|
||||||
@@ -106,7 +105,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -71,12 +71,12 @@ namespace Jackett.Indexers
|
|||||||
return (string)obj["token"];
|
return (string)obj["token"];
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
return await PerformQuery(query, BaseUrl);
|
return await PerformQuery(query, BaseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query, string baseUrl)
|
async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, string baseUrl)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
string token = await GetToken(baseUrl);
|
string token = await GetToken(baseUrl);
|
||||||
@@ -109,7 +109,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<byte[]> Download(Uri link)
|
public override Task<byte[]> Download(Uri link)
|
||||||
|
@@ -57,7 +57,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -104,7 +104,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -66,7 +66,7 @@ namespace Jackett.Indexers
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -111,7 +111,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,7 @@ namespace Jackett.Indexers
|
|||||||
|
|
||||||
var formattedUrl = config.GetFormattedHostUrl();
|
var formattedUrl = config.GetFormattedHostUrl();
|
||||||
var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
||||||
if (releases.Length == 0)
|
if (releases.Count() == 0)
|
||||||
throw new Exception("Could not find releases from this URL");
|
throw new Exception("Could not find releases from this URL");
|
||||||
|
|
||||||
BaseUrl = formattedUrl;
|
BaseUrl = formattedUrl;
|
||||||
@@ -62,7 +62,7 @@ namespace Jackett.Indexers
|
|||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
return await PerformQuery(query, BaseUrl);
|
return await PerformQuery(query, BaseUrl);
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ namespace Jackett.Indexers
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query, string baseUrl)
|
async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, string baseUrl)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -97,7 +97,9 @@ namespace Jackett.Indexers
|
|||||||
release.Title = serie_title;
|
release.Title = serie_title;
|
||||||
|
|
||||||
release.Comments = new Uri(node.SelectSingleNode("link").InnerText);
|
release.Comments = new Uri(node.SelectSingleNode("link").InnerText);
|
||||||
release.Category = node.SelectSingleNode("title").InnerText;
|
int category = 0;
|
||||||
|
int.TryParse(node.SelectSingleNode("title").InnerText, out category);
|
||||||
|
release.Category = category;
|
||||||
var test = node.SelectSingleNode("enclosure");
|
var test = node.SelectSingleNode("enclosure");
|
||||||
release.Guid = new Uri(test.Attributes["url"].Value);
|
release.Guid = new Uri(test.Attributes["url"].Value);
|
||||||
release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
|
release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
|
||||||
@@ -116,7 +118,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(result.Content, ex);
|
OnParseError(result.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -60,7 +60,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var formData = HttpUtility.ParseQueryString(SearchFormData);
|
var formData = HttpUtility.ParseQueryString(SearchFormData);
|
||||||
@@ -101,7 +101,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(response.Content, ex);
|
OnParseError(response.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -56,7 +56,7 @@ namespace Jackett.Indexers
|
|||||||
IsConfigured = !string.IsNullOrEmpty(baseUrl);
|
IsConfigured = !string.IsNullOrEmpty(baseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override Task<byte[]> Download(Uri link)
|
public override Task<byte[]> Download(Uri link)
|
||||||
|
@@ -118,10 +118,9 @@ namespace Jackett.Indexers
|
|||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchTerm = string.IsNullOrEmpty(query.SanitizedSearchTerm) ? "%20" : query.SanitizedSearchTerm;
|
var searchTerm = string.IsNullOrEmpty(query.SanitizedSearchTerm) ? "%20" : query.SanitizedSearchTerm;
|
||||||
var searchString = searchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = searchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
@@ -166,7 +165,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results, ex);
|
OnParseError(results, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<byte[]> Download(Uri link)
|
public override async Task<byte[]> Download(Uri link)
|
||||||
|
@@ -48,7 +48,7 @@ namespace Jackett.Indexers
|
|||||||
|
|
||||||
var formattedUrl = config.GetFormattedHostUrl();
|
var formattedUrl = config.GetFormattedHostUrl();
|
||||||
var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
||||||
if (releases.Length == 0)
|
if (releases.Count() == 0)
|
||||||
throw new Exception("Could not find releases from this URL");
|
throw new Exception("Could not find releases from this URL");
|
||||||
|
|
||||||
BaseUrl = formattedUrl;
|
BaseUrl = formattedUrl;
|
||||||
@@ -65,12 +65,12 @@ namespace Jackett.Indexers
|
|||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
return await PerformQuery(query, BaseUrl);
|
return await PerformQuery(query, BaseUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query, string baseUrl)
|
async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, string baseUrl)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
|
@@ -63,7 +63,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -103,7 +103,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -59,10 +59,9 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
List<ReleaseInfo> releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
|
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
|
||||||
var results = await RequestStringWithCookies(episodeSearchUrl);
|
var results = await RequestStringWithCookies(episodeSearchUrl);
|
||||||
@@ -111,7 +110,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -61,7 +61,7 @@ namespace Jackett.Indexers
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -99,7 +99,7 @@ namespace Jackett.Indexers
|
|||||||
{
|
{
|
||||||
OnParseError(results.Content, ex);
|
OnParseError(results.Content, ex);
|
||||||
}
|
}
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
|
|||||||
using System.Web;
|
using System.Web;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Jackett.Indexers
|
namespace Jackett.Indexers
|
||||||
{
|
{
|
||||||
@@ -43,8 +44,8 @@ namespace Jackett.Indexers
|
|||||||
config.LoadValuesFromJson(configJson);
|
config.LoadValuesFromJson(configJson);
|
||||||
|
|
||||||
var formattedUrl = config.GetFormattedHostUrl();
|
var formattedUrl = config.GetFormattedHostUrl();
|
||||||
var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
IEnumerable<ReleaseInfo> releases = await PerformQuery(new TorznabQuery(), formattedUrl);
|
||||||
if (releases.Length == 0)
|
if (releases.Count() == 0)
|
||||||
throw new Exception("Could not find releases from this URL");
|
throw new Exception("Could not find releases from this URL");
|
||||||
|
|
||||||
BaseUrl = formattedUrl;
|
BaseUrl = formattedUrl;
|
||||||
@@ -52,10 +53,9 @@ namespace Jackett.Indexers
|
|||||||
configSaveData["base_url"] = BaseUrl;
|
configSaveData["base_url"] = BaseUrl;
|
||||||
SaveConfig(configSaveData);
|
SaveConfig(configSaveData);
|
||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query, string baseUrl)
|
async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query, string baseUrl)
|
||||||
{
|
{
|
||||||
var releases = new List<ReleaseInfo>();
|
var releases = new List<ReleaseInfo>();
|
||||||
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||||
@@ -82,7 +82,9 @@ namespace Jackett.Indexers
|
|||||||
release.Title = serie_title;
|
release.Title = serie_title;
|
||||||
|
|
||||||
release.Comments = new Uri(node.SelectSingleNode("link").InnerText);
|
release.Comments = new Uri(node.SelectSingleNode("link").InnerText);
|
||||||
release.Category = node.SelectSingleNode("category").InnerText;
|
int category = 0;
|
||||||
|
int.TryParse(node.SelectSingleNode("category").InnerText, out category);
|
||||||
|
release.Category = category;
|
||||||
release.Guid = new Uri(node.SelectSingleNode("guid").InnerText);
|
release.Guid = new Uri(node.SelectSingleNode("guid").InnerText);
|
||||||
release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
|
release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
@@ -101,7 +103,7 @@ namespace Jackett.Indexers
|
|||||||
OnParseError(xml, ex);
|
OnParseError(xml, ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
return releases.ToArray();
|
return releases;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -111,7 +113,7 @@ namespace Jackett.Indexers
|
|||||||
IsConfigured = true;
|
IsConfigured = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ReleaseInfo[]> PerformQuery(TorznabQuery query)
|
public async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||||
{
|
{
|
||||||
return await PerformQuery(query, BaseUrl);
|
return await PerformQuery(query, BaseUrl);
|
||||||
}
|
}
|
||||||
|
@@ -175,6 +175,7 @@
|
|||||||
<Compile Include="Indexers\HDSpace.cs" />
|
<Compile Include="Indexers\HDSpace.cs" />
|
||||||
<Compile Include="Indexers\HDTorrents.cs" />
|
<Compile Include="Indexers\HDTorrents.cs" />
|
||||||
<Compile Include="Indexers\IIndexer.cs" />
|
<Compile Include="Indexers\IIndexer.cs" />
|
||||||
|
<Compile Include="Indexers\ImmortalSeed.cs" />
|
||||||
<Compile Include="Indexers\IPTorrents.cs" />
|
<Compile Include="Indexers\IPTorrents.cs" />
|
||||||
<Compile Include="Indexers\MoreThanTV.cs" />
|
<Compile Include="Indexers\MoreThanTV.cs" />
|
||||||
<Compile Include="Indexers\Pretome.cs" />
|
<Compile Include="Indexers\Pretome.cs" />
|
||||||
@@ -192,6 +193,7 @@
|
|||||||
<Compile Include="Indexers\TorrentShack.cs" />
|
<Compile Include="Indexers\TorrentShack.cs" />
|
||||||
<Compile Include="Indexers\Torrentz.cs" />
|
<Compile Include="Indexers\Torrentz.cs" />
|
||||||
<Compile Include="Models\CachedResult.cs" />
|
<Compile Include="Models\CachedResult.cs" />
|
||||||
|
<Compile Include="Models\CategoryMapping.cs" />
|
||||||
<Compile Include="Models\IndexerConfig\BmtvConfig.cs" />
|
<Compile Include="Models\IndexerConfig\BmtvConfig.cs" />
|
||||||
<Compile Include="Models\IndexerConfig\ConfigurationDataBasicLoginAnimeBytes.cs" />
|
<Compile Include="Models\IndexerConfig\ConfigurationDataBasicLoginAnimeBytes.cs" />
|
||||||
<Compile Include="Models\IndexerConfig\ConfigurationDataBasicLoginFrenchTorrentDb.cs" />
|
<Compile Include="Models\IndexerConfig\ConfigurationDataBasicLoginFrenchTorrentDb.cs" />
|
||||||
@@ -199,6 +201,7 @@
|
|||||||
<Compile Include="Models\TorznabCapabilities.cs" />
|
<Compile Include="Models\TorznabCapabilities.cs" />
|
||||||
<Compile Include="Models\Config\ServerConfig.cs" />
|
<Compile Include="Models\Config\ServerConfig.cs" />
|
||||||
<Compile Include="Models\TorznabCategory.cs" />
|
<Compile Include="Models\TorznabCategory.cs" />
|
||||||
|
<Compile Include="Models\TorznabCatType.cs" />
|
||||||
<Compile Include="Models\TrackerCache.cs" />
|
<Compile Include="Models\TrackerCache.cs" />
|
||||||
<Compile Include="Models\TrackerCacheResult.cs" />
|
<Compile Include="Models\TrackerCacheResult.cs" />
|
||||||
<Compile Include="Services\CacheService.cs" />
|
<Compile Include="Services\CacheService.cs" />
|
||||||
|
@@ -9,6 +9,7 @@ using Jackett.Indexers;
|
|||||||
using Jackett.Utils;
|
using Jackett.Utils;
|
||||||
using Jackett.Utils.Clients;
|
using Jackett.Utils.Clients;
|
||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
|
using Jackett.Models;
|
||||||
|
|
||||||
namespace Jackett
|
namespace Jackett
|
||||||
{
|
{
|
||||||
@@ -58,6 +59,11 @@ namespace Jackett
|
|||||||
|
|
||||||
Mapper.CreateMap<WebClientStringResult, WebClientStringResult>();
|
Mapper.CreateMap<WebClientStringResult, WebClientStringResult>();
|
||||||
Mapper.CreateMap<WebClientByteResult, WebClientByteResult>();
|
Mapper.CreateMap<WebClientByteResult, WebClientByteResult>();
|
||||||
|
|
||||||
|
Mapper.CreateMap<ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) =>
|
||||||
|
{
|
||||||
|
t.CategoryDesc = TorznabCatType.GetCatDesc(r.Category);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
20
src/Jackett/Models/CategoryMapping.cs
Normal file
20
src/Jackett/Models/CategoryMapping.cs
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Jackett.Models
|
||||||
|
{
|
||||||
|
class CategoryMapping
|
||||||
|
{
|
||||||
|
public CategoryMapping(string trackerCat, int newzCat)
|
||||||
|
{
|
||||||
|
TrackerCategory = trackerCat.ToLowerInvariant();
|
||||||
|
NewzNabCategory = newzCat;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string TrackerCategory { get; private set; }
|
||||||
|
public int NewzNabCategory { get; private set; }
|
||||||
|
}
|
||||||
|
}
|
@@ -16,7 +16,7 @@ namespace Jackett.Models
|
|||||||
public Uri Link { get; set; }
|
public Uri Link { get; set; }
|
||||||
public Uri Comments { get; set; }
|
public Uri Comments { get; set; }
|
||||||
public DateTime PublishDate { get; set; }
|
public DateTime PublishDate { get; set; }
|
||||||
public string Category { get; set; }
|
public int Category { get; set; }
|
||||||
public long? Size { get; set; }
|
public long? Size { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public long? RageID { get; set; }
|
public long? RageID { get; set; }
|
||||||
|
@@ -63,8 +63,6 @@ namespace Jackett.Models
|
|||||||
new XElement("link", ChannelInfo.ImageLink.ToString()),
|
new XElement("link", ChannelInfo.ImageLink.ToString()),
|
||||||
new XElement("description", ChannelInfo.ImageDescription)
|
new XElement("description", ChannelInfo.ImageDescription)
|
||||||
),
|
),
|
||||||
|
|
||||||
|
|
||||||
from r in Releases
|
from r in Releases
|
||||||
select new XElement("item",
|
select new XElement("item",
|
||||||
new XElement("title", r.Title),
|
new XElement("title", r.Title),
|
||||||
@@ -74,7 +72,7 @@ namespace Jackett.Models
|
|||||||
r.Size == null ? null : new XElement("size", r.Size),
|
r.Size == null ? null : new XElement("size", r.Size),
|
||||||
new XElement("description", r.Description),
|
new XElement("description", r.Description),
|
||||||
new XElement("link", r.Link ?? r.MagnetUri),
|
new XElement("link", r.Link ?? r.MagnetUri),
|
||||||
r.Category == null ? null : new XElement("category", r.Category),
|
r.Category == 0 ? null : new XElement("category", r.Category),
|
||||||
new XElement(
|
new XElement(
|
||||||
"enclosure",
|
"enclosure",
|
||||||
new XAttribute("url", r.Link ?? r.MagnetUri),
|
new XAttribute("url", r.Link ?? r.MagnetUri),
|
||||||
|
140
src/Jackett/Models/TorznabCatType.cs
Normal file
140
src/Jackett/Models/TorznabCatType.cs
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Jackett.Models
|
||||||
|
{
|
||||||
|
class TorznabCatType
|
||||||
|
{
|
||||||
|
private static Dictionary<int, string> cats = new Dictionary<int, string>();
|
||||||
|
|
||||||
|
static TorznabCatType()
|
||||||
|
{
|
||||||
|
cats.Add(5000, "TV");
|
||||||
|
cats.Add(5030, "TV/SD");
|
||||||
|
cats.Add(5040, "TV/HD");
|
||||||
|
cats.Add(5070, "TV/Anime");
|
||||||
|
cats.Add(8000, "Books");
|
||||||
|
cats.Add(8020, "Books/Comics");
|
||||||
|
cats.Add(4000, "PC");
|
||||||
|
cats.Add(3030, "Audio/Audiobook");
|
||||||
|
cats.Add(2040, "Movies/HD");
|
||||||
|
cats.Add(2030, "Movies/SD");
|
||||||
|
cats.Add(2010, "Movies/Foreign");
|
||||||
|
cats.Add(3000, "Audio");
|
||||||
|
cats.Add(3040, "Audio/Lossless");
|
||||||
|
cats.Add(3010, "Audio/MP3");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool QueryContainsParentCategory(int[] queryCats, int releaseCat)
|
||||||
|
{
|
||||||
|
if (cats.ContainsKey(releaseCat) && queryCats!=null)
|
||||||
|
{
|
||||||
|
var ncab = cats[releaseCat];
|
||||||
|
var split = ncab.IndexOf("/");
|
||||||
|
if (split > -1)
|
||||||
|
{
|
||||||
|
string parentCatName = ncab.Substring(0,split);
|
||||||
|
if (cats.ContainsValue(parentCatName))
|
||||||
|
{
|
||||||
|
var parentCat = cats.Where(c => c.Value == parentCatName).First().Key;
|
||||||
|
return queryCats.Contains(parentCat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string GetCatDesc(int newznabcat)
|
||||||
|
{
|
||||||
|
if (cats.ContainsKey(newznabcat))
|
||||||
|
{
|
||||||
|
return cats[newznabcat];
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static TorznabCategory GetCat(int id)
|
||||||
|
{
|
||||||
|
return new TorznabCategory()
|
||||||
|
{
|
||||||
|
ID = id,
|
||||||
|
Name = cats[id]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory Anime
|
||||||
|
{
|
||||||
|
get { return GetCat(5070); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory TV
|
||||||
|
{
|
||||||
|
get { return GetCat(5000); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory TVSD
|
||||||
|
{
|
||||||
|
get { return GetCat(5030); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory TVHD
|
||||||
|
{
|
||||||
|
get { return GetCat(5040); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory Books
|
||||||
|
{
|
||||||
|
get { return GetCat(8000); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory Comic
|
||||||
|
{
|
||||||
|
get { return GetCat(8020); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory Apps
|
||||||
|
{
|
||||||
|
get { return GetCat(4000); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory AudioBooks
|
||||||
|
{
|
||||||
|
get { return GetCat(3030); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory MoviesHD
|
||||||
|
{
|
||||||
|
get { return GetCat(2040); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory MoviesSD
|
||||||
|
{
|
||||||
|
get { return GetCat(2040); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory MoviesForeign
|
||||||
|
{
|
||||||
|
get { return GetCat(2040); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory Audio
|
||||||
|
{
|
||||||
|
get { return GetCat(3000); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory AudioLossless
|
||||||
|
{
|
||||||
|
get { return GetCat(3040); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static TorznabCategory AudioLossy
|
||||||
|
{
|
||||||
|
get { return GetCat(3010); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -8,7 +8,7 @@ namespace Jackett.Models
|
|||||||
{
|
{
|
||||||
public class TorznabCategory
|
public class TorznabCategory
|
||||||
{
|
{
|
||||||
public string ID { get; set; }
|
public int ID { get; set; }
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
|
|
||||||
public List<TorznabCategory> SubCategories { get; private set; }
|
public List<TorznabCategory> SubCategories { get; private set; }
|
||||||
@@ -17,53 +17,5 @@ namespace Jackett.Models
|
|||||||
{
|
{
|
||||||
SubCategories = new List<TorznabCategory>();
|
SubCategories = new List<TorznabCategory>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TorznabCategory Anime
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return new TorznabCategory()
|
|
||||||
{
|
|
||||||
ID = "5070",
|
|
||||||
Name = "TV/Anime"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TorznabCategory TV
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return new TorznabCategory()
|
|
||||||
{
|
|
||||||
ID = "5000",
|
|
||||||
Name = "TV"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TorznabCategory TVSD
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return new TorznabCategory()
|
|
||||||
{
|
|
||||||
ID = "5030",
|
|
||||||
Name = "TV/SD"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static TorznabCategory TVHD
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return new TorznabCategory()
|
|
||||||
{
|
|
||||||
ID = "5040",
|
|
||||||
Name = "TV/HD"
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -12,7 +12,7 @@ namespace Jackett.Models
|
|||||||
public class TorznabQuery
|
public class TorznabQuery
|
||||||
{
|
{
|
||||||
public string QueryType { get; set; }
|
public string QueryType { get; set; }
|
||||||
public string[] Categories { get; set; }
|
public int[] Categories { get; set; }
|
||||||
public int Extended { get; set; }
|
public int Extended { get; set; }
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
public int Limit { get; set; }
|
public int Limit { get; set; }
|
||||||
@@ -74,7 +74,10 @@ namespace Jackett.Models
|
|||||||
|
|
||||||
if (query["cat"] != null)
|
if (query["cat"] != null)
|
||||||
{
|
{
|
||||||
q.Categories = query["cat"].Split(',');
|
q.Categories = query["cat"].Split(',').Select(s => int.Parse(s)).ToArray();
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
q.Categories = new int[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query["extended"] != null)
|
if (query["extended"] != null)
|
||||||
|
@@ -10,5 +10,6 @@ namespace Jackett.Models
|
|||||||
{
|
{
|
||||||
public DateTime FirstSeen { get; set; }
|
public DateTime FirstSeen { get; set; }
|
||||||
public string Tracker { get; set; }
|
public string Tracker { get; set; }
|
||||||
|
public string CategoryDesc { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -10,7 +10,7 @@ namespace Jackett.Services
|
|||||||
{
|
{
|
||||||
public interface ICacheService
|
public interface ICacheService
|
||||||
{
|
{
|
||||||
void CacheRssResults(string trackerId, ReleaseInfo[] releases);
|
void CacheRssResults(string trackerId, IEnumerable<ReleaseInfo> releases);
|
||||||
List<TrackerCacheResult> GetCachedResults();
|
List<TrackerCacheResult> GetCachedResults();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,12 +20,7 @@ namespace Jackett.Services
|
|||||||
private readonly int MAX_RESULTS_PER_TRACKER = 100;
|
private readonly int MAX_RESULTS_PER_TRACKER = 100;
|
||||||
private readonly TimeSpan AGE_LIMIT = new TimeSpan(2, 0, 0, 0);
|
private readonly TimeSpan AGE_LIMIT = new TimeSpan(2, 0, 0, 0);
|
||||||
|
|
||||||
static CacheService()
|
public void CacheRssResults(string trackerId, IEnumerable<ReleaseInfo> releases)
|
||||||
{
|
|
||||||
Mapper.CreateMap<ReleaseInfo,TrackerCacheResult>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CacheRssResults(string trackerId, ReleaseInfo[] releases)
|
|
||||||
{
|
{
|
||||||
lock (cache)
|
lock (cache)
|
||||||
{
|
{
|
||||||
|
@@ -77,8 +77,8 @@ namespace Jackett.Services
|
|||||||
var indexer = GetIndexer(name);
|
var indexer = GetIndexer(name);
|
||||||
var browseQuery = new TorznabQuery();
|
var browseQuery = new TorznabQuery();
|
||||||
var results = await indexer.PerformQuery(browseQuery);
|
var results = await indexer.PerformQuery(browseQuery);
|
||||||
logger.Info(string.Format("Found {0} releases from {1}", results.Length, indexer.DisplayName));
|
logger.Info(string.Format("Found {0} releases from {1}", results.Count(), indexer.DisplayName));
|
||||||
if (results.Length == 0)
|
if (results.Count() == 0)
|
||||||
throw new Exception("Found no results while trying to browse this tracker");
|
throw new Exception("Found no results while trying to browse this tracker");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,9 +16,9 @@ namespace Jackett.Utils
|
|||||||
caps.TVSearchAvailable = true;
|
caps.TVSearchAvailable = true;
|
||||||
caps.SupportsTVRageSearch = false;
|
caps.SupportsTVRageSearch = false;
|
||||||
caps.Categories.AddRange(new[] {
|
caps.Categories.AddRange(new[] {
|
||||||
TorznabCategory.TV,
|
TorznabCatType.TV,
|
||||||
TorznabCategory.TVSD,
|
TorznabCatType.TVSD,
|
||||||
TorznabCategory.TVHD
|
TorznabCatType.TVHD
|
||||||
});
|
});
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user