diff --git a/src/Jackett.Updater/Program.cs b/src/Jackett.Updater/Program.cs index 882d73ad7..6bc6969e8 100644 --- a/src/Jackett.Updater/Program.cs +++ b/src/Jackett.Updater/Program.cs @@ -76,7 +76,7 @@ namespace Jackett.Updater #endif */ } - catch (ArgumentException e) + catch (ArgumentException) { Engine.Logger.Info("Process " + pid.ToString() + " is already dead"); } diff --git a/src/Jackett/Indexers/7tor.cs b/src/Jackett/Indexers/7tor.cs index a2c534686..b426aa275 100644 --- a/src/Jackett/Indexers/7tor.cs +++ b/src/Jackett/Indexers/7tor.cs @@ -18,7 +18,7 @@ using System.Web; namespace Jackett.Indexers { - public class SevenTor : BaseIndexer, IIndexer + public class SevenTor : BaseIndexer { string LoginUrl { get { return SiteLink + "ucp.php?mode=login"; } } string SearchUrl { get { return SiteLink + "search.php"; } } @@ -1584,7 +1584,7 @@ namespace Jackett.Indexers AddCategoryMapping(1569, TorznabCatType.Other, " Amateur videos"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -1606,7 +1606,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/Abnormal.cs b/src/Jackett/Indexers/Abnormal.cs index 56bd2ca96..72f12730f 100644 --- a/src/Jackett/Indexers/Abnormal.cs +++ b/src/Jackett/Indexers/Abnormal.cs @@ -22,7 +22,7 @@ namespace Jackett.Indexers /// /// Provider for Abnormal Private French Tracker /// - public class Abnormal : BaseIndexer, IIndexer + public class Abnormal : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php"; } } @@ -104,7 +104,7 @@ namespace Jackett.Indexers /// /// Our params in Json /// Configuration state - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { // Retrieve config values set by Jackett's user LoadValuesFromJson(configJson); @@ -187,7 +187,7 @@ namespace Jackett.Indexers /// /// Query /// Releases - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var torrentRowList = new List(); diff --git a/src/Jackett/Indexers/Abstract/AvistazTracker.cs b/src/Jackett/Indexers/Abstract/AvistazTracker.cs index b3475e359..114854ad6 100644 --- a/src/Jackett/Indexers/Abstract/AvistazTracker.cs +++ b/src/Jackett/Indexers/Abstract/AvistazTracker.cs @@ -51,7 +51,7 @@ namespace Jackett.Indexers AddCategoryMapping(3, TorznabCatType.Audio); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); @@ -75,7 +75,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/Abstract/GazelleTracker.cs b/src/Jackett/Indexers/Abstract/GazelleTracker.cs index 9966066e9..a8941767d 100644 --- a/src/Jackett/Indexers/Abstract/GazelleTracker.cs +++ b/src/Jackett/Indexers/Abstract/GazelleTracker.cs @@ -44,7 +44,7 @@ namespace Jackett.Indexers.Abstract Encoding = Encoding.GetEncoding("UTF-8"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -68,7 +68,7 @@ namespace Jackett.Indexers.Abstract return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/AlphaRatio.cs b/src/Jackett/Indexers/AlphaRatio.cs index d79da44d1..fdc57b61b 100644 --- a/src/Jackett/Indexers/AlphaRatio.cs +++ b/src/Jackett/Indexers/AlphaRatio.cs @@ -19,7 +19,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class AlphaRatio : BaseIndexer, IIndexer + public class AlphaRatio : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "ajax.php?action=browse&order_by=time&order_way=desc&"; } } @@ -71,7 +71,7 @@ namespace Jackett.Indexers set { base.configData = value; } } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -123,7 +123,7 @@ namespace Jackett.Indexers } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/Andraste.cs b/src/Jackett/Indexers/Andraste.cs index 790b49a23..b754c4d8d 100644 --- a/src/Jackett/Indexers/Andraste.cs +++ b/src/Jackett/Indexers/Andraste.cs @@ -16,7 +16,7 @@ using System.Linq; namespace Jackett.Indexers { - public class Andraste : BaseIndexer, IIndexer + public class Andraste : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string BrowseUrl { get { return SiteLink + "browse.php"; } } @@ -74,7 +74,7 @@ namespace Jackett.Indexers AddCategoryMapping(32, TorznabCatType.XXX); // XXX } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -95,7 +95,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/AnimeBytes.cs b/src/Jackett/Indexers/AnimeBytes.cs index f004d50e2..f8779c96c 100644 --- a/src/Jackett/Indexers/AnimeBytes.cs +++ b/src/Jackett/Indexers/AnimeBytes.cs @@ -22,7 +22,7 @@ using System.Web; namespace Jackett.Indexers { - public class AnimeBytes : BaseIndexer, IIndexer + public class AnimeBytes : BaseIndexer { enum SearchType { @@ -73,7 +73,7 @@ namespace Jackett.Indexers return input; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -151,7 +151,7 @@ namespace Jackett.Indexers return term; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { // The result list var releases = new List(); diff --git a/src/Jackett/Indexers/AnimeTorrents.cs b/src/Jackett/Indexers/AnimeTorrents.cs index e58083ee2..e5ac700fa 100644 --- a/src/Jackett/Indexers/AnimeTorrents.cs +++ b/src/Jackett/Indexers/AnimeTorrents.cs @@ -20,7 +20,7 @@ using System.Globalization; namespace Jackett.Indexers { - public class AnimeTorrents : BaseIndexer, IIndexer + public class AnimeTorrents : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "ajax/torrents_data.php"; } } @@ -68,7 +68,7 @@ namespace Jackett.Indexers AddCategoryMapping(19, TorznabCatType.Audio); // OST } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -91,7 +91,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/ArcheTorrent.cs b/src/Jackett/Indexers/ArcheTorrent.cs index 2dc3e7c8b..d34fd4380 100644 --- a/src/Jackett/Indexers/ArcheTorrent.cs +++ b/src/Jackett/Indexers/ArcheTorrent.cs @@ -18,7 +18,7 @@ using Jackett.Utils.Clients; namespace Jackett.Indexers { - class ArcheTorrent : BaseIndexer, IIndexer + class ArcheTorrent : BaseIndexer { string LoginUrl { get { return SiteLink + "account-login.php"; } } string BrowseUrl { get { return SiteLink + "torrents-search.php"; } } @@ -98,7 +98,7 @@ namespace Jackett.Indexers AddCategoryMapping (61, TorznabCatType.TVSD, "Tv: DVDRip"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); @@ -119,7 +119,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/BB.cs b/src/Jackett/Indexers/BB.cs index 0f15e68aa..7884ea7cd 100644 --- a/src/Jackett/Indexers/BB.cs +++ b/src/Jackett/Indexers/BB.cs @@ -20,7 +20,7 @@ namespace Jackett.Indexers { // To comply with the rules for this tracker, only the acronym is used and no publicly displayed URLs to the site. - public class BB : BaseIndexer, IIndexer + public class BB : BaseIndexer { private string BaseUrl { get { return StringUtil.FromBase64("aHR0cHM6Ly9iYWNvbmJpdHMub3JnLw=="); } } private Uri BaseUri { get { return new Uri(BaseUrl); } } @@ -61,7 +61,7 @@ namespace Jackett.Indexers AddCategoryMapping(11, TorznabCatType.PCGames); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -89,7 +89,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/BJShare.cs b/src/Jackett/Indexers/BJShare.cs index dc5a704c7..85c63ecd2 100644 --- a/src/Jackett/Indexers/BJShare.cs +++ b/src/Jackett/Indexers/BJShare.cs @@ -17,7 +17,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class BJShare : BaseIndexer, IIndexer + public class BJShare : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string BrowseUrl { get { return SiteLink + "torrents.php"; } } @@ -68,7 +68,7 @@ namespace Jackett.Indexers AddCategoryMapping(201, TorznabCatType.XXXImageset); // Fotos Adultas } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -96,7 +96,7 @@ namespace Jackett.Indexers return term.Trim(); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/BakaBT.cs b/src/Jackett/Indexers/BakaBT.cs index 6e73d4023..03613463b 100644 --- a/src/Jackett/Indexers/BakaBT.cs +++ b/src/Jackett/Indexers/BakaBT.cs @@ -17,7 +17,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class BakaBT : BaseIndexer, IIndexer + public class BakaBT : BaseIndexer { public string SearchUrl { get { return SiteLink + "browse.php?only=0&incomplete=1&lossless=1&hd=1&multiaudio=1&bonus=1&reorder=1&q="; } } public string LoginUrl { get { return SiteLink + "login.php"; } } @@ -46,7 +46,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -75,7 +75,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { // This tracker only deals with full seasons so chop off the episode/season number if we have it D: diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index 4dd6d052a..c724ff2a1 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -16,7 +16,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public abstract class BaseIndexer + public abstract class BaseIndexer : IIndexer { public string SiteLink { get; protected set; } public string DefaultSiteLink { get; protected set; } @@ -64,7 +64,7 @@ namespace Jackett.Indexers public BaseIndexer(string name, string link, string description, IIndexerManagerService manager, IWebClient client, Logger logger, ConfigurationData configData, IProtectionService p, TorznabCapabilities caps = null, string downloadBase = null) : this(manager, client, logger, p) { - if (!link.EndsWith("/")) + if (!link.EndsWith("/", StringComparison.Ordinal)) throw new Exception("Site link must end with a slash."); DisplayName = name; @@ -96,7 +96,7 @@ namespace Jackett.Indexers return releases; foreach (var release in releases) { - if (release.Link.ToString().StartsWith(downloadUrlBase)) + if (release.Link.ToString().StartsWith(downloadUrlBase, StringComparison.Ordinal)) { release.Link = new Uri(release.Link.ToString().Substring(downloadUrlBase.Length), UriKind.Relative); } @@ -112,7 +112,7 @@ namespace Jackett.Indexers return link; } - if (link.ToString().StartsWith(downloadUrlBase)) + if (link.ToString().StartsWith(downloadUrlBase, StringComparison.Ordinal)) { return link; } @@ -334,7 +334,7 @@ namespace Jackett.Indexers { configData.SiteLink.Value = DefaultSiteLink; } - if (!configData.SiteLink.Value.EndsWith("/")) + if (!configData.SiteLink.Value.EndsWith("/", StringComparison.Ordinal)) configData.SiteLink.Value += "/"; var match = Regex.Match(configData.SiteLink.Value, "^https?:\\/\\/[\\w\\-\\/\\.]+$"); @@ -362,12 +362,11 @@ namespace Jackett.Indexers } } - public async virtual Task Download(Uri link) - { + public async virtual Task Download(Uri link) { return await Download(link, RequestType.GET); } - public async virtual Task Download(Uri link, RequestType method = RequestType.GET) + protected async Task Download(Uri link, RequestType method) { // do some extra escaping, needed for HD-Torrents var requestLink = link.ToString() @@ -663,5 +662,8 @@ namespace Jackett.Indexers return false; return true; } + + public abstract Task ApplyConfiguration (JToken configJson); + public abstract Task> PerformQuery (TorznabQuery query); } } diff --git a/src/Jackett/Indexers/BestFriends.cs b/src/Jackett/Indexers/BestFriends.cs index d6e986877..7be83192e 100644 --- a/src/Jackett/Indexers/BestFriends.cs +++ b/src/Jackett/Indexers/BestFriends.cs @@ -15,7 +15,7 @@ using System.Text; namespace Jackett.Indexers { - public class BestFriends : BaseIndexer, IIndexer + public class BestFriends : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string TakeLoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -92,7 +92,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -127,7 +127,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/BeyondHD.cs b/src/Jackett/Indexers/BeyondHD.cs index 3c92bec0f..e2e9095da 100644 --- a/src/Jackett/Indexers/BeyondHD.cs +++ b/src/Jackett/Indexers/BeyondHD.cs @@ -16,7 +16,7 @@ using System.Text; namespace Jackett.Indexers { - public class BeyondHD : BaseIndexer, IIndexer + public class BeyondHD : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php?searchin=title&incldead=0&"; } } @@ -85,7 +85,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -98,7 +98,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/BitCityReloaded.cs b/src/Jackett/Indexers/BitCityReloaded.cs index 96072a861..317198353 100644 --- a/src/Jackett/Indexers/BitCityReloaded.cs +++ b/src/Jackett/Indexers/BitCityReloaded.cs @@ -16,7 +16,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class BitCityReloaded : BaseIndexer, IIndexer + public class BitCityReloaded : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string BrowseUrl { get { return SiteLink + "uebersicht.php"; } } @@ -83,7 +83,7 @@ namespace Jackett.Indexers AddCategoryMapping(25, TorznabCatType.TVSport); // Sport } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -103,7 +103,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs index b1c4a5de5..3f8da8ace 100644 --- a/src/Jackett/Indexers/BitHdtv.cs +++ b/src/Jackett/Indexers/BitHdtv.cs @@ -19,7 +19,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class BitHdtv : BaseIndexer, IIndexer + public class BitHdtv : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string TakeLoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -71,7 +71,7 @@ namespace Jackett.Indexers return result; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -117,7 +117,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/BitMeTV.cs b/src/Jackett/Indexers/BitMeTV.cs index c707b7786..1b1d74625 100644 --- a/src/Jackett/Indexers/BitMeTV.cs +++ b/src/Jackett/Indexers/BitMeTV.cs @@ -19,7 +19,7 @@ using System.Web; namespace Jackett.Indexers { - public class BitMeTV : BaseIndexer, IIndexer + public class BitMeTV : BaseIndexer { //https is poorly implemented on BitMeTV. Site uses http to login, but then redirects to https for search private string LoginUrl { get { return SiteLink + "login.php"; } } @@ -62,7 +62,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -87,7 +87,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var episodeSearchUrl = string.Format("{0}?search={1}&cat=0&incldead=1", SearchUrl, HttpUtility.UrlEncode(query.GetQueryString())); diff --git a/src/Jackett/Indexers/BitSoup.cs b/src/Jackett/Indexers/BitSoup.cs index 89448976e..1ad94aa99 100644 --- a/src/Jackett/Indexers/BitSoup.cs +++ b/src/Jackett/Indexers/BitSoup.cs @@ -20,7 +20,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class BitSoup : BaseIndexer, IIndexer + public class BitSoup : BaseIndexer { private string BrowseUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -142,7 +142,7 @@ namespace Jackett.Indexers //AddCategoryMapping("1", TorznabCatType.BooksForeign); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -164,7 +164,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/BroadcastTheNet.cs b/src/Jackett/Indexers/BroadcastTheNet.cs index 7387d052f..098c2e712 100644 --- a/src/Jackett/Indexers/BroadcastTheNet.cs +++ b/src/Jackett/Indexers/BroadcastTheNet.cs @@ -20,7 +20,7 @@ using Newtonsoft.Json; namespace Jackett.Indexers { - public class BroadcastTheNet : BaseIndexer, IIndexer + public class BroadcastTheNet : BaseIndexer { string APIBASE = "https://api.broadcasthe.net"; @@ -46,7 +46,7 @@ namespace Jackett.Indexers Type = "private"; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -78,7 +78,7 @@ namespace Jackett.Indexers return request.ToString(); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var searchString = query.GetQueryString(); var releases = new List(); diff --git a/src/Jackett/Indexers/CardigannIndexer.cs b/src/Jackett/Indexers/CardigannIndexer.cs index b01201a2f..84b79d933 100644 --- a/src/Jackett/Indexers/CardigannIndexer.cs +++ b/src/Jackett/Indexers/CardigannIndexer.cs @@ -22,7 +22,7 @@ using System.Linq; namespace Jackett.Indexers { - public class CardigannIndexer : BaseIndexer, IIndexer + public class CardigannIndexer : BaseIndexer { public string DefinitionString { get; protected set; } protected IndexerDefinition Definition; @@ -937,7 +937,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -1138,7 +1138,7 @@ namespace Jackett.Indexers return new Uri(currentUrl, path); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/DanishBits.cs b/src/Jackett/Indexers/DanishBits.cs index a6f9a834a..737a2e617 100644 --- a/src/Jackett/Indexers/DanishBits.cs +++ b/src/Jackett/Indexers/DanishBits.cs @@ -18,7 +18,7 @@ using Jackett.Utils; namespace Jackett.Indexers { - public class DanishBits : BaseIndexer, IIndexer + public class DanishBits : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php"; } } @@ -125,7 +125,7 @@ namespace Jackett.Indexers AddCategoryMapping(6, TorznabCatType.AudioAudiobook); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -148,7 +148,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 2, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/Demonoid.cs b/src/Jackett/Indexers/Demonoid.cs index 2725bd91c..95b5252fb 100644 --- a/src/Jackett/Indexers/Demonoid.cs +++ b/src/Jackett/Indexers/Demonoid.cs @@ -16,7 +16,7 @@ using System.Web; namespace Jackett.Indexers { - public class Demonoid : BaseIndexer, IIndexer + public class Demonoid : BaseIndexer { private string LoginUrl { get { return SiteLink + "account_handler.php"; } } private string SearchUrl { get { return SiteLink + "files/?category={0}&subcategory=All&quality=All&seeded=2&to=1&query={1}&external=2"; } } @@ -56,7 +56,7 @@ namespace Jackett.Indexers AddCategoryMapping(3, TorznabCatType.TV, "TV"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -77,7 +77,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var trackerCats = MapTorznabCapsToTrackers(query); diff --git a/src/Jackett/Indexers/DigitalHive.cs b/src/Jackett/Indexers/DigitalHive.cs index b26d55fe6..a86159874 100644 --- a/src/Jackett/Indexers/DigitalHive.cs +++ b/src/Jackett/Indexers/DigitalHive.cs @@ -17,7 +17,7 @@ using System.IO; namespace Jackett.Indexers { - public class DigitalHive : BaseIndexer, IIndexer + public class DigitalHive : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "login.php?returnto=%2F"; } } @@ -101,7 +101,7 @@ namespace Jackett.Indexers return result; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -145,7 +145,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/EliteTracker.cs b/src/Jackett/Indexers/EliteTracker.cs index e469798cc..921a569c6 100644 --- a/src/Jackett/Indexers/EliteTracker.cs +++ b/src/Jackett/Indexers/EliteTracker.cs @@ -18,7 +18,7 @@ using Jackett.Utils.Clients; namespace Jackett.Indexers { - class EliteTracker : BaseIndexer, IIndexer + class EliteTracker : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string BrowseUrl { get { return SiteLink + "browse.php"; } } @@ -122,7 +122,7 @@ namespace Jackett.Indexers AddCategoryMapping(37, TorznabCatType.XXX, "XXX"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); @@ -143,7 +143,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/FileList.cs b/src/Jackett/Indexers/FileList.cs index ecb6cae41..3172bb808 100644 --- a/src/Jackett/Indexers/FileList.cs +++ b/src/Jackett/Indexers/FileList.cs @@ -21,7 +21,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class FileList : BaseIndexer, IIndexer + public class FileList : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string BrowseUrl { get { return SiteLink + "browse.php"; } } @@ -73,7 +73,7 @@ namespace Jackett.Indexers AddCategoryMapping(7, TorznabCatType.XXX); //XXX } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -91,7 +91,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchUrl = BrowseUrl; diff --git a/src/Jackett/Indexers/FunFile.cs b/src/Jackett/Indexers/FunFile.cs index fa791dd5e..d5d55268f 100644 --- a/src/Jackett/Indexers/FunFile.cs +++ b/src/Jackett/Indexers/FunFile.cs @@ -14,7 +14,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class FunFile : BaseIndexer, IIndexer + public class FunFile : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -52,7 +52,7 @@ namespace Jackett.Indexers AddCategoryMapping(7, TorznabCatType.TV); // TV } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -72,7 +72,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/Fuzer.cs b/src/Jackett/Indexers/Fuzer.cs index 4776fee15..33e53dae6 100644 --- a/src/Jackett/Indexers/Fuzer.cs +++ b/src/Jackett/Indexers/Fuzer.cs @@ -20,7 +20,7 @@ using System.Threading; namespace Jackett.Indexers { - public class Fuzer : BaseIndexer, IIndexer + public class Fuzer : BaseIndexer { private string SearchUrl { get { return SiteLink + "index.php?name=torrents&"; } } private string LoginUrl { get { return SiteLink + "login.php"; } } @@ -90,7 +90,7 @@ namespace Jackett.Indexers AddMultiCategoryMapping(TorznabCatType.XXX, 16); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var loginPage = await RequestStringWithCookies(LoginUrl, string.Empty); @@ -116,7 +116,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var results = await performRegularQuery(query); if (results.Count() == 0) diff --git a/src/Jackett/Indexers/GFTracker.cs b/src/Jackett/Indexers/GFTracker.cs index a9856fa9f..844135226 100644 --- a/src/Jackett/Indexers/GFTracker.cs +++ b/src/Jackett/Indexers/GFTracker.cs @@ -22,7 +22,7 @@ namespace Jackett.Indexers // // Quick and dirty indexer for GFTracker. // - public class GFTracker : BaseIndexer, IIndexer + public class GFTracker : BaseIndexer { private string StartPageUrl { get { return SiteLink + "login.php?returnto=%2F"; } } private string LoginUrl { get { return SiteLink + "loginsite.php"; } } @@ -105,7 +105,7 @@ namespace Jackett.Indexers } } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -153,7 +153,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/GhostCity.cs b/src/Jackett/Indexers/GhostCity.cs index 8d4af82d0..0b069b4ef 100644 --- a/src/Jackett/Indexers/GhostCity.cs +++ b/src/Jackett/Indexers/GhostCity.cs @@ -16,7 +16,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class GhostCity : BaseIndexer, IIndexer + public class GhostCity : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string BrowsePage { get { return SiteLink + "browse.php"; } } @@ -82,7 +82,7 @@ namespace Jackett.Indexers AddMultiCategoryMapping(TorznabCatType.Other, 3, 93, 24); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -105,7 +105,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/GimmePeers.cs b/src/Jackett/Indexers/GimmePeers.cs index dea8caec9..f4e72d03d 100644 --- a/src/Jackett/Indexers/GimmePeers.cs +++ b/src/Jackett/Indexers/GimmePeers.cs @@ -18,7 +18,7 @@ using NLog; namespace Jackett.Indexers { // ReSharper disable once InconsistentNaming - public class GimmePeers : BaseIndexer, IIndexer + public class GimmePeers : BaseIndexer { private string BrowseUrl => SiteLink + "browse.php"; private string LoginUrl => SiteLink + "takelogin.php"; @@ -71,7 +71,7 @@ namespace Jackett.Indexers AddCategoryMapping(19, TorznabCatType.Movies); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -94,7 +94,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/HD4Free.cs b/src/Jackett/Indexers/HD4Free.cs index 0b143dc53..84aabb91b 100644 --- a/src/Jackett/Indexers/HD4Free.cs +++ b/src/Jackett/Indexers/HD4Free.cs @@ -16,7 +16,7 @@ using AngleSharp.Parser.Html; namespace Jackett.Indexers { - public class HD4Free : BaseIndexer, IIndexer + public class HD4Free : BaseIndexer { private string SearchUrl { get { return SiteLink + "ajax/initial_recall.php"; } } private string LoginUrl { get { return SiteLink + "login.php"; } } @@ -105,7 +105,7 @@ namespace Jackett.Indexers return result; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -154,7 +154,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/HDSpace.cs b/src/Jackett/Indexers/HDSpace.cs index dc04d3185..c90331ad5 100644 --- a/src/Jackett/Indexers/HDSpace.cs +++ b/src/Jackett/Indexers/HDSpace.cs @@ -18,7 +18,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class HDSpace : BaseIndexer, IIndexer + public class HDSpace : BaseIndexer { private string LoginUrl { get { return SiteLink + "index.php?page=login"; } } private string SearchUrl { get { return SiteLink + "index.php?page=torrents&"; } } @@ -75,7 +75,7 @@ namespace Jackett.Indexers AddCategoryMapping("38", TorznabCatType.Other); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -100,7 +100,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/HDTorrents.cs b/src/Jackett/Indexers/HDTorrents.cs index a270839fb..bb15ca051 100644 --- a/src/Jackett/Indexers/HDTorrents.cs +++ b/src/Jackett/Indexers/HDTorrents.cs @@ -19,7 +19,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class HDTorrents : BaseIndexer, IIndexer + public class HDTorrents : BaseIndexer { private string SearchUrl { get { return SiteLink + "torrents.php?"; } } private string LoginUrl { get { return SiteLink + "login.php"; } } @@ -79,7 +79,7 @@ namespace Jackett.Indexers AddCategoryMapping("67", TorznabCatType.Movies3D, "3D"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -100,7 +100,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchurls = new List(); diff --git a/src/Jackett/Indexers/Hardbay.cs b/src/Jackett/Indexers/Hardbay.cs index 2ceabe7d7..bec65c32c 100644 --- a/src/Jackett/Indexers/Hardbay.cs +++ b/src/Jackett/Indexers/Hardbay.cs @@ -15,7 +15,7 @@ using System.Globalization; namespace Jackett.Indexers { - public class Hardbay : BaseIndexer, IIndexer + public class Hardbay : BaseIndexer { private string SearchUrl { get { return SiteLink + "api/v1/torrents"; } } private string LoginUrl { get { return SiteLink + "api/v1/auth"; } } @@ -45,7 +45,7 @@ namespace Jackett.Indexers AddCategoryMapping(2, TorznabCatType.AudioLossless); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var queryCollection = new NameValueCollection(); @@ -63,7 +63,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); var queryCollection = new NameValueCollection(); diff --git a/src/Jackett/Indexers/Hebits.cs b/src/Jackett/Indexers/Hebits.cs index 9716728e3..0b48e9a4f 100644 --- a/src/Jackett/Indexers/Hebits.cs +++ b/src/Jackett/Indexers/Hebits.cs @@ -16,7 +16,7 @@ using System.Text; namespace Jackett.Indexers { - public class Hebits : BaseIndexer, IIndexer + public class Hebits : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string LoginPostUrl { get { return SiteLink + "takeloginAjax.php"; } } @@ -56,7 +56,7 @@ namespace Jackett.Indexers AddCategoryMapping(37, TorznabCatType.TVHD); // Israel HDTV } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -77,7 +77,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/Hounddawgs.cs b/src/Jackett/Indexers/Hounddawgs.cs index 0c1d947b5..cbeb60e0c 100644 --- a/src/Jackett/Indexers/Hounddawgs.cs +++ b/src/Jackett/Indexers/Hounddawgs.cs @@ -23,7 +23,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class Hounddawgs : BaseIndexer, IIndexer + public class Hounddawgs : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php"; } } @@ -84,7 +84,7 @@ namespace Jackett.Indexers AddCategoryMapping(67, TorznabCatType.XXX, "XXX"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -107,7 +107,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/HouseOfTorrents.cs b/src/Jackett/Indexers/HouseOfTorrents.cs index 9c48d84b3..769a85f75 100644 --- a/src/Jackett/Indexers/HouseOfTorrents.cs +++ b/src/Jackett/Indexers/HouseOfTorrents.cs @@ -17,7 +17,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class HouseOfTorrents : BaseIndexer, IIndexer + public class HouseOfTorrents : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -97,7 +97,7 @@ namespace Jackett.Indexers AddCategoryMapping(81, TorznabCatType.XXXPacks); // XXX/Pack } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -127,7 +127,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/IPTorrents.cs b/src/Jackett/Indexers/IPTorrents.cs index ffc84188d..1281a5160 100644 --- a/src/Jackett/Indexers/IPTorrents.cs +++ b/src/Jackett/Indexers/IPTorrents.cs @@ -19,7 +19,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class IPTorrents : BaseIndexer, IIndexer + public class IPTorrents : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string TakeLoginUrl { get { return SiteLink + "take_login.php"; } } @@ -149,7 +149,7 @@ namespace Jackett.Indexers - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -203,7 +203,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/ImmortalSeed.cs b/src/Jackett/Indexers/ImmortalSeed.cs index 264cf40c6..459b5f1be 100644 --- a/src/Jackett/Indexers/ImmortalSeed.cs +++ b/src/Jackett/Indexers/ImmortalSeed.cs @@ -18,7 +18,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class ImmortalSeed : BaseIndexer, IIndexer + public class ImmortalSeed : BaseIndexer { private string BrowsePage { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -71,7 +71,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -92,7 +92,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchUrl = BrowsePage; diff --git a/src/Jackett/Indexers/Meta/BaseMetaIndexer.cs b/src/Jackett/Indexers/Meta/BaseMetaIndexer.cs index 64e16edbd..f166fd824 100644 --- a/src/Jackett/Indexers/Meta/BaseMetaIndexer.cs +++ b/src/Jackett/Indexers/Meta/BaseMetaIndexer.cs @@ -13,98 +13,46 @@ using NLog; namespace Jackett.Indexers.Meta { - public class ImdbResolver { - public ImdbResolver(IWebClient webClient) { - WebClient = webClient; - } - - public async Task> GetAllTitles(string imdbId) { - if (!imdbId.StartsWith("tt")) - imdbId = "tt" + imdbId; - var request = new WebRequest("http://www.imdb.com/title/" + imdbId + "/releaseinfo"); - var result = await WebClient.GetString(request); - - CQ dom = result.Content; - - var mainTitle = dom["h3[itemprop=name]"].Find("a")[0].InnerHTML.Replace("\"", ""); - - var akas = dom["table#akas"].Find("tbody").Find("tr"); - var titleList = new List(); - titleList.Add(mainTitle); - foreach (var row in akas) { - string title = row.FirstElementChild.InnerHTML; - if (title == "(original title)" || title == "") - titleList.Add(HttpUtility.HtmlDecode(row.FirstElementChild.NextElementSibling.InnerHTML)); - } - - return titleList; - } - - private IWebClient WebClient; - } - - public abstract class BaseMetaIndexer : BaseIndexer, IIndexer + public abstract class BaseMetaIndexer : BaseIndexer { - protected BaseMetaIndexer(string name, string description, IIndexerManagerService manager, IWebClient webClient, Logger logger, ConfigurationData configData, IProtectionService p, Func filter) + protected BaseMetaIndexer(string name, string description, IFallbackStrategyProvider fallbackStrategyProvider, IResultFilterProvider resultFilterProvider, IIndexerManagerService manager, IWebClient webClient, Logger logger, ConfigurationData configData, IProtectionService p, Func filter) : base(name, "http://127.0.0.1/", description, manager, webClient, logger, configData, p, null, null) { filterFunc = filter; + this.fallbackStrategyProvider = fallbackStrategyProvider; + this.resultFilterProvider = resultFilterProvider; } - public Task ApplyConfiguration(JToken configJson) + public override Task ApplyConfiguration(JToken configJson) { return Task.FromResult(IndexerConfigurationStatus.Completed); } - public virtual async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { - IEnumerable>> tasks = Indexers.Where(i => i.CanHandleQuery(query)).Select(i => i.PerformQuery(query)).ToList(); // explicit conversion to List to execute LINQ query + IEnumerable>> supportedTasks = Indexers.Where(i => i.CanHandleQuery(query)).Select(i => i.PerformQuery(query)).ToList(); // explicit conversion to List to execute LINQ query - bool needFallback = query.IsImdbQuery; - IEnumerable fallbackTitles = null; - if (needFallback) { - var imdb = new ImdbResolver(webclient); - fallbackTitles = await imdb.GetAllTitles(query.ImdbID); - var fallbackQueries = fallbackTitles.Select(t => query.CreateFallback(t)); - var backupTasks = fallbackQueries.SelectMany(q => Indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.PerformQuery(q.Clone()))); - tasks = tasks.Concat(backupTasks.ToList()); // explicit conversion to List to execute LINQ query - } + var fallbackStrategies = fallbackStrategyProvider.FallbackStrategiesForQuery(query); + var fallbackQueries = fallbackStrategies.Select(async f => await f.FallbackQueries()).SelectMany(t => t.Result); + var fallbackTasks = fallbackQueries.SelectMany(q => Indexers.Where(i => !i.CanHandleQuery(query) && i.CanHandleQuery(q)).Select(i => i.PerformQuery(q.Clone()))); + var tasks = supportedTasks.Concat(fallbackTasks.ToList()); // explicit conversion to List to execute LINQ query + var aggregateTask = Task.WhenAll(tasks); - var aggregateTask = Task.WhenAll>(tasks); try { await aggregateTask; } catch { logger.Error(aggregateTask.Exception, "Error during request in metaindexer " + ID); } - var unorderedResult = tasks.Where(x => x.Status == TaskStatus.RanToCompletion).SelectMany(x => x.Result);; - if (needFallback) { - unorderedResult = unorderedResult.Where (r => { - var normalizedTitles = fallbackTitles.Concat (fallbackTitles.Select (t => t.Replace (' ', '.').Replace (":", ""))).Select (t => t.ToLowerInvariant ()); - foreach (var title in normalizedTitles) { - if (r.Title.ToLowerInvariant ().Contains (title)) - return true; - } - return false; - }); - } - var orderedResult = unorderedResult.OrderByDescending(r => r.Gain); - - var filteredResult = orderedResult.Where(r => { - if (r.Imdb != null) { - try { - return Int64.Parse(query.ImdbID.Select(c => char.IsDigit(c)).ToString()) == r.Imdb; - } catch { - // Cannot safely determine whether result is what we - // wanted, so let's just leave it alone... - } - } - return true; - }); + var unorderedResult = tasks.Where(x => x.Status == TaskStatus.RanToCompletion).SelectMany(x => x.Result); + var resultFilters = resultFilterProvider.FiltersForQuery(query); + var filteredResults = resultFilters.Select(async f => await f.FilterResults(unorderedResult)).SelectMany(t => t.Result); + var uniqueFilteredResults = filteredResults.Distinct(); + var orderedResults = uniqueFilteredResults.OrderByDescending(r => r.Gain); // Limiting the response size might be interesting for use-cases where there are // tons of trackers configured in Jackett. For now just use the limit param if // someone wants to do that. - IEnumerable result = filteredResult; + IEnumerable result = orderedResults; if (query.Limit > 0) result = result.Take(query.Limit); return result; @@ -150,5 +98,8 @@ namespace Jackett.Indexers.Meta IsConfigured = true; } } + + private IFallbackStrategyProvider fallbackStrategyProvider; + private IResultFilterProvider resultFilterProvider; } } diff --git a/src/Jackett/Indexers/Meta/Fallbacks.cs b/src/Jackett/Indexers/Meta/Fallbacks.cs new file mode 100644 index 000000000..f4ca8edab --- /dev/null +++ b/src/Jackett/Indexers/Meta/Fallbacks.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Jackett.Models; +using Jackett.Services; + +namespace Jackett.Indexers.Meta +{ + public interface IFallbackStrategy + { + Task> FallbackQueries(); + } + + public interface IFallbackStrategyProvider + { + IEnumerable FallbackStrategiesForQuery(TorznabQuery query); + } + + public class NoFallbackStrategy : IFallbackStrategy + { + public Task> FallbackQueries() + { + return Task.FromResult>(new List()); + } + } + + public class ImdbFallbackStrategy : IFallbackStrategy + { + public ImdbFallbackStrategy(IImdbResolver resolver, TorznabQuery query) + { + this.resolver = resolver; + this.titles = null; + this.query = query; + } + + public async Task> FallbackQueries() + { + if (titles == null) { + titles = await resolver.GetAllTitles(query.ImdbID); + } + return titles.Select(t => query.CreateFallback(t)); + } + + private IImdbResolver resolver; + private IEnumerable titles; + private TorznabQuery query; + } + + public class ImdbFallbackStrategyProvider : IFallbackStrategyProvider + { + public ImdbFallbackStrategyProvider(IImdbResolver resolver) + { + this.resolver = resolver; + } + + public IEnumerable FallbackStrategiesForQuery(TorznabQuery query) + { + var result = new List(); + if (!query.IsImdbQuery) + result.Add(new NoFallbackStrategy()); + else + result.Add(new ImdbFallbackStrategy(resolver, query)); + return result; + } + + private IImdbResolver resolver; + } +} diff --git a/src/Jackett/Indexers/Meta/MetaIndexers.cs b/src/Jackett/Indexers/Meta/MetaIndexers.cs index deddd7737..db41953ab 100644 --- a/src/Jackett/Indexers/Meta/MetaIndexers.cs +++ b/src/Jackett/Indexers/Meta/MetaIndexers.cs @@ -14,8 +14,8 @@ namespace Jackett.Indexers.Meta { class AggregateIndexer : BaseMetaIndexer { - public AggregateIndexer(IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) - : base("AggregateSearch", "This feed includes all configured trackers", i, wc, l, new ConfigurationData(), ps, x => true) + public AggregateIndexer(IFallbackStrategyProvider fallbackStrategyProvider, IResultFilterProvider resultFilterProvider, IIndexerManagerService i, IWebClient wc, Logger l, IProtectionService ps) + : base("AggregateSearch", "This feed includes all configured trackers", fallbackStrategyProvider, resultFilterProvider, i, wc, l, new ConfigurationData(), ps, x => true) { } } diff --git a/src/Jackett/Indexers/Meta/ResultFilters.cs b/src/Jackett/Indexers/Meta/ResultFilters.cs new file mode 100644 index 000000000..f8862c743 --- /dev/null +++ b/src/Jackett/Indexers/Meta/ResultFilters.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Jackett.Models; +using Jackett.Services; + +namespace Jackett.Indexers.Meta +{ + public interface IResultFilter + { + Task> FilterResults(IEnumerable results); + } + + public interface IResultFilterProvider + { + IEnumerable FiltersForQuery(TorznabQuery query); + } + + public class ImdbTitleResultFilter : IResultFilter + { + public ImdbTitleResultFilter(IImdbResolver resolver, TorznabQuery query) + { + this.resolver = resolver; + this.query = query; + } + + public async Task> FilterResults(IEnumerable results) + { + long? imdbId = null; + try { + var normalizedImdbId = String.Concat(query.ImdbID.Where(c => char.IsDigit(c))); + imdbId = Int64.Parse(normalizedImdbId); + } catch { + } + + IEnumerable perfectResults; + IEnumerable wrongResults; + + if (imdbId != null) { + var resultsWithImdbId = results.Where(r => r.Imdb != null); + wrongResults = resultsWithImdbId.Where(r => r.Imdb != imdbId); + perfectResults = resultsWithImdbId.Where(r => r.Imdb == imdbId); + } else { + wrongResults = new ReleaseInfo[] { }; + perfectResults = new ReleaseInfo[] { }; + } + + var remainingResults = results.Except(wrongResults).Except(perfectResults); + + var titles = await resolver.GetAllTitles(query.ImdbID); + var strippedTitles = titles.Select(t => RemoveSpecialChars(t)); + var normalizedTitles = strippedTitles.SelectMany(t => GenerateTitleVariants(t)); + + var titleFilteredResults = remainingResults.Where(r => { + // TODO Make it possible to configure case insensitivity + var containsAnyTitle = normalizedTitles.Select(t => r.Title.ToLowerInvariant().Contains(t.ToLowerInvariant())); + var isProbablyValidResult = containsAnyTitle.Any(b => b); + return isProbablyValidResult; + }); + + var filteredResults = perfectResults.Concat(titleFilteredResults).Distinct(); + return filteredResults; + } + + private static string RemoveSpecialChars(string title) + { + // TODO improve character replacement with invalid chars + return title.Replace(":", ""); + } + + private static IEnumerable GenerateTitleVariants(string title) + { + var delimiterVariants = new char[] { '.', '_' }; + var result = new List(); + var replacedTitles = delimiterVariants.Select(c => title.Replace(' ', c)); + + result.Add(title); + result.AddRange(replacedTitles); + + return result; + } + + private IImdbResolver resolver; + private TorznabQuery query; + } + + public class NoFilter : IResultFilter + { + public Task> FilterResults(IEnumerable results) + { + return Task.FromResult(results); + } + } + + public class ImdbTitleResultFilterProvider : IResultFilterProvider + { + public ImdbTitleResultFilterProvider(IImdbResolver resolver) + { + this.resolver = resolver; + } + + public IEnumerable FiltersForQuery(TorznabQuery query) + { + var result = new List(); + if (!query.IsImdbQuery) + result.Add(new NoFilter()); + else + result.Add(new ImdbTitleResultFilter(resolver, query)); + return result; + } + + private IImdbResolver resolver; + } +} diff --git a/src/Jackett/Indexers/MoreThanTV.cs b/src/Jackett/Indexers/MoreThanTV.cs index 397cba1a1..00a894bf4 100644 --- a/src/Jackett/Indexers/MoreThanTV.cs +++ b/src/Jackett/Indexers/MoreThanTV.cs @@ -19,7 +19,7 @@ using Jackett.Utils; namespace Jackett.Indexers { - public class MoreThanTV : BaseIndexer, IIndexer + public class MoreThanTV : BaseIndexer { private string LoginUrl => SiteLink + "login.php"; private string SearchUrl => SiteLink + "ajax.php?action=browse&searchstr="; @@ -45,7 +45,7 @@ namespace Jackett.Indexers Type = "private"; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -69,7 +69,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List { TorznabCatType.TV.ID }); var releases = new List(); diff --git a/src/Jackett/Indexers/MyAnonamouse.cs b/src/Jackett/Indexers/MyAnonamouse.cs index 46387efab..270e56d3e 100644 --- a/src/Jackett/Indexers/MyAnonamouse.cs +++ b/src/Jackett/Indexers/MyAnonamouse.cs @@ -21,7 +21,7 @@ using System.Globalization; namespace Jackett.Indexers { - public class Myanonamouse : BaseIndexer, IIndexer + public class Myanonamouse : BaseIndexer { private string LoginUrl { get { return SiteLink + "takelogin.php"; } } private string SearchUrl { get { return SiteLink + "tor/js/loadSearch2.php"; } } @@ -131,7 +131,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -153,7 +153,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/NCore.cs b/src/Jackett/Indexers/NCore.cs index da4d440a6..f4d335ff9 100644 --- a/src/Jackett/Indexers/NCore.cs +++ b/src/Jackett/Indexers/NCore.cs @@ -16,7 +16,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class NCore : BaseIndexer, IIndexer + public class NCore : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php"; } } @@ -82,7 +82,7 @@ namespace Jackett.Indexers AddCategoryMapping("ebook", TorznabCatType.Books , "Könyv eBook/EN"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -117,7 +117,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/NewRealWorld.cs b/src/Jackett/Indexers/NewRealWorld.cs index b8d03ac38..0117e2399 100644 --- a/src/Jackett/Indexers/NewRealWorld.cs +++ b/src/Jackett/Indexers/NewRealWorld.cs @@ -15,7 +15,7 @@ using System.Text; namespace Jackett.Indexers { - public class NewRealWorld : BaseIndexer, IIndexer + public class NewRealWorld : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string BrowseUrl { get { return SiteLink + "browse.php"; } } @@ -95,7 +95,7 @@ namespace Jackett.Indexers AddCategoryMapping(27, TorznabCatType.XXX); // XXX: SD } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -116,7 +116,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/Norbits.cs b/src/Jackett/Indexers/Norbits.cs index 20cc05cda..d789c9936 100644 --- a/src/Jackett/Indexers/Norbits.cs +++ b/src/Jackett/Indexers/Norbits.cs @@ -22,7 +22,7 @@ namespace Jackett.Indexers /// s /// Provider for Norbits Private Tracker /// - public class Norbits : BaseIndexer, IIndexer + public class Norbits : BaseIndexer { private string LoginUrl => SiteLink + "login.php"; private string LoginCheckUrl => SiteLink + "takelogin.php"; @@ -84,7 +84,7 @@ namespace Jackett.Indexers /// /// Our params in Json /// Configuration state - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { // Retrieve config values set by Jackett's user LoadValuesFromJson(configJson); @@ -222,7 +222,7 @@ namespace Jackett.Indexers /// /// Query /// Releases - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var torrentRowList = new List(); diff --git a/src/Jackett/Indexers/PassThePopcorn.cs b/src/Jackett/Indexers/PassThePopcorn.cs index 019be3892..0208be9db 100644 --- a/src/Jackett/Indexers/PassThePopcorn.cs +++ b/src/Jackett/Indexers/PassThePopcorn.cs @@ -16,7 +16,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class PassThePopcorn : BaseIndexer, IIndexer + public class PassThePopcorn : BaseIndexer { private string LoginUrl { get { return "https://passthepopcorn.me/ajax.php?action=login"; } } private string indexUrl { get { return "https://passthepopcorn.me/ajax.php?action=login"; } } @@ -65,7 +65,7 @@ namespace Jackett.Indexers AddCategoryMapping(5, TorznabCatType.TV, "Live Performance"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -94,7 +94,7 @@ namespace Jackett.Indexers }); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { await DoLogin(); diff --git a/src/Jackett/Indexers/PiXELHD.cs b/src/Jackett/Indexers/PiXELHD.cs index f8e88d2c5..a2b7c8319 100644 --- a/src/Jackett/Indexers/PiXELHD.cs +++ b/src/Jackett/Indexers/PiXELHD.cs @@ -17,7 +17,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - class PiXELHD : BaseIndexer, IIndexer + class PiXELHD : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string BrowseUrl { get { return SiteLink + "torrents.php"; } } @@ -86,7 +86,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); @@ -113,7 +113,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/PirateTheNet.cs b/src/Jackett/Indexers/PirateTheNet.cs index b3866c0db..70e9e161c 100644 --- a/src/Jackett/Indexers/PirateTheNet.cs +++ b/src/Jackett/Indexers/PirateTheNet.cs @@ -16,7 +16,7 @@ using System.Globalization; namespace Jackett.Indexers { - public class PirateTheNet : BaseIndexer, IIndexer + public class PirateTheNet : BaseIndexer { private string SearchUrl { get { return SiteLink + "torrentsutils.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -65,7 +65,7 @@ namespace Jackett.Indexers AddCategoryMapping("WebRip", TorznabCatType.MoviesWEBDL); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -89,7 +89,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/Pretome.cs b/src/Jackett/Indexers/Pretome.cs index a0986572e..1c3ec5cf9 100644 --- a/src/Jackett/Indexers/Pretome.cs +++ b/src/Jackett/Indexers/Pretome.cs @@ -16,7 +16,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class Pretome : BaseIndexer, IIndexer + public class Pretome : BaseIndexer { private string LoginUrl { get { return SiteLink + "takelogin.php"; } } private string LoginReferer { get { return SiteLink + "index.php?cat=1"; } } @@ -172,7 +172,7 @@ namespace Jackett.Indexers TorznabCaps.Categories.Add(newznabCategory); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -205,7 +205,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var queryUrl = SearchUrl; diff --git a/src/Jackett/Indexers/Rarbg.cs b/src/Jackett/Indexers/Rarbg.cs index b7e2697b8..d709d7ef9 100644 --- a/src/Jackett/Indexers/Rarbg.cs +++ b/src/Jackett/Indexers/Rarbg.cs @@ -16,7 +16,7 @@ using System.Web; namespace Jackett.Indexers { - public class Rarbg : BaseIndexer, IIndexer + public class Rarbg : BaseIndexer { readonly static string defaultSiteLink = "https://torrentapi.org/"; @@ -98,7 +98,7 @@ namespace Jackett.Indexers } } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); var releases = await PerformQuery(new TorznabQuery()); @@ -111,12 +111,12 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.Completed; } - public Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { - return PerformQuery(query, 0); + return await PerformQuery(query, 0); } - public async Task> PerformQuery(TorznabQuery query, int attempts = 0) + public async Task> PerformQuery(TorznabQuery query, int attempts) { await CheckToken(); var releases = new List(); diff --git a/src/Jackett/Indexers/RevolutionTT.cs b/src/Jackett/Indexers/RevolutionTT.cs index d1364f714..bc2848422 100644 --- a/src/Jackett/Indexers/RevolutionTT.cs +++ b/src/Jackett/Indexers/RevolutionTT.cs @@ -20,7 +20,7 @@ using System.Xml.Linq; namespace Jackett.Indexers { - public class RevolutionTT : BaseIndexer, IIndexer + public class RevolutionTT : BaseIndexer { private string LandingPageURL { get { return SiteLink + "login.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -186,7 +186,7 @@ namespace Jackett.Indexers AddCategoryMapping("TV/XViD", TorznabCatType.TVSD); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -230,7 +230,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/SceneAccess.cs b/src/Jackett/Indexers/SceneAccess.cs index 9dcd6ef88..7fea61c84 100644 --- a/src/Jackett/Indexers/SceneAccess.cs +++ b/src/Jackett/Indexers/SceneAccess.cs @@ -17,7 +17,7 @@ using System.Web; namespace Jackett.Indexers { - class SceneAccess : BaseIndexer, IIndexer + class SceneAccess : BaseIndexer { private string LoginUrl { get { return SiteLink + "login"; } } private string SearchUrl { get { return SiteLink + "all?search={0}&method=2"; } } @@ -91,7 +91,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -113,7 +113,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var results = await RequestStringWithCookiesAndRetry(string.Format(SearchUrl, HttpUtility.UrlEncode(query.GetQueryString()))); diff --git a/src/Jackett/Indexers/SceneFZ.cs b/src/Jackett/Indexers/SceneFZ.cs index 402d92e9b..99366d464 100644 --- a/src/Jackett/Indexers/SceneFZ.cs +++ b/src/Jackett/Indexers/SceneFZ.cs @@ -15,7 +15,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class SceneFZ : BaseIndexer, IIndexer + public class SceneFZ : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -92,7 +92,7 @@ namespace Jackett.Indexers AddCategoryMapping("scat34", TorznabCatType.Other); // Video } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary @@ -111,7 +111,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchUrl = BrowseUrl; diff --git a/src/Jackett/Indexers/SceneTime.cs b/src/Jackett/Indexers/SceneTime.cs index e7c603428..8a69e2ae6 100644 --- a/src/Jackett/Indexers/SceneTime.cs +++ b/src/Jackett/Indexers/SceneTime.cs @@ -15,7 +15,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class SceneTime : BaseIndexer, IIndexer + public class SceneTime : BaseIndexer { private string StartPageUrl { get { return SiteLink + "login.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -108,7 +108,7 @@ namespace Jackett.Indexers } } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -151,7 +151,7 @@ namespace Jackett.Indexers } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { Dictionary qParams = new Dictionary(); qParams.Add("cata", "yes"); diff --git a/src/Jackett/Indexers/Shazbat.cs b/src/Jackett/Indexers/Shazbat.cs index 1301a5967..bb5900862 100644 --- a/src/Jackett/Indexers/Shazbat.cs +++ b/src/Jackett/Indexers/Shazbat.cs @@ -22,7 +22,7 @@ using System.Xml.XPath; namespace Jackett.Indexers { - public class Shazbat : BaseIndexer, IIndexer + public class Shazbat : BaseIndexer { private string LoginUrl { get { return SiteLink + "login"; } } private string SearchUrl { get { return SiteLink + "search"; } } @@ -54,7 +54,7 @@ namespace Jackett.Indexers Type = "private"; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -97,7 +97,7 @@ namespace Jackett.Indexers return response; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/ShowRSS.cs b/src/Jackett/Indexers/ShowRSS.cs index 7c478e822..b588a887a 100644 --- a/src/Jackett/Indexers/ShowRSS.cs +++ b/src/Jackett/Indexers/ShowRSS.cs @@ -15,7 +15,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class ShowRSS : BaseIndexer, IIndexer + public class ShowRSS : BaseIndexer { private string SearchAllUrl { get { return SiteLink + "other/all.rss"; } } @@ -41,7 +41,7 @@ namespace Jackett.Indexers Type = "public"; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); var releases = await PerformQuery(new TorznabQuery()); @@ -59,7 +59,7 @@ namespace Jackett.Indexers throw new NotImplementedException(); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var episodeSearchUrl = string.Format(SearchAllUrl); diff --git a/src/Jackett/Indexers/SpeedCD.cs b/src/Jackett/Indexers/SpeedCD.cs index 5b17f105f..435d4498f 100644 --- a/src/Jackett/Indexers/SpeedCD.cs +++ b/src/Jackett/Indexers/SpeedCD.cs @@ -16,7 +16,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class SpeedCD : BaseIndexer, IIndexer + public class SpeedCD : BaseIndexer { private string LoginUrl { get { return SiteLink + "takelogin.php"; } } private string SearchUrl { get { return SiteLink + "browse.php"; } } @@ -75,7 +75,7 @@ namespace Jackett.Indexers AddCategoryMapping("29", TorznabCatType.AudioVideo); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -101,7 +101,7 @@ namespace Jackett.Indexers }); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/Superbits.cs b/src/Jackett/Indexers/Superbits.cs index 484b1b8f5..6f0ec420e 100644 --- a/src/Jackett/Indexers/Superbits.cs +++ b/src/Jackett/Indexers/Superbits.cs @@ -15,7 +15,7 @@ using System.Globalization; namespace Jackett.Indexers { - public class Superbits : BaseIndexer, IIndexer + public class Superbits : BaseIndexer { private string SearchUrl { get { return SiteLink + "api/v1/torrents"; } } private string LoginUrl { get { return SiteLink + "api/v1/auth"; } } @@ -67,7 +67,7 @@ namespace Jackett.Indexers AddCategoryMapping(22, TorznabCatType.XXX, "XXX"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var queryCollection = new NameValueCollection(); @@ -85,7 +85,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); var queryCollection = new NameValueCollection(); diff --git a/src/Jackett/Indexers/T411.cs b/src/Jackett/Indexers/T411.cs index 3fd415952..08c8d7f0d 100644 --- a/src/Jackett/Indexers/T411.cs +++ b/src/Jackett/Indexers/T411.cs @@ -15,7 +15,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class T411 : BaseIndexer, IIndexer + public class T411 : BaseIndexer { const string ApiUrl = "https://api.t411.al"; const string AuthUrl = ApiUrl + "/auth"; @@ -144,7 +144,7 @@ namespace Jackett.Indexers return configData.ApiToken.Value; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { configData.LoadValuesFromJson(configJson); @@ -166,7 +166,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); // API doesn't support getting the latest torrents, searching for the empty string will cause an error and all torrents returned diff --git a/src/Jackett/Indexers/TVChaosUK.cs b/src/Jackett/Indexers/TVChaosUK.cs index 421910b77..3ac508adc 100644 --- a/src/Jackett/Indexers/TVChaosUK.cs +++ b/src/Jackett/Indexers/TVChaosUK.cs @@ -21,7 +21,7 @@ using System.Xml.Linq; namespace Jackett.Indexers { - public class TVChaosUK : BaseIndexer, IIndexer + public class TVChaosUK : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string GetRSSKeyUrl { get { return SiteLink + "getrss.php"; } } @@ -107,7 +107,7 @@ namespace Jackett.Indexers AddCategoryMapping("HD Factual/Reality", TorznabCatType.TVHD); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -146,7 +146,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/TVVault.cs b/src/Jackett/Indexers/TVVault.cs index 82a7488ef..a1646cda5 100644 --- a/src/Jackett/Indexers/TVVault.cs +++ b/src/Jackett/Indexers/TVVault.cs @@ -15,7 +15,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class TVVault : BaseIndexer, IIndexer + public class TVVault : BaseIndexer { string LoginUrl { get { return SiteLink + "login.php"; } } string BrowseUrl { get { return SiteLink + "torrents.php"; } } @@ -45,7 +45,7 @@ namespace Jackett.Indexers AddCategoryMapping(2, TorznabCatType.Movies); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -74,7 +74,7 @@ namespace Jackett.Indexers return term.Trim(); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); diff --git a/src/Jackett/Indexers/TehConnection.cs b/src/Jackett/Indexers/TehConnection.cs index 481d5549a..8226734ba 100644 --- a/src/Jackett/Indexers/TehConnection.cs +++ b/src/Jackett/Indexers/TehConnection.cs @@ -16,7 +16,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class TehConnection : BaseIndexer, IIndexer + public class TehConnection : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string indexUrl { get { return SiteLink + "index.php"; } } @@ -58,7 +58,7 @@ namespace Jackett.Indexers AddCategoryMapping(1, TorznabCatType.MoviesWEBDL); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -86,7 +86,7 @@ namespace Jackett.Indexers }); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var loggedInCheck = await RequestStringWithCookies(SearchUrl); if (!loggedInCheck.Content.Contains("/logout.php")) diff --git a/src/Jackett/Indexers/TorrentBytes.cs b/src/Jackett/Indexers/TorrentBytes.cs index 29df21b67..181d98f50 100644 --- a/src/Jackett/Indexers/TorrentBytes.cs +++ b/src/Jackett/Indexers/TorrentBytes.cs @@ -19,7 +19,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class TorrentBytes : BaseIndexer, IIndexer + public class TorrentBytes : BaseIndexer { private string BrowseUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "takelogin.php"; } } @@ -74,7 +74,7 @@ namespace Jackett.Indexers AddCategoryMapping(24, TorznabCatType.XXXImageset); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -99,7 +99,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/TorrentDay.cs b/src/Jackett/Indexers/TorrentDay.cs index 81485f31c..09f8e0ab6 100644 --- a/src/Jackett/Indexers/TorrentDay.cs +++ b/src/Jackett/Indexers/TorrentDay.cs @@ -19,7 +19,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class TorrentDay : BaseIndexer, IIndexer + public class TorrentDay : BaseIndexer { private string StartPageUrl { get { return SiteLink + "login.php"; } } private string LoginUrl { get { return SiteLink + "tak3login.php"; } } @@ -121,7 +121,7 @@ namespace Jackett.Indexers return result; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -176,7 +176,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/TorrentHeaven.cs b/src/Jackett/Indexers/TorrentHeaven.cs index 2eb7bf5fc..b2e56c7eb 100644 --- a/src/Jackett/Indexers/TorrentHeaven.cs +++ b/src/Jackett/Indexers/TorrentHeaven.cs @@ -17,7 +17,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class TorrentHeaven : BaseIndexer, IIndexer + public class TorrentHeaven : BaseIndexer { string IndexUrl { get { return SiteLink + "index.php"; } } string LoginCompleteUrl { get { return SiteLink + "index.php?strWebValue=account&strWebAction=login_complete&ancestry=verify"; } } @@ -118,7 +118,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -156,7 +156,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/TorrentLeech.cs b/src/Jackett/Indexers/TorrentLeech.cs index 9c35d0840..b0a16ed55 100644 --- a/src/Jackett/Indexers/TorrentLeech.cs +++ b/src/Jackett/Indexers/TorrentLeech.cs @@ -18,7 +18,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class TorrentLeech : BaseIndexer, IIndexer + public class TorrentLeech : BaseIndexer { private string LoginUrl { get { return SiteLink + "user/account/login/"; } } private string SearchUrl { get { return SiteLink + "torrents/browse/index/"; } } @@ -94,7 +94,7 @@ namespace Jackett.Indexers AddCategoryMapping(38, TorznabCatType.Other, "Education"); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); await DoLogin(); @@ -117,7 +117,7 @@ namespace Jackett.Indexers }); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/TorrentNetwork.cs b/src/Jackett/Indexers/TorrentNetwork.cs index 53c3b18f9..d14edb433 100644 --- a/src/Jackett/Indexers/TorrentNetwork.cs +++ b/src/Jackett/Indexers/TorrentNetwork.cs @@ -15,7 +15,7 @@ using System.Text; namespace Jackett.Indexers { - public class TorrentNetwork : BaseIndexer, IIndexer + public class TorrentNetwork : BaseIndexer { string LoginUrl { get { return SiteLink + "takelogin.php"; } } string BrowseUrl { get { return SiteLink + "browse.php"; } } @@ -83,7 +83,7 @@ namespace Jackett.Indexers AddCategoryMapping(32, TorznabCatType.XXX); // XXX|SD } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -104,7 +104,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/TorrentSyndikat.cs b/src/Jackett/Indexers/TorrentSyndikat.cs index 872d4b7e7..900216609 100644 --- a/src/Jackett/Indexers/TorrentSyndikat.cs +++ b/src/Jackett/Indexers/TorrentSyndikat.cs @@ -17,7 +17,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class TorrentSyndikat : BaseIndexer, IIndexer + public class TorrentSyndikat : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "eing2.php"; } } @@ -93,7 +93,7 @@ namespace Jackett.Indexers AddCategoryMapping(39, TorznabCatType.Other); // Misc / Bildung } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -118,7 +118,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Indexers/Torrentech.cs b/src/Jackett/Indexers/Torrentech.cs index ae69f25c1..69316ecbb 100644 --- a/src/Jackett/Indexers/Torrentech.cs +++ b/src/Jackett/Indexers/Torrentech.cs @@ -18,7 +18,7 @@ using System.Web; namespace Jackett.Indexers { - public class Torrentech : BaseIndexer, IIndexer + public class Torrentech : BaseIndexer { string LoginUrl { get { return SiteLink + "index.php?act=Login&CODE=01&CookieDate=1"; } } string IndexUrl { get { return SiteLink + "index.php"; } } @@ -49,7 +49,7 @@ namespace Jackett.Indexers AddCategoryMapping(3, TorznabCatType.AudioOther); } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -68,7 +68,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/TransmitheNet.cs b/src/Jackett/Indexers/TransmitheNet.cs index c127687b5..c4cc2121f 100644 --- a/src/Jackett/Indexers/TransmitheNet.cs +++ b/src/Jackett/Indexers/TransmitheNet.cs @@ -16,7 +16,7 @@ using System.Text.RegularExpressions; namespace Jackett.Indexers { - public class TransmitheNet : BaseIndexer, IIndexer + public class TransmitheNet : BaseIndexer { private string LoginUrl { get { return SiteLink + "login.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php?action=basic&order_by=time&order_way=desc&search_type=0&taglist=&tags_type=0"; } } @@ -43,7 +43,7 @@ namespace Jackett.Indexers Type = "private"; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); await DoLogin(); @@ -74,7 +74,7 @@ namespace Jackett.Indexers }); } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var loggedInCheck = await RequestStringWithCookies(SearchUrl); if (!loggedInCheck.Content.Contains("logout.php")) diff --git a/src/Jackett/Indexers/Trezzor.cs b/src/Jackett/Indexers/Trezzor.cs index db9c9e795..de5334a50 100644 --- a/src/Jackett/Indexers/Trezzor.cs +++ b/src/Jackett/Indexers/Trezzor.cs @@ -19,7 +19,7 @@ using Jackett.Models.IndexerConfig; namespace Jackett.Indexers { - public class Trezzor : BaseIndexer, IIndexer + public class Trezzor : BaseIndexer { string LoginUrl { get { return SiteLink + "prihlasenie.php"; } } private string SearchUrl { get { return SiteLink + "torrents.php?"; } } @@ -83,7 +83,7 @@ namespace Jackett.Indexers } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -104,7 +104,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchurls = new List(); diff --git a/src/Jackett/Indexers/WiHD.cs b/src/Jackett/Indexers/WiHD.cs index 6cf124ad5..2833a3116 100644 --- a/src/Jackett/Indexers/WiHD.cs +++ b/src/Jackett/Indexers/WiHD.cs @@ -21,7 +21,7 @@ namespace Jackett.Indexers /// /// Provider for WiHD Private French Tracker /// - public class WiHD : BaseIndexer, IIndexer + public class WiHD : BaseIndexer { private string LoginUrl { get { return SiteLink + "login"; } } private string LoginCheckUrl { get { return SiteLink + "login_check"; } } @@ -97,7 +97,7 @@ namespace Jackett.Indexers /// /// Our params in Json /// Configuration state - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { // Retrieve config values set by Jackett's user LoadValuesFromJson(configJson); @@ -182,7 +182,7 @@ namespace Jackett.Indexers /// /// Query /// Releases - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var torrentRowList = new List(); diff --git a/src/Jackett/Indexers/XSpeeds.cs b/src/Jackett/Indexers/XSpeeds.cs index 020868d04..8e92a5cd3 100644 --- a/src/Jackett/Indexers/XSpeeds.cs +++ b/src/Jackett/Indexers/XSpeeds.cs @@ -19,7 +19,7 @@ using static Jackett.Models.IndexerConfig.ConfigurationData; namespace Jackett.Indexers { - public class XSpeeds : BaseIndexer, IIndexer + public class XSpeeds : BaseIndexer { string LandingUrl => SiteLink + "login.php"; string LoginUrl => SiteLink + "takelogin.php"; @@ -154,7 +154,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -204,7 +204,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/Xthor.cs b/src/Jackett/Indexers/Xthor.cs index 66dc55875..6bd1c6379 100644 --- a/src/Jackett/Indexers/Xthor.cs +++ b/src/Jackett/Indexers/Xthor.cs @@ -20,7 +20,7 @@ namespace Jackett.Indexers /// /// Provider for Xthor Private French Tracker /// - public class Xthor : BaseIndexer, IIndexer + public class Xthor : BaseIndexer { private static string ApiEndpoint => "https://api.xthor.bz/"; private string TorrentCommentUrl => TorrentDescriptionUrl; @@ -116,7 +116,7 @@ namespace Jackett.Indexers /// Our params in Json /// Configuration state #pragma warning disable 1998 - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) #pragma warning restore 1998 { // Provider not yet configured @@ -153,7 +153,7 @@ namespace Jackett.Indexers /// /// Query /// Releases - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchTerm = query.GetQueryString(); diff --git a/src/Jackett/Indexers/myAmity.cs b/src/Jackett/Indexers/myAmity.cs index 8bc14b187..91aea6ad0 100644 --- a/src/Jackett/Indexers/myAmity.cs +++ b/src/Jackett/Indexers/myAmity.cs @@ -15,7 +15,7 @@ using System.Text; namespace Jackett.Indexers { - public class myAmity : BaseIndexer, IIndexer + public class myAmity : BaseIndexer { string LoginUrl { get { return SiteLink + "account-login.php"; } } string BrowseUrl { get { return SiteLink + "torrents-search.php"; } } @@ -61,7 +61,7 @@ namespace Jackett.Indexers AddCategoryMapping(8, TorznabCatType.TV); // TV/HDTV - Serien } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -82,7 +82,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { TimeZoneInfo.TransitionTime startTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 3, 0, 0), 3, 5, DayOfWeek.Sunday); TimeZoneInfo.TransitionTime endTransition = TimeZoneInfo.TransitionTime.CreateFloatingDateRule(new DateTime(1, 1, 1, 4, 0, 0), 10, 5, DayOfWeek.Sunday); diff --git a/src/Jackett/Indexers/rutracker.cs b/src/Jackett/Indexers/rutracker.cs index 79b4c7311..b80c4d21a 100644 --- a/src/Jackett/Indexers/rutracker.cs +++ b/src/Jackett/Indexers/rutracker.cs @@ -14,7 +14,7 @@ using AngleSharp.Parser.Html; namespace Jackett.Indexers { - public class RuTracker : BaseIndexer, IIndexer + public class RuTracker : BaseIndexer { string LoginUrl { get { return SiteLink + "forum/login.php"; } } string SearchUrl { get { return SiteLink + "forum/tracker.php"; } } @@ -1458,7 +1458,7 @@ namespace Jackett.Indexers return configData; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); @@ -1493,7 +1493,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { var releases = new List(); var searchString = query.GetQueryString(); diff --git a/src/Jackett/Indexers/x264.cs b/src/Jackett/Indexers/x264.cs index cd58946fe..97b0bb0d5 100644 --- a/src/Jackett/Indexers/x264.cs +++ b/src/Jackett/Indexers/x264.cs @@ -15,7 +15,7 @@ using System.Collections.Specialized; namespace Jackett.Indexers { - public class x264 : BaseIndexer, IIndexer + public class x264 : BaseIndexer { private string SearchUrl { get { return SiteLink + "browse.php"; } } private string LoginUrl { get { return SiteLink + "login.php"; } } @@ -68,7 +68,7 @@ namespace Jackett.Indexers return result; } - public async Task ApplyConfiguration(JToken configJson) + public override async Task ApplyConfiguration(JToken configJson) { LoadValuesFromJson(configJson); var pairs = new Dictionary { @@ -109,7 +109,7 @@ namespace Jackett.Indexers return IndexerConfigurationStatus.RequiresTesting; } - public async Task> PerformQuery(TorznabQuery query) + public override async Task> PerformQuery(TorznabQuery query) { List releases = new List(); diff --git a/src/Jackett/Jackett.csproj b/src/Jackett/Jackett.csproj index eddf5944d..718c71ef2 100644 --- a/src/Jackett/Jackett.csproj +++ b/src/Jackett/Jackett.csproj @@ -373,6 +373,9 @@ + + + diff --git a/src/Jackett/JackettModule.cs b/src/Jackett/JackettModule.cs index be7764168..2318b1ea8 100644 --- a/src/Jackett/JackettModule.cs +++ b/src/Jackett/JackettModule.cs @@ -11,6 +11,8 @@ using Jackett.Utils.Clients; using AutoMapper; using Jackett.Models; using System.Reflection; +using Jackett.Services; +using Jackett.Indexers.Meta; namespace Jackett { @@ -20,7 +22,20 @@ namespace Jackett { // Just register everything! var thisAssembly = typeof(JackettModule).Assembly; - builder.RegisterAssemblyTypes(thisAssembly).Except().AsImplementedInterfaces().SingleInstance(); + builder.RegisterAssemblyTypes(thisAssembly) + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .Except() + .AsImplementedInterfaces().SingleInstance(); builder.RegisterApiControllers(thisAssembly).InstancePerRequest(); builder.RegisterType(); diff --git a/src/Jackett/Services/ImdbResolver.cs b/src/Jackett/Services/ImdbResolver.cs new file mode 100644 index 000000000..76d3faf7e --- /dev/null +++ b/src/Jackett/Services/ImdbResolver.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using System.Web; +using CsQuery; +using Jackett.Utils.Clients; + +namespace Jackett.Services +{ + public interface IImdbResolver + { + Task> GetAllTitles(string imdbId); + } + + public class ImdbResolver : IImdbResolver + { + public ImdbResolver(IWebClient webClient) + { + WebClient = webClient; + } + + public async Task> GetAllTitles(string imdbId) + { + if (!imdbId.StartsWith("tt", StringComparison.Ordinal)) + imdbId = "tt" + imdbId; + var request = new WebRequest("http://www.imdb.com/title/" + imdbId + "/releaseinfo"); + var result = await WebClient.GetString(request); + + CQ dom = result.Content; + + var mainTitle = dom["h3[itemprop=name]"].Find("a")[0].InnerHTML.Replace("\"", ""); + + var akas = dom["table#akas"].Find("tbody").Find("tr"); + var titleList = new List(); + titleList.Add(mainTitle); + foreach (var row in akas) { + string title = row.FirstElementChild.InnerHTML; + if (title == "(original title)" || title == "") + titleList.Add(HttpUtility.HtmlDecode(row.FirstElementChild.NextElementSibling.InnerHTML)); + } + + return titleList; + } + + private IWebClient WebClient; + } +} diff --git a/src/Jackett/Services/IndexerManagerService.cs b/src/Jackett/Services/IndexerManagerService.cs index f5c3276b2..34c9a48dc 100644 --- a/src/Jackett/Services/IndexerManagerService.cs +++ b/src/Jackett/Services/IndexerManagerService.cs @@ -131,8 +131,12 @@ namespace Jackett.Services public void InitAggregateIndexer() { + var imdbResolver = new ImdbResolver(container.Resolve()); + var imdbFallbackStrategyProvider = new ImdbFallbackStrategyProvider(imdbResolver); + var imdbTitleResultFilterProvider = new ImdbTitleResultFilterProvider(imdbResolver); + logger.Info("Adding aggregate indexer"); - AggregateIndexer aggregateIndexer = new AggregateIndexer(this, container.Resolve(), logger, container.Resolve()); + AggregateIndexer aggregateIndexer = new AggregateIndexer(imdbFallbackStrategyProvider, imdbTitleResultFilterProvider, this, container.Resolve(), logger, container.Resolve()); this.aggregateIndexer = aggregateIndexer; UpdateAggregateIndexer(); } diff --git a/src/Jackett/Utils/Clients/WebRequest.cs b/src/Jackett/Utils/Clients/WebRequest.cs index 252579406..e00f558e4 100644 --- a/src/Jackett/Utils/Clients/WebRequest.cs +++ b/src/Jackett/Utils/Clients/WebRequest.cs @@ -15,7 +15,6 @@ namespace Jackett.Utils.Clients Type = RequestType.GET; Headers = new Dictionary(StringComparer.InvariantCultureIgnoreCase); EmulateBrowser = true; - Encoding Encoding; } public WebRequest(string url) @@ -25,7 +24,6 @@ namespace Jackett.Utils.Clients Url = url; Headers = new Dictionary(StringComparer.InvariantCultureIgnoreCase); EmulateBrowser = true; - Encoding Encoding; } public string Url { get; set; }