diff --git a/src/Jackett.Common/Indexers/BaseIndexer.cs b/src/Jackett.Common/Indexers/BaseIndexer.cs index 2cd860294..3539c9918 100644 --- a/src/Jackett.Common/Indexers/BaseIndexer.cs +++ b/src/Jackett.Common/Indexers/BaseIndexer.cs @@ -241,7 +241,21 @@ namespace Jackett.Common.Indexers { if (release.Title.IsNullOrWhiteSpace()) { - logger.Error("Invalid Release: '{0}' from indexer: {1}. No title provided.", release.Details, Name); + logger.Error("[{0}] Invalid Release: '{1}'. No title provided.", Id, release.Details); + + return false; + } + + if (release.Size == null) + { + logger.Warn("[{0}] Invalid Release: '{1}'. No size provided.", Id, release.Details); + + return false; + } + + if (release.Category == null || !release.Category.Any()) + { + logger.Warn("[{0}] Invalid Release: '{1}'. No categories provided.", Id, release.Details); return false; } diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs index fd09d7820..ac51fbb57 100644 --- a/src/Jackett.Common/Indexers/CardigannIndexer.cs +++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs @@ -2193,34 +2193,52 @@ namespace Jackett.Common.Indexers case "category": if (FieldModifiers.Contains("noappend")) { - logger.Warn($"CardigannIndexer ({Id}): The \"noappend\" modifier is deprecated. Please switch to \"default\". See the Definition Format in the Wiki for more information."); + logger.Warn("CardigannIndexer ({0}): The \"noappend\" modifier is deprecated. Please switch to \"default\". See the Definition Format in the Wiki for more information.", Id); } var cats = MapTrackerCatToNewznab(value); + if (cats.Any()) { - if (release.Category == null || FieldModifiers.Contains("noappend")) - release.Category = cats; - else - release.Category = release.Category.Union(cats).ToList(); + release.Category = release.Category == null || FieldModifiers.Contains("noappend") + ? cats + : release.Category.Union(cats).ToList(); } - value = release.Category.ToString(); + + if (value.IsNotNullOrWhiteSpace() && !release.Category.Any()) + { + logger.Warn("[{0}] Invalid category for value: '{1}'", Id, value); + } + else + { + value = release.Category.ToString(); + } + break; case "categorydesc": if (FieldModifiers.Contains("noappend")) { - logger.Warn($"CardigannIndexer ({Id}): The \"noappend\" modifier is deprecated. Please switch to \"default\". See the Definition Format in the Wiki for more information."); + logger.Warn("CardigannIndexer ({0}): The \"noappend\" modifier is deprecated. Please switch to \"default\". See the Definition Format in the Wiki for more information.", Id); } var catsDesc = MapTrackerCatDescToNewznab(value); + if (catsDesc.Any()) { - if (release.Category == null || FieldModifiers.Contains("noappend")) - release.Category = catsDesc; - else - release.Category = release.Category.Union(catsDesc).ToList(); + release.Category = release.Category == null || FieldModifiers.Contains("noappend") + ? catsDesc + : release.Category.Union(catsDesc).ToList(); } - value = release.Category.ToString(); + + if (value.IsNotNullOrWhiteSpace() && !release.Category.Any()) + { + logger.Warn("[{0}] Invalid category for value: '{1}'", Id, value); + } + else + { + value = release.Category.ToString(); + } + break; case "size": release.Size = ParseUtil.GetBytes(value); diff --git a/src/Jackett.Common/Models/ReleaseInfo.cs b/src/Jackett.Common/Models/ReleaseInfo.cs index ecdc801ef..55cbd6f10 100644 --- a/src/Jackett.Common/Models/ReleaseInfo.cs +++ b/src/Jackett.Common/Models/ReleaseInfo.cs @@ -54,6 +54,7 @@ namespace Jackett.Common.Models public ReleaseInfo() { + Category = new List(); Languages = new List(); Subs = new List(); } diff --git a/src/Jackett.Test/Common/Indexers/BaseWebIndexerTests.cs b/src/Jackett.Test/Common/Indexers/BaseWebIndexerTests.cs index 79c6c5264..17e3c504c 100644 --- a/src/Jackett.Test/Common/Indexers/BaseWebIndexerTests.cs +++ b/src/Jackett.Test/Common/Indexers/BaseWebIndexerTests.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; +using Jackett.Common.Helpers; using Jackett.Common.Models; using Jackett.Test.TestHelpers; +using NLog; using NUnit.Framework; using Assert = NUnit.Framework.Assert; @@ -11,10 +13,12 @@ namespace Jackett.Test.Common.Indexers [TestFixture] public class BaseWebIndexerTests { + private readonly Logger _logger = LogManager.GetCurrentClassLogger(); + [Test] public void TestConstructor() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); var caps = indexer.TorznabCaps; Assert.True(caps.SearchAvailable); @@ -45,7 +49,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestFilterResultsCategories() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer.AddTestCategories(); var results = new List @@ -53,76 +57,81 @@ namespace Jackett.Test.Common.Indexers new ReleaseInfo { Title = "Release 1", - Category = new List { TorznabCatType.Movies.ID } + Category = new List { TorznabCatType.Movies.ID }, + Size = 2.Gigabytes() }, new ReleaseInfo { Title = "Release 2", - Category = new List { TorznabCatType.MoviesSD.ID } + Category = new List { TorznabCatType.MoviesSD.ID }, + Size = 2.Gigabytes() }, new ReleaseInfo { Title = "Release 3", - Category = new List { TorznabCatType.BooksEBook.ID, 100004 } // torznab (mandatory) + custom cat + Category = new List { TorznabCatType.BooksEBook.ID, 100004 }, // torznab (mandatory) + custom cat + Size = 2.Gigabytes() }, new ReleaseInfo { Title = "Release 4", - Category = new List { TorznabCatType.AudioLossless.ID } // unsupported category in this indexer + Category = new List { TorznabCatType.AudioLossless.ID }, // unsupported category in this indexer + Size = 2.Gigabytes() }, new ReleaseInfo { - Title = "Release 5", + Title = "Release 5" } }; var query = new TorznabQuery(); // without categories var filteredResults = indexer._FilterResults(query, results).ToList(); - Assert.AreEqual(5, filteredResults.Count); + Assert.AreEqual(4, filteredResults.Count); query = new TorznabQuery // with child category { Categories = new[] { TorznabCatType.MoviesSD.ID } }; filteredResults = indexer._FilterResults(query, results).ToList(); - Assert.AreEqual(2, filteredResults.Count); + Assert.AreEqual(1, filteredResults.Count); Assert.AreEqual(TorznabCatType.MoviesSD.ID, filteredResults[0].Category.First()); - Assert.AreEqual(null, filteredResults[1].Category); query = new TorznabQuery // with parent category { Categories = new[] { TorznabCatType.Movies.ID } }; filteredResults = indexer._FilterResults(query, results).ToList(); - Assert.AreEqual(3, filteredResults.Count); + Assert.AreEqual(2, filteredResults.Count); Assert.AreEqual(TorznabCatType.Movies.ID, filteredResults[0].Category.First()); Assert.AreEqual(TorznabCatType.MoviesSD.ID, filteredResults[1].Category.First()); - Assert.AreEqual(null, filteredResults[2].Category); query = new TorznabQuery // with custom category { Categories = new[] { 100004 } }; filteredResults = indexer._FilterResults(query, results).ToList(); - Assert.AreEqual(2, filteredResults.Count); + Assert.AreEqual(1, filteredResults.Count); Assert.AreEqual(TorznabCatType.BooksEBook.ID, filteredResults[0].Category.First()); - Assert.AreEqual(null, filteredResults[1].Category); } [Test] public void TestFilterResultsLimit() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); var results = new List { new ReleaseInfo { - Title = "Release 1" + Title = "Release 1", + Category = new List { TorznabCatType.Movies.ID }, + Size = 2.Gigabytes() }, new ReleaseInfo { - Title = "Release 2" + Title = "Release 2", + Category = new List { TorznabCatType.Movies.ID }, + Size = 2.Gigabytes() } }; @@ -141,7 +150,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestFixResultsOriginPublishDate() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); var query = new TorznabQuery(); var results = new List { @@ -163,7 +172,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestFixResultsMagnet() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); var query = new TorznabQuery(); // get info_hash from magnet @@ -202,7 +211,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestAddCategoryMapping() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); // you can find more complex tests in TorznabCapabilitiesCategoriesTests.cs indexer._AddCategoryMapping("11", TorznabCatType.MoviesSD, "MoviesSD"); @@ -222,7 +231,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestAddMultiCategoryMapping() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer._AddMultiCategoryMapping(TorznabCatType.MoviesHD, 19, 18); Assert.AreEqual(1, indexer.TorznabCaps.Categories.GetTorznabCategoryTree().Count); @@ -231,7 +240,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestMapTorznabCapsToTrackers() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer.AddTestCategories(); // you can find more complex tests in TorznabCapabilitiesCategoriesTests.cs @@ -248,7 +257,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestMapTrackerCatToNewznab() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer.AddTestCategories(); // you can find more complex tests in TorznabCapabilitiesCategoriesTests.cs @@ -260,7 +269,7 @@ namespace Jackett.Test.Common.Indexers [Test] public void TestMapTrackerCatDescToNewznab() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer.AddTestCategories(); // you can find more complex tests in TorznabCapabilitiesCategoriesTests.cs diff --git a/src/Jackett.Test/Common/Models/DTO/IndexerTests.cs b/src/Jackett.Test/Common/Models/DTO/IndexerTests.cs index c7b6aabb9..df150d5ff 100644 --- a/src/Jackett.Test/Common/Models/DTO/IndexerTests.cs +++ b/src/Jackett.Test/Common/Models/DTO/IndexerTests.cs @@ -1,6 +1,7 @@ using System.Linq; using Jackett.Common.Models.DTO; using Jackett.Test.TestHelpers; +using NLog; using NUnit.Framework; using Assert = NUnit.Framework.Assert; @@ -9,10 +10,12 @@ namespace Jackett.Test.Common.Models.DTO [TestFixture] public class IndexerTests { + private readonly Logger _logger = LogManager.GetCurrentClassLogger(); + [Test] public void TestConstructor() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); var dto = new Indexer(indexer); Assert.AreEqual("test_id", dto.id); @@ -31,7 +34,7 @@ namespace Jackett.Test.Common.Models.DTO [Test] public void TestConstructorWithCategories() { - var indexer = new TestWebIndexer(); + var indexer = new TestWebIndexer(_logger); indexer.AddTestCategories(); // test Jackett UI categories (internal JSON) diff --git a/src/Jackett.Test/TestHelpers/TestWebIndexer.cs b/src/Jackett.Test/TestHelpers/TestWebIndexer.cs index 4fb0517f6..b67d6d20c 100644 --- a/src/Jackett.Test/TestHelpers/TestWebIndexer.cs +++ b/src/Jackett.Test/TestHelpers/TestWebIndexer.cs @@ -6,6 +6,7 @@ using Jackett.Common.Indexers; using Jackett.Common.Models; using Jackett.Common.Models.IndexerConfig; using Newtonsoft.Json.Linq; +using NLog; namespace Jackett.Test.TestHelpers { @@ -30,8 +31,8 @@ namespace Jackett.Test.TestHelpers public override TorznabCapabilities TorznabCaps { get; protected set; } = new TorznabCapabilities(); - public TestWebIndexer() - : base(client: null, configService: null, logger: null, configData: new ConfigurationData(), p: null, cacheService: null) + public TestWebIndexer(Logger logger) + : base(client: null, configService: null, logger: logger, configData: new ConfigurationData(), p: null, cacheService: null) { }