diff --git a/src/Jackett/Controllers/PotatoController.cs b/src/Jackett/Controllers/PotatoController.cs index 5815baa79..33b26caca 100644 --- a/src/Jackett/Controllers/PotatoController.cs +++ b/src/Jackett/Controllers/PotatoController.cs @@ -65,6 +65,8 @@ namespace Jackett.Controllers return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer does not support movies."); } + var year = 0; + if (string.IsNullOrWhiteSpace(request.search)) { // We are searching by IMDB id so look up the name @@ -75,6 +77,7 @@ namespace Jackett.Controllers if (result["Title"] != null) { request.search = result["Title"].ToString(); + year = ParseUtil.CoerceInt(result["Year"].ToString()); } } } @@ -103,7 +106,9 @@ namespace Jackett.Controllers var serverUrl = string.Format("{0}://{1}:{2}/", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port); var potatoResponse = new TorrentPotatoResponse(); - foreach(var r in releases) + releases = TorznabUtil.FilterResultsToTitle(releases, torznabQuery.SanitizedSearchTerm, year); + + foreach (var r in releases) { var release = Mapper.Map(r); release.Link = release.ConvertToProxyLink(serverUrl, indexerID); diff --git a/src/Jackett/Indexers/AlphaRatio.cs b/src/Jackett/Indexers/AlphaRatio.cs index 765accf81..738cbdf97 100644 --- a/src/Jackett/Indexers/AlphaRatio.cs +++ b/src/Jackett/Indexers/AlphaRatio.cs @@ -30,7 +30,7 @@ namespace Jackett.Indexers : base(name: "AlphaRatio", description: "Legendary", link: "https://alpharatio.cc/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/BB.cs b/src/Jackett/Indexers/BB.cs index 18511dae6..688f70638 100644 --- a/src/Jackett/Indexers/BB.cs +++ b/src/Jackett/Indexers/BB.cs @@ -37,7 +37,7 @@ namespace Jackett.Indexers : base(name: "bB", description: "bB", link: "http://www.reddit.com/r/baconbits/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/BaseIndexer.cs b/src/Jackett/Indexers/BaseIndexer.cs index bfa2412f1..3d1259a50 100644 --- a/src/Jackett/Indexers/BaseIndexer.cs +++ b/src/Jackett/Indexers/BaseIndexer.cs @@ -57,7 +57,7 @@ namespace Jackett.Indexers this.configData = configData; if (caps == null) - caps = TorznabCapsUtil.CreateDefaultTorznabTVCaps(); + caps = TorznabUtil.CreateDefaultTorznabTVCaps(); TorznabCaps = caps; } diff --git a/src/Jackett/Indexers/BeyondHD.cs b/src/Jackett/Indexers/BeyondHD.cs index b7f085570..f2e72ad9a 100644 --- a/src/Jackett/Indexers/BeyondHD.cs +++ b/src/Jackett/Indexers/BeyondHD.cs @@ -33,7 +33,7 @@ namespace Jackett.Indexers : base(name: "BeyondHD", description: "Without BeyondHD, your HDTV is just a TV", link: "https://beyondhd.me/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/BitHdtv.cs b/src/Jackett/Indexers/BitHdtv.cs index f3910a312..665e12ce7 100644 --- a/src/Jackett/Indexers/BitHdtv.cs +++ b/src/Jackett/Indexers/BitHdtv.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "BIT-HDTV", description: "Home of high definition invites", link: "https://www.bit-hdtv.com/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/BitMeTV.cs b/src/Jackett/Indexers/BitMeTV.cs index fd555cd72..f5764e597 100644 --- a/src/Jackett/Indexers/BitMeTV.cs +++ b/src/Jackett/Indexers/BitMeTV.cs @@ -36,7 +36,7 @@ namespace Jackett.Indexers : base(name: "BitMeTV", description: "TV Episode specialty tracker", link: "http://www.bitmetv.org/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: c, logger: l, diff --git a/src/Jackett/Indexers/Demonoid.cs b/src/Jackett/Indexers/Demonoid.cs index 44e5d68fe..82adb026e 100644 --- a/src/Jackett/Indexers/Demonoid.cs +++ b/src/Jackett/Indexers/Demonoid.cs @@ -31,7 +31,7 @@ namespace Jackett.Indexers : base(name: "Demonoid", description: "Demonoid", link: "http://www.demonoid.pw/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/FrenchTorrentDb.cs b/src/Jackett/Indexers/FrenchTorrentDb.cs index b3e3d67b8..6f1cd4cad 100644 --- a/src/Jackett/Indexers/FrenchTorrentDb.cs +++ b/src/Jackett/Indexers/FrenchTorrentDb.cs @@ -28,7 +28,7 @@ namespace Jackett.Indexers : base(name: "FrenchTorrentDb", description: "One the biggest French Torrent Tracker", link: "http://www.frenchtorrentdb.com/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: c, logger: l, diff --git a/src/Jackett/Indexers/Freshon.cs b/src/Jackett/Indexers/Freshon.cs index a6b025b44..b23c2107d 100644 --- a/src/Jackett/Indexers/Freshon.cs +++ b/src/Jackett/Indexers/Freshon.cs @@ -37,7 +37,7 @@ namespace Jackett.Indexers : base(name: "FreshOnTV", description: "Our goal is to provide the latest stuff in the TV show domain", link: "https://freshon.tv/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: c, logger: l, diff --git a/src/Jackett/Indexers/HDSpace.cs b/src/Jackett/Indexers/HDSpace.cs index 3cc7012dd..24d2d50b1 100644 --- a/src/Jackett/Indexers/HDSpace.cs +++ b/src/Jackett/Indexers/HDSpace.cs @@ -32,7 +32,7 @@ namespace Jackett.Indexers : base(name: "HD-Space", description: "Sharing The Universe", link: "https://hd-space.org/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/HDTorrents.cs b/src/Jackett/Indexers/HDTorrents.cs index c11771d9a..f56c90651 100644 --- a/src/Jackett/Indexers/HDTorrents.cs +++ b/src/Jackett/Indexers/HDTorrents.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "HD-Torrents", description: "HD-Torrents is a private torrent website with HD torrents and strict rules on their content.", link: "http://hdts.ru/",// Of the accessible domains the .ru seems the most reliable. https://hdts.ru | https://hd-torrents.org | https://hd-torrents.net | https://hd-torrents.me - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/IPTorrents.cs b/src/Jackett/Indexers/IPTorrents.cs index 249902e61..536dfb4ec 100644 --- a/src/Jackett/Indexers/IPTorrents.cs +++ b/src/Jackett/Indexers/IPTorrents.cs @@ -33,7 +33,7 @@ namespace Jackett.Indexers : base(name: "IPTorrents", description: "Always a step ahead.", link: "https://iptorrents.com/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/ImmortalSeed.cs b/src/Jackett/Indexers/ImmortalSeed.cs index f00a3849f..e624e09c4 100644 --- a/src/Jackett/Indexers/ImmortalSeed.cs +++ b/src/Jackett/Indexers/ImmortalSeed.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "ImmortalSeed", description: "ImmortalSeed", link: "http://immortalseed.me/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/MoreThanTV.cs b/src/Jackett/Indexers/MoreThanTV.cs index ebfe674b5..b124ac3b4 100644 --- a/src/Jackett/Indexers/MoreThanTV.cs +++ b/src/Jackett/Indexers/MoreThanTV.cs @@ -35,7 +35,7 @@ namespace Jackett.Indexers : base(name: "MoreThanTV", description: "ROMANIAN Private Torrent Tracker for TV / MOVIES, and the internal tracker for the release group DRACULA.", link: "https://www.morethan.tv/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: c, logger: l, diff --git a/src/Jackett/Indexers/Pretome.cs b/src/Jackett/Indexers/Pretome.cs index 6b84e3b28..496f1f02c 100644 --- a/src/Jackett/Indexers/Pretome.cs +++ b/src/Jackett/Indexers/Pretome.cs @@ -31,7 +31,7 @@ namespace Jackett.Indexers : base(name: "PreToMe", description: "BitTorrent site for High Quality, High Definition (HD) movies and TV Shows", link: "https://pretome.info/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), client: wc, manager: i, logger: l, diff --git a/src/Jackett/Indexers/PrivateHD.cs b/src/Jackett/Indexers/PrivateHD.cs index 0b60f3333..184dc8ca1 100644 --- a/src/Jackett/Indexers/PrivateHD.cs +++ b/src/Jackett/Indexers/PrivateHD.cs @@ -33,7 +33,7 @@ namespace Jackett.Indexers : base(name: "PrivateHD", description: "BitTorrent site for High Quality, High Definition (HD) movies and TV Shows", link: "https://privatehd.to/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/RUTor.cs b/src/Jackett/Indexers/RUTor.cs index aaf194c73..1cae8b856 100644 --- a/src/Jackett/Indexers/RUTor.cs +++ b/src/Jackett/Indexers/RUTor.cs @@ -36,7 +36,7 @@ namespace Jackett.Indexers : base(name: "RUTor", description: "Свободный торрент трекер", link: "http://rutor.org/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/SceneAccess.cs b/src/Jackett/Indexers/SceneAccess.cs index 624dbc10a..280bb212f 100644 --- a/src/Jackett/Indexers/SceneAccess.cs +++ b/src/Jackett/Indexers/SceneAccess.cs @@ -31,7 +31,7 @@ namespace Jackett.Indexers : base(name: "SceneAccess", description: "Your gateway to the scene", link: "https://sceneaccess.eu/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: c, logger: l, diff --git a/src/Jackett/Indexers/SceneTime.cs b/src/Jackett/Indexers/SceneTime.cs index a94b0cef3..f9bd74ca8 100644 --- a/src/Jackett/Indexers/SceneTime.cs +++ b/src/Jackett/Indexers/SceneTime.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "SceneTime", description: "Always on time", link: "https://www.scenetime.com/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: w, logger: l, diff --git a/src/Jackett/Indexers/ShowRSS.cs b/src/Jackett/Indexers/ShowRSS.cs index 3e87ed81c..bc0d6fb17 100644 --- a/src/Jackett/Indexers/ShowRSS.cs +++ b/src/Jackett/Indexers/ShowRSS.cs @@ -40,7 +40,7 @@ namespace Jackett.Indexers : base(name: "ShowRSS", description: "showRSS is a service that allows you to keep track of your favorite TV shows", link: defaultSiteLink, - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/SpeedCD.cs b/src/Jackett/Indexers/SpeedCD.cs index 0e9ee5333..d6b7f67ca 100644 --- a/src/Jackett/Indexers/SpeedCD.cs +++ b/src/Jackett/Indexers/SpeedCD.cs @@ -37,7 +37,7 @@ namespace Jackett.Indexers : base(name: "Speed.cd", description: "Your home now!", link: "http://speed.cd/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/Strike.cs b/src/Jackett/Indexers/Strike.cs index 508727aa2..edd4060c0 100644 --- a/src/Jackett/Indexers/Strike.cs +++ b/src/Jackett/Indexers/Strike.cs @@ -41,7 +41,7 @@ namespace Jackett.Indexers : base(name: "Strike", description: "Torrent search engine", link: defaultSiteLink, - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/T411.cs b/src/Jackett/Indexers/T411.cs index bd9caabb7..a0fc25573 100644 --- a/src/Jackett/Indexers/T411.cs +++ b/src/Jackett/Indexers/T411.cs @@ -39,7 +39,7 @@ namespace Jackett.Indexers : base(name: "T411", description: "French Torrent Tracker", link: "http://www.t411.io/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/TVChaosUK.cs b/src/Jackett/Indexers/TVChaosUK.cs index 77ef1bcca..37c6e5a85 100644 --- a/src/Jackett/Indexers/TVChaosUK.cs +++ b/src/Jackett/Indexers/TVChaosUK.cs @@ -40,7 +40,7 @@ namespace Jackett.Indexers : base(name: "TV Chaos", description: "Total Chaos", link: "https://tvchaosuk.com/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/ThePirateBay.cs b/src/Jackett/Indexers/ThePirateBay.cs index 86f6bc3c9..f628bd044 100644 --- a/src/Jackett/Indexers/ThePirateBay.cs +++ b/src/Jackett/Indexers/ThePirateBay.cs @@ -41,7 +41,7 @@ namespace Jackett.Indexers : base(name: "The Pirate Bay", description: "The worlds largest bittorrent indexer", link: defaultSiteLink, - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/TorrentBytes.cs b/src/Jackett/Indexers/TorrentBytes.cs index fbaad6a8b..3ffcd6e7d 100644 --- a/src/Jackett/Indexers/TorrentBytes.cs +++ b/src/Jackett/Indexers/TorrentBytes.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "TorrentBytes", description: "A decade of torrentbytes", link: "https://www.torrentbytes.net/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/TorrentDay.cs b/src/Jackett/Indexers/TorrentDay.cs index a25dde2ec..b4d8ad8c1 100644 --- a/src/Jackett/Indexers/TorrentDay.cs +++ b/src/Jackett/Indexers/TorrentDay.cs @@ -35,7 +35,7 @@ namespace Jackett.Indexers : base(name: "TorrentDay", description: "TorrentDay", link: "https://torrentday.eu/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/TorrentLeech.cs b/src/Jackett/Indexers/TorrentLeech.cs index 6e99e639e..280276059 100644 --- a/src/Jackett/Indexers/TorrentLeech.cs +++ b/src/Jackett/Indexers/TorrentLeech.cs @@ -33,7 +33,7 @@ namespace Jackett.Indexers : base(name: "TorrentLeech", description: "This is what happens when you seed", link: "http://www.torrentleech.org/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/TorrentShack.cs b/src/Jackett/Indexers/TorrentShack.cs index 69765cf2a..d2d2ab1b4 100644 --- a/src/Jackett/Indexers/TorrentShack.cs +++ b/src/Jackett/Indexers/TorrentShack.cs @@ -33,7 +33,7 @@ namespace Jackett.Indexers : base(name: "TorrentShack", description: "TorrentShack", link: "http://torrentshack.me/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), client: wc, manager: i, logger: l, diff --git a/src/Jackett/Indexers/Torrentz.cs b/src/Jackett/Indexers/Torrentz.cs index ca540a2dd..9d1adf6bf 100644 --- a/src/Jackett/Indexers/Torrentz.cs +++ b/src/Jackett/Indexers/Torrentz.cs @@ -41,7 +41,7 @@ namespace Jackett.Indexers : base(name: "Torrentz", description: "Torrentz is a meta-search engine and a Multisearch. This means we just search other search engines.", link: defaultSiteLink, - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Indexers/nCore.cs b/src/Jackett/Indexers/nCore.cs index 05d6d1b34..3e74508b3 100644 --- a/src/Jackett/Indexers/nCore.cs +++ b/src/Jackett/Indexers/nCore.cs @@ -34,7 +34,7 @@ namespace Jackett.Indexers : base(name: "nCore", description: "A Hungarian private torrent site.", link: "https://ncore.cc/", - caps: TorznabCapsUtil.CreateDefaultTorznabTVCaps(), + caps: TorznabUtil.CreateDefaultTorznabTVCaps(), manager: i, client: wc, logger: l, diff --git a/src/Jackett/Utils/TorznabCapsUtil.cs b/src/Jackett/Utils/TorznabCapsUtil.cs index 35c3b953f..6fc28e8b5 100644 --- a/src/Jackett/Utils/TorznabCapsUtil.cs +++ b/src/Jackett/Utils/TorznabCapsUtil.cs @@ -3,12 +3,15 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; namespace Jackett.Utils { - public static class TorznabCapsUtil + public class TorznabUtil { + static Regex reduceSpacesRegex = new Regex("\\s{2,}", RegexOptions.Compiled); + public static TorznabCapabilities CreateDefaultTorznabTVCaps() { var caps = new TorznabCapabilities(); @@ -19,5 +22,32 @@ namespace Jackett.Utils }); return caps; } + + public static IEnumerable FilterResultsToTitle(IEnumerable results, string name, int year) + { + if (string.IsNullOrWhiteSpace(name)) + return results; + + name = CleanTitle(name); + var filteredResults = new List(); + foreach (var result in results) + { + if (result.Title == null) + continue; + if (CleanTitle(result.Title).Contains(name) && + (year ==0 || result.Title.Contains(year.ToString()))) + { + filteredResults.Add(result); + } + } + + return filteredResults; + } + + private static string CleanTitle(string title) + { + title = title.Replace(':', ' ').Replace('.', ' ').Replace('-', ' ').Replace('_', ' ').Replace('+', ' '); + return reduceSpacesRegex.Replace(title, " ").ToLowerInvariant(); + } } }