diff --git a/src/Jackett.Test/Indexers/BakaBTTests.cs b/src/Jackett.Test/Indexers/BakaBTTests.cs
index 0b9b471eb..13c7c26b3 100644
--- a/src/Jackett.Test/Indexers/BakaBTTests.cs
+++ b/src/Jackett.Test/Indexers/BakaBTTests.cs
@@ -158,20 +158,20 @@ namespace JackettTest.Indexers
indexer.LoadFromSavedConfiguration(JObject.Parse("{\"cookies\":\"bbtid=c\"}"));
var results = await indexer.PerformQuery(new Jackett.Models.TorznabQuery() { SanitizedSearchTerm = "Series S1", Season = 1 });
- results.Length.Should().Be(44);
- results[0].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[0].Comments.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
- results[0].Size.Should().Be(10307921920);
- results[0].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[0].Peers.Should().Be(161);
- results[0].Seeders.Should().Be(151);
- results[0].MinimumRatio.Should().Be(1);
+ results.Count().Should().Be(44);
+ results.First().Title.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
+ results.First().Guid.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.First().Size.Should().Be(10307921920);
+ results.First().Description.Should().Be("Golden Time Season 1 (BD 720p) [FFF]");
+ results.First().Link.Should().Be("http://bakabt.me/torrent/180302/golden-time-bd-720p-fff");
+ results.First().Peers.Should().Be(161);
+ results.First().Seeders.Should().Be(151);
+ results.First().MinimumRatio.Should().Be(1);
- results[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[5].Title.Should().Be("Is It Wrong to Try to Pick Up Girls in a Dungeon? Season 1 (480p) [HorribleSubs]");
+ results.ElementAt(1).Title.Should().Be("Yowamushi Pedal Season 1 (BD 720p) [Commie]");
+ results.ElementAt(4).Title.Should().Be("Dungeon ni Deai o Motomeru no wa Machigatte Iru Darouka: Familia Myth 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]");
}
}
}
diff --git a/src/Jackett/Content/index.html b/src/Jackett/Content/index.html
index a94688fd7..7a4cfd93b 100644
--- a/src/Jackett/Content/index.html
+++ b/src/Jackett/Content/index.html
@@ -38,6 +38,7 @@
First Seen |
Tracker |
Name |
+ Category |
Seeds |
Leechers |
Download |
@@ -52,6 +53,7 @@
{{formatRelative FirstSeen}} |
{{Tracker}} |
{{Title}} |
+ {{CategoryDesc}} |
{{Seeders}} |
{{Peers}} |
|
diff --git a/src/Jackett/Content/logos/immortalseed.png b/src/Jackett/Content/logos/immortalseed.png
new file mode 100644
index 000000000..7e8503e11
Binary files /dev/null and b/src/Jackett/Content/logos/immortalseed.png differ
diff --git a/src/Jackett/Controllers/APIController.cs b/src/Jackett/Controllers/APIController.cs
index 4b73d7dad..064bdc133 100644
--- a/src/Jackett/Controllers/APIController.cs
+++ b/src/Jackett/Controllers/APIController.cs
@@ -69,14 +69,16 @@ namespace Jackett.Controllers
cacheService.CacheRssResults(indexer.DisplayName, releases);
}
+ releases = indexer.FilterResults(torznabQuery, releases);
+
// Log info
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
{
- 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);
diff --git a/src/Jackett/Indexers/AlphaRatio.cs b/src/Jackett/Indexers/AlphaRatio.cs
index 7effde082..92d8f96e9 100644
--- a/src/Jackett/Indexers/AlphaRatio.cs
+++ b/src/Jackett/Indexers/AlphaRatio.cs
@@ -74,7 +74,7 @@ namespace Jackett.Indexers
release.Link = new Uri(DownloadUrl + id);
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -122,7 +122,7 @@ namespace Jackett.Indexers
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
static DateTime UnixTimestampToDateTime(double unixTime)
diff --git a/src/Jackett/Indexers/AnimeBytes.cs b/src/Jackett/Indexers/AnimeBytes.cs
index 61b5223cc..8815e820f 100644
--- a/src/Jackett/Indexers/AnimeBytes.cs
+++ b/src/Jackett/Indexers/AnimeBytes.cs
@@ -33,7 +33,7 @@ namespace Jackett.Indexers
description: "Powered by Tentacles",
manager: i,
client: client,
- caps: new TorznabCapabilities(TorznabCategory.Anime),
+ caps: new TorznabCapabilities(TorznabCatType.Anime),
logger: l)
{
}
@@ -114,7 +114,7 @@ namespace Jackett.Indexers
}
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
// The result list
var releases = new List();
@@ -127,7 +127,7 @@ namespace Jackett.Indexers
return releases.ToArray();
}
- public async Task GetResults(string searchTerm)
+ public async Task> GetResults(string searchTerm)
{
// This tracker only deals with full seasons so chop off the episode/season number if we have it D:
if (!string.IsNullOrWhiteSpace(searchTerm))
@@ -327,7 +327,7 @@ namespace Jackett.Indexers
cache.Add(new CachedQueryResult(searchTerm, releases));
}
- return releases.Select(s => (ReleaseInfo)s.Clone()).ToArray();
+ return releases.Select(s => (ReleaseInfo)s.Clone());
}
diff --git a/src/Jackett/Indexers/BB.cs b/src/Jackett/Indexers/BB.cs
index edc9e3ca0..c652a4d6f 100644
--- a/src/Jackett/Indexers/BB.cs
+++ b/src/Jackett/Indexers/BB.cs
@@ -68,7 +68,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
List releases = new List();
@@ -113,7 +113,7 @@ namespace Jackett.Indexers
{
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/BakaBT.cs b/src/Jackett/Indexers/BakaBT.cs
index 46ccee3f9..8906664fa 100644
--- a/src/Jackett/Indexers/BakaBT.cs
+++ b/src/Jackett/Indexers/BakaBT.cs
@@ -25,7 +25,7 @@ namespace Jackett.Indexers
: base(name: "BakaBT",
description: "Anime Community",
link: "http://bakabt.me/",
- caps: new TorznabCapabilities(TorznabCategory.Anime),
+ caps: new TorznabCapabilities(TorznabCatType.Anime),
manager: i,
client: wc,
logger: l)
@@ -65,7 +65,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
// 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);
}
- return releases.ToArray();
+ return releases;
}
public override async Task Download(Uri link)
diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs
index 105d96796..5c54451b9 100644
--- a/src/Jackett/Indexers/BaseIndexer.cs
+++ b/src/Jackett/Indexers/BaseIndexer.cs
@@ -29,6 +29,8 @@ namespace Jackett.Indexers
protected IWebClient webclient;
protected string cookieHeader = "";
+ private List categoryMapping = new List();
+
public BaseIndexer(string name, string link, string description, IIndexerManagerService manager, IWebClient client, Logger logger, TorznabCapabilities caps = null)
{
if (!link.EndsWith("/"))
@@ -46,6 +48,19 @@ namespace Jackett.Indexers
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)
{
return StringUtil.StripNonAlphaNumeric(type.Name.ToLowerInvariant());
@@ -239,5 +254,40 @@ namespace Jackett.Indexers
onError();
}
}
+
+ public virtual IEnumerable FilterResults(TorznabQuery query, IEnumerable 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));
+ }
}
}
diff --git a/src/Jackett/Indexers/BeyondHD.cs b/src/Jackett/Indexers/BeyondHD.cs
index d4827561d..bf41d902e 100644
--- a/src/Jackett/Indexers/BeyondHD.cs
+++ b/src/Jackett/Indexers/BeyondHD.cs
@@ -56,7 +56,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
List releases = new List();
@@ -105,7 +105,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs
index c64af764f..199754edf 100644
--- a/src/Jackett/Indexers/BitHdtv.cs
+++ b/src/Jackett/Indexers/BitHdtv.cs
@@ -61,10 +61,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
var results = await RequestStringWithCookies(episodeSearchUrl);
@@ -107,7 +106,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/BitMeTV.cs b/src/Jackett/Indexers/BitMeTV.cs
index bb1b981ce..8de331ef3 100644
--- a/src/Jackett/Indexers/BitMeTV.cs
+++ b/src/Jackett/Indexers/BitMeTV.cs
@@ -74,10 +74,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode(searchString));
var results = await RequestStringWithCookies(episodeSearchUrl);
@@ -129,7 +128,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/FrenchTorrentDb.cs b/src/Jackett/Indexers/FrenchTorrentDb.cs
index 698250440..e435cb0f5 100644
--- a/src/Jackett/Indexers/FrenchTorrentDb.cs
+++ b/src/Jackett/Indexers/FrenchTorrentDb.cs
@@ -55,7 +55,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
List releases = new List();
@@ -94,7 +94,7 @@ namespace Jackett.Indexers
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/Freshon.cs b/src/Jackett/Indexers/Freshon.cs
index 697eb9f8e..f936046f6 100644
--- a/src/Jackett/Indexers/Freshon.cs
+++ b/src/Jackett/Indexers/Freshon.cs
@@ -65,10 +65,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
string episodeSearchUrl;
if (string.IsNullOrEmpty(query.SanitizedSearchTerm))
@@ -125,7 +124,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/HDSpace.cs b/src/Jackett/Indexers/HDSpace.cs
index e942726dc..82f7bfb0c 100644
--- a/src/Jackett/Indexers/HDSpace.cs
+++ b/src/Jackett/Indexers/HDSpace.cs
@@ -62,10 +62,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
var response = await RequestStringWithCookies(episodeSearchUrl);
@@ -117,7 +116,7 @@ namespace Jackett.Indexers
{
OnParseError(results, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/HDTorrents.cs b/src/Jackett/Indexers/HDTorrents.cs
index 053c38998..2d25b7686 100644
--- a/src/Jackett/Indexers/HDTorrents.cs
+++ b/src/Jackett/Indexers/HDTorrents.cs
@@ -59,11 +59,10 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchurls = new List();
-
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var searchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString.Trim()));
var results = await RequestStringWithCookies(searchUrl);
@@ -132,7 +131,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/IIndexer.cs b/src/Jackett/Indexers/IIndexer.cs
index dc92bc3be..c768591eb 100644
--- a/src/Jackett/Indexers/IIndexer.cs
+++ b/src/Jackett/Indexers/IIndexer.cs
@@ -31,7 +31,9 @@ namespace Jackett.Indexers
// Called on startup when initializing indexers from saved configuration
void LoadFromSavedConfiguration(JToken jsonConfig);
- Task PerformQuery(TorznabQuery query);
+ Task> PerformQuery(TorznabQuery query);
+
+ IEnumerable FilterResults(TorznabQuery query, IEnumerable input);
Task Download(Uri link);
}
diff --git a/src/Jackett/Indexers/IPTorrents.cs b/src/Jackett/Indexers/IPTorrents.cs
index 6cc8dd13c..3ec755e94 100644
--- a/src/Jackett/Indexers/IPTorrents.cs
+++ b/src/Jackett/Indexers/IPTorrents.cs
@@ -30,7 +30,7 @@ namespace Jackett.Indexers
client: wc,
logger: l)
{
- TorznabCaps.Categories.Add(new TorznabCategory { ID = "5070", Name = "TV/Anime" });
+ TorznabCaps.Categories.Add(TorznabCatType.Anime);
}
public Task GetConfigurationForSetup()
@@ -67,7 +67,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -134,7 +134,7 @@ namespace Jackett.Indexers
OnParseError(results, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/ImmortalSeed.cs b/src/Jackett/Indexers/ImmortalSeed.cs
new file mode 100644
index 000000000..060b17820
--- /dev/null
+++ b/src/Jackett/Indexers/ImmortalSeed.cs
@@ -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 GetConfigurationForSetup()
+ {
+ return Task.FromResult(new ConfigurationDataBasicLogin());
+ }
+
+ public async Task ApplyConfiguration(JToken configJson)
+ {
+ var incomingConfig = new ConfigurationDataBasicLogin();
+ incomingConfig.LoadValuesFromJson(configJson);
+ var pairs = new Dictionary {
+ { "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> PerformQuery(TorznabQuery query)
+ {
+ var releases = new List();
+ 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;
+ }
+
+
+ }
+}
diff --git a/src/Jackett/Indexers/MoreThanTV.cs b/src/Jackett/Indexers/MoreThanTV.cs
index 23039992d..0622374b6 100644
--- a/src/Jackett/Indexers/MoreThanTV.cs
+++ b/src/Jackett/Indexers/MoreThanTV.cs
@@ -72,10 +72,9 @@ namespace Jackett.Indexers
release.Link = new Uri(DownloadUrl + id);
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = SearchUrl + HttpUtility.UrlEncode(searchString);
WebClientStringResult response = null;
@@ -136,7 +135,7 @@ namespace Jackett.Indexers
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/Pretome.cs b/src/Jackett/Indexers/Pretome.cs
index 671498464..ced0ee55f 100644
--- a/src/Jackett/Indexers/Pretome.cs
+++ b/src/Jackett/Indexers/Pretome.cs
@@ -69,10 +69,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
@@ -119,7 +118,7 @@ namespace Jackett.Indexers
{
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/PrivateHD.cs b/src/Jackett/Indexers/PrivateHD.cs
index e895bba23..a8fb3caad 100644
--- a/src/Jackett/Indexers/PrivateHD.cs
+++ b/src/Jackett/Indexers/PrivateHD.cs
@@ -61,10 +61,9 @@ namespace Jackett.Indexers
return Task.FromResult(new ConfigurationDataBasicLogin());
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
@@ -106,7 +105,7 @@ namespace Jackett.Indexers
{
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/Rarbg.cs b/src/Jackett/Indexers/Rarbg.cs
index f60f31d1c..9ec9cf48f 100644
--- a/src/Jackett/Indexers/Rarbg.cs
+++ b/src/Jackett/Indexers/Rarbg.cs
@@ -71,12 +71,12 @@ namespace Jackett.Indexers
return (string)obj["token"];
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, BaseUrl);
}
- async Task PerformQuery(TorznabQuery query, string baseUrl)
+ async Task> PerformQuery(TorznabQuery query, string baseUrl)
{
var releases = new List();
string token = await GetToken(baseUrl);
@@ -109,7 +109,7 @@ namespace Jackett.Indexers
{
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
public override Task Download(Uri link)
diff --git a/src/Jackett/Indexers/SceneAccess.cs b/src/Jackett/Indexers/SceneAccess.cs
index a3752c409..7b8062154 100644
--- a/src/Jackett/Indexers/SceneAccess.cs
+++ b/src/Jackett/Indexers/SceneAccess.cs
@@ -57,7 +57,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -104,7 +104,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/SceneTime.cs b/src/Jackett/Indexers/SceneTime.cs
index fc3405b99..af3f16f2d 100644
--- a/src/Jackett/Indexers/SceneTime.cs
+++ b/src/Jackett/Indexers/SceneTime.cs
@@ -66,7 +66,7 @@ namespace Jackett.Indexers
};
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -111,7 +111,7 @@ namespace Jackett.Indexers
{
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/ShowRSS.cs b/src/Jackett/Indexers/ShowRSS.cs
index 84aad0787..8443fa6bd 100644
--- a/src/Jackett/Indexers/ShowRSS.cs
+++ b/src/Jackett/Indexers/ShowRSS.cs
@@ -45,7 +45,7 @@ namespace Jackett.Indexers
var formattedUrl = config.GetFormattedHostUrl();
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");
BaseUrl = formattedUrl;
@@ -62,7 +62,7 @@ namespace Jackett.Indexers
IsConfigured = true;
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, BaseUrl);
}
@@ -72,7 +72,7 @@ namespace Jackett.Indexers
throw new NotImplementedException();
}
- async Task PerformQuery(TorznabQuery query, string baseUrl)
+ async Task> PerformQuery(TorznabQuery query, string baseUrl)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -97,7 +97,9 @@ namespace Jackett.Indexers
release.Title = serie_title;
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");
release.Guid = new Uri(test.Attributes["url"].Value);
release.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
@@ -116,7 +118,7 @@ namespace Jackett.Indexers
OnParseError(result.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/SpeedCD.cs b/src/Jackett/Indexers/SpeedCD.cs
index 47d8a76cc..9873f1206 100644
--- a/src/Jackett/Indexers/SpeedCD.cs
+++ b/src/Jackett/Indexers/SpeedCD.cs
@@ -60,7 +60,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var formData = HttpUtility.ParseQueryString(SearchFormData);
@@ -101,7 +101,7 @@ namespace Jackett.Indexers
{
OnParseError(response.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/Strike.cs b/src/Jackett/Indexers/Strike.cs
index 1dea1605b..e3937744f 100644
--- a/src/Jackett/Indexers/Strike.cs
+++ b/src/Jackett/Indexers/Strike.cs
@@ -56,7 +56,7 @@ namespace Jackett.Indexers
IsConfigured = !string.IsNullOrEmpty(baseUrl);
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
List releases = new List();
@@ -105,7 +105,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
public override Task Download(Uri link)
diff --git a/src/Jackett/Indexers/T411.cs b/src/Jackett/Indexers/T411.cs
index 797ecdcd4..17b2a6d67 100644
--- a/src/Jackett/Indexers/T411.cs
+++ b/src/Jackett/Indexers/T411.cs
@@ -118,10 +118,9 @@ namespace Jackett.Indexers
IsConfigured = true;
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchTerm = string.IsNullOrEmpty(query.SanitizedSearchTerm) ? "%20" : query.SanitizedSearchTerm;
var searchString = searchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
@@ -166,7 +165,7 @@ namespace Jackett.Indexers
{
OnParseError(results, ex);
}
- return releases.ToArray();
+ return releases;
}
public override async Task Download(Uri link)
diff --git a/src/Jackett/Indexers/ThePirateBay.cs b/src/Jackett/Indexers/ThePirateBay.cs
index 598022251..c854b7ec0 100644
--- a/src/Jackett/Indexers/ThePirateBay.cs
+++ b/src/Jackett/Indexers/ThePirateBay.cs
@@ -48,7 +48,7 @@ namespace Jackett.Indexers
var formattedUrl = config.GetFormattedHostUrl();
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");
BaseUrl = formattedUrl;
@@ -65,12 +65,12 @@ namespace Jackett.Indexers
IsConfigured = true;
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, BaseUrl);
}
- async Task PerformQuery(TorznabQuery query, string baseUrl)
+ async Task> PerformQuery(TorznabQuery query, string baseUrl)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
diff --git a/src/Jackett/Indexers/TorrentDay.cs b/src/Jackett/Indexers/TorrentDay.cs
index 529c814a6..5f850cfbc 100644
--- a/src/Jackett/Indexers/TorrentDay.cs
+++ b/src/Jackett/Indexers/TorrentDay.cs
@@ -63,7 +63,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -103,7 +103,7 @@ namespace Jackett.Indexers
{
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/TorrentLeech.cs b/src/Jackett/Indexers/TorrentLeech.cs
index 131bc3e52..b0ecae6bb 100644
--- a/src/Jackett/Indexers/TorrentLeech.cs
+++ b/src/Jackett/Indexers/TorrentLeech.cs
@@ -59,10 +59,9 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
- List releases = new List();
-
+ var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
var results = await RequestStringWithCookies(episodeSearchUrl);
@@ -111,7 +110,7 @@ namespace Jackett.Indexers
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/TorrentShack.cs b/src/Jackett/Indexers/TorrentShack.cs
index a01aa47fb..c8b04c45e 100644
--- a/src/Jackett/Indexers/TorrentShack.cs
+++ b/src/Jackett/Indexers/TorrentShack.cs
@@ -61,7 +61,7 @@ namespace Jackett.Indexers
});
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -99,7 +99,7 @@ namespace Jackett.Indexers
{
OnParseError(results.Content, ex);
}
- return releases.ToArray();
+ return releases;
}
}
}
diff --git a/src/Jackett/Indexers/Torrentz.cs b/src/Jackett/Indexers/Torrentz.cs
index da7b6f57d..365db306a 100644
--- a/src/Jackett/Indexers/Torrentz.cs
+++ b/src/Jackett/Indexers/Torrentz.cs
@@ -13,6 +13,7 @@ using System.Threading.Tasks;
using System.Web;
using System.Windows.Forms;
using System.Xml;
+using System.Linq;
namespace Jackett.Indexers
{
@@ -43,8 +44,8 @@ namespace Jackett.Indexers
config.LoadValuesFromJson(configJson);
var formattedUrl = config.GetFormattedHostUrl();
- var releases = await PerformQuery(new TorznabQuery(), formattedUrl);
- if (releases.Length == 0)
+ IEnumerable releases = await PerformQuery(new TorznabQuery(), formattedUrl);
+ if (releases.Count() == 0)
throw new Exception("Could not find releases from this URL");
BaseUrl = formattedUrl;
@@ -52,10 +53,9 @@ namespace Jackett.Indexers
configSaveData["base_url"] = BaseUrl;
SaveConfig(configSaveData);
IsConfigured = true;
-
}
- async Task PerformQuery(TorznabQuery query, string baseUrl)
+ async Task> PerformQuery(TorznabQuery query, string baseUrl)
{
var releases = new List();
var searchString = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
@@ -82,7 +82,9 @@ namespace Jackett.Indexers
release.Title = serie_title;
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.PublishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
@@ -101,7 +103,7 @@ namespace Jackett.Indexers
OnParseError(xml, ex);
}
- return releases.ToArray();
+ return releases;
}
@@ -111,7 +113,7 @@ namespace Jackett.Indexers
IsConfigured = true;
}
- public async Task PerformQuery(TorznabQuery query)
+ public async Task> PerformQuery(TorznabQuery query)
{
return await PerformQuery(query, BaseUrl);
}
diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj
index 15c99e613..c3aa3e18f 100644
--- a/src/Jackett/Jackett.csproj
+++ b/src/Jackett/Jackett.csproj
@@ -175,6 +175,7 @@
+
@@ -192,6 +193,7 @@
+
@@ -199,6 +201,7 @@
+
diff --git a/src/Jackett/JackettModule.cs b/src/Jackett/JackettModule.cs
index 0f1978581..96d4de638 100644
--- a/src/Jackett/JackettModule.cs
+++ b/src/Jackett/JackettModule.cs
@@ -9,6 +9,7 @@ using Jackett.Indexers;
using Jackett.Utils;
using Jackett.Utils.Clients;
using AutoMapper;
+using Jackett.Models;
namespace Jackett
{
@@ -58,6 +59,11 @@ namespace Jackett
Mapper.CreateMap();
Mapper.CreateMap();
+
+ Mapper.CreateMap().AfterMap((r, t) =>
+ {
+ t.CategoryDesc = TorznabCatType.GetCatDesc(r.Category);
+ });
}
}
}
diff --git a/src/Jackett/Models/CategoryMapping.cs b/src/Jackett/Models/CategoryMapping.cs
new file mode 100644
index 000000000..6ab314c48
--- /dev/null
+++ b/src/Jackett/Models/CategoryMapping.cs
@@ -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; }
+ }
+}
diff --git a/src/Jackett/Models/ReleaseInfo.cs b/src/Jackett/Models/ReleaseInfo.cs
index a12dac0bf..2e24293b3 100644
--- a/src/Jackett/Models/ReleaseInfo.cs
+++ b/src/Jackett/Models/ReleaseInfo.cs
@@ -16,7 +16,7 @@ namespace Jackett.Models
public Uri Link { get; set; }
public Uri Comments { get; set; }
public DateTime PublishDate { get; set; }
- public string Category { get; set; }
+ public int Category { get; set; }
public long? Size { get; set; }
public string Description { get; set; }
public long? RageID { get; set; }
diff --git a/src/Jackett/Models/ResultPage.cs b/src/Jackett/Models/ResultPage.cs
index fe238e225..7593ea0b6 100644
--- a/src/Jackett/Models/ResultPage.cs
+++ b/src/Jackett/Models/ResultPage.cs
@@ -63,8 +63,6 @@ namespace Jackett.Models
new XElement("link", ChannelInfo.ImageLink.ToString()),
new XElement("description", ChannelInfo.ImageDescription)
),
-
-
from r in Releases
select new XElement("item",
new XElement("title", r.Title),
@@ -74,7 +72,7 @@ namespace Jackett.Models
r.Size == null ? null : new XElement("size", r.Size),
new XElement("description", r.Description),
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(
"enclosure",
new XAttribute("url", r.Link ?? r.MagnetUri),
diff --git a/src/Jackett/Models/TorznabCatType.cs b/src/Jackett/Models/TorznabCatType.cs
new file mode 100644
index 000000000..8270a2566
--- /dev/null
+++ b/src/Jackett/Models/TorznabCatType.cs
@@ -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 cats = new Dictionary();
+
+ 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); }
+ }
+ }
+}
diff --git a/src/Jackett/Models/TorznabCategory.cs b/src/Jackett/Models/TorznabCategory.cs
index f1e059aa8..c65c3d784 100644
--- a/src/Jackett/Models/TorznabCategory.cs
+++ b/src/Jackett/Models/TorznabCategory.cs
@@ -8,7 +8,7 @@ namespace Jackett.Models
{
public class TorznabCategory
{
- public string ID { get; set; }
+ public int ID { get; set; }
public string Name { get; set; }
public List SubCategories { get; private set; }
@@ -17,53 +17,5 @@ namespace Jackett.Models
{
SubCategories = new List();
}
-
- 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"
- };
- }
- }
}
}
diff --git a/src/Jackett/Models/TorznabQuery.cs b/src/Jackett/Models/TorznabQuery.cs
index d27698517..449b3af96 100644
--- a/src/Jackett/Models/TorznabQuery.cs
+++ b/src/Jackett/Models/TorznabQuery.cs
@@ -12,7 +12,7 @@ namespace Jackett.Models
public class TorznabQuery
{
public string QueryType { get; set; }
- public string[] Categories { get; set; }
+ public int[] Categories { get; set; }
public int Extended { get; set; }
public string ApiKey { get; set; }
public int Limit { get; set; }
@@ -74,7 +74,10 @@ namespace Jackett.Models
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)
diff --git a/src/Jackett/Models/TrackerCacheResult.cs b/src/Jackett/Models/TrackerCacheResult.cs
index 0ea9af650..13b1569e8 100644
--- a/src/Jackett/Models/TrackerCacheResult.cs
+++ b/src/Jackett/Models/TrackerCacheResult.cs
@@ -10,5 +10,6 @@ namespace Jackett.Models
{
public DateTime FirstSeen { get; set; }
public string Tracker { get; set; }
+ public string CategoryDesc { get; set; }
}
}
diff --git a/src/Jackett/Services/CacheService.cs b/src/Jackett/Services/CacheService.cs
index 400649f38..1289a393d 100644
--- a/src/Jackett/Services/CacheService.cs
+++ b/src/Jackett/Services/CacheService.cs
@@ -10,7 +10,7 @@ namespace Jackett.Services
{
public interface ICacheService
{
- void CacheRssResults(string trackerId, ReleaseInfo[] releases);
+ void CacheRssResults(string trackerId, IEnumerable releases);
List GetCachedResults();
}
@@ -20,12 +20,7 @@ namespace Jackett.Services
private readonly int MAX_RESULTS_PER_TRACKER = 100;
private readonly TimeSpan AGE_LIMIT = new TimeSpan(2, 0, 0, 0);
- static CacheService()
- {
- Mapper.CreateMap();
- }
-
- public void CacheRssResults(string trackerId, ReleaseInfo[] releases)
+ public void CacheRssResults(string trackerId, IEnumerable releases)
{
lock (cache)
{
diff --git a/src/Jackett/Services/IndexerManagerService.cs b/src/Jackett/Services/IndexerManagerService.cs
index fe6ed4f06..28b855f43 100644
--- a/src/Jackett/Services/IndexerManagerService.cs
+++ b/src/Jackett/Services/IndexerManagerService.cs
@@ -77,8 +77,8 @@ namespace Jackett.Services
var indexer = GetIndexer(name);
var browseQuery = new TorznabQuery();
var results = await indexer.PerformQuery(browseQuery);
- logger.Info(string.Format("Found {0} releases from {1}", results.Length, indexer.DisplayName));
- if (results.Length == 0)
+ logger.Info(string.Format("Found {0} releases from {1}", results.Count(), indexer.DisplayName));
+ if (results.Count() == 0)
throw new Exception("Found no results while trying to browse this tracker");
}
diff --git a/src/Jackett/Utils/TorznabCapsUtil.cs b/src/Jackett/Utils/TorznabCapsUtil.cs
index d9a25b23e..3dbe0db83 100644
--- a/src/Jackett/Utils/TorznabCapsUtil.cs
+++ b/src/Jackett/Utils/TorznabCapsUtil.cs
@@ -16,9 +16,9 @@ namespace Jackett.Utils
caps.TVSearchAvailable = true;
caps.SupportsTVRageSearch = false;
caps.Categories.AddRange(new[] {
- TorznabCategory.TV,
- TorznabCategory.TVSD,
- TorznabCategory.TVHD
+ TorznabCatType.TV,
+ TorznabCatType.TVSD,
+ TorznabCatType.TVHD
});
return caps;
}