public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List <int> { TorznabCatType.TV.ID }); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); var searchQuerySingleEpisodes = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season. await GetReleases(releases, query, searchQuerySingleEpisodes); // Search for torrent groups if (isTv) { var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}").Match(query.GetQueryString()); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } } return(releases); }
protected override async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List <int> { TorznabCatType.TV.ID }); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); searchQuery = searchQuery.Replace("Marvels", "Marvel"); // strip 's for better results var searchQuerySingleEpisodes = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season. await GetReleases(releases, query, searchQuerySingleEpisodes); // Always search for torrent groups (complete seasons) too var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}([Ee]{1}\d{2,3})?$").Match(searchQuery); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}([Ee]{1}\d{2,3})?", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } return(releases); }
private static void InitAutomapper() { Mapper.Initialize(cfg => { cfg.CreateMap<WebClientByteResult, WebClientStringResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((be, str) => { str.Content = Encoding.UTF8.GetString(be.Content); }); cfg.CreateMap<WebClientStringResult, WebClientByteResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((str, be) => { if (!string.IsNullOrEmpty(str.Content)) { be.Content = Encoding.UTF8.GetBytes(str.Content); } }); cfg.CreateMap<WebClientStringResult, WebClientStringResult>(); cfg.CreateMap<WebClientByteResult, WebClientByteResult>(); cfg.CreateMap<ReleaseInfo, ReleaseInfo>(); cfg.CreateMap<ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { if (r.Category != null) { var CategoryDesc = string.Join(", ", r.Category.Select(x => TorznabCatType.GetCatDesc(x)).Where(x => !string.IsNullOrEmpty(x))); t.CategoryDesc = CategoryDesc; } else { t.CategoryDesc = ""; } }); }); }
protected void Init(string DefinitionString) { var deserializer = new DeserializerBuilder() .WithNamingConvention(new CamelCaseNamingConvention()) .IgnoreUnmatchedProperties() .Build(); Definition = deserializer.Deserialize <IndexerDefinition>(DefinitionString); // Add default data if necessary if (Definition.Settings == null) { Definition.Settings = new List <settingsField>(); } if (Definition.Settings.Count == 0) { Definition.Settings.Add(new settingsField { Name = "username", Label = "Username", Type = "text" }); Definition.Settings.Add(new settingsField { Name = "password", Label = "Password", Type = "password" }); } // init missing mandatory attributes DisplayName = Definition.Name; DisplayDescription = Definition.Description; SiteLink = Definition.Links[0]; // TODO: implement alternative links if (!SiteLink.EndsWith("/")) { SiteLink += "/"; } TorznabCaps = TorznabUtil.CreateDefaultTorznabTVCaps(); // TODO implement caps // init config Data configData = new ConfigurationData(); foreach (var Setting in Definition.Settings) { configData.AddDynamic(Setting.Name, new StringItem { Name = Setting.Label }); } foreach (var Category in Definition.Caps.Categories) { var cat = TorznabCatType.GetCatByName(Category.Value); if (cat == null) { logger.Error(string.Format("CardigannIndexer ({0}): Can't find a category for {1}", ID, Category.Value)); continue; } AddCategoryMapping(Category.Key, TorznabCatType.GetCatByName(Category.Value)); } }
public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, TorznabCatType.TV.ID); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); await GetReleases(releases, query, searchQuery); // Search for torrent groups if (isTv) { var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}").Match(query.GetQueryString()); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } } return(releases); }
private static void InitAutomapper() { #pragma warning disable 612, 618 // TODO: fix deprecation warning (remove #pragma to see the build warning) Mapper.Initialize(cfg => { cfg.CreateMap <WebClientByteResult, WebClientStringResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((be, str) => { var encoding = be.Request.Encoding ?? Encoding.UTF8; str.Content = encoding.GetString(be.Content); }); cfg.CreateMap <WebClientStringResult, WebClientByteResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((str, be) => { if (!string.IsNullOrEmpty(str.Content)) { var encoding = str.Request.Encoding ?? Encoding.UTF8; be.Content = encoding.GetBytes(str.Content); } }); cfg.CreateMap <WebClientStringResult, WebClientStringResult>(); cfg.CreateMap <WebClientByteResult, WebClientByteResult>(); cfg.CreateMap <ReleaseInfo, ReleaseInfo>(); cfg.CreateMap <ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { if (r.Category != null) { t.CategoryDesc = string.Join(", ", r.Category.Select(x => TorznabCatType.GetCatDesc(x)).Where(x => !string.IsNullOrEmpty(x))); } else { t.CategoryDesc = ""; } }); }); #pragma warning restore 612, 618 }
private static void InitAutomapper() { #pragma warning disable 612, 618 // TODO: fix deprecation warning (remove #pragma to see the build warning) Mapper.Initialize(cfg => { cfg.CreateMap <WebResult, WebResult>(); cfg.CreateMap <ReleaseInfo, ReleaseInfo>(); cfg.CreateMap <ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { if (r.Category != null) { t.CategoryDesc = string.Join(", ", r.Category.Select(x => TorznabCatType.GetCatDesc(x)).Where(x => !string.IsNullOrEmpty(x))); } else { t.CategoryDesc = ""; } }); }); #pragma warning restore 612, 618 }
protected virtual IEnumerable <ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable <ReleaseInfo> results) { if (query.Categories.Length == 0) { return(results); } var filteredResults = results.Where(result => { return(result.Category.IsEmptyOrNull() || query.Categories.Intersect(result.Category).Any() || TorznabCatType.QueryContainsParentCategory(query.Categories, result.Category)); }); return(filteredResults); }
public virtual IEnumerable <ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable <ReleaseInfo> results) { foreach (var result in results) { if (query.Categories.Length == 0 || result.Category == null || result.Category.Count() == 0 || query.Categories.Intersect(result.Category).Any() || TorznabCatType.QueryContainsParentCategory(query.Categories, result.Category)) { yield return(result); } } }
protected override void Load(ContainerBuilder builder) { // Just register everything! var thisAssembly = typeof(JackettModule).Assembly; builder.RegisterAssemblyTypes(thisAssembly) .Except <IIndexer>() .Except <IImdbResolver>() .Except <OmdbResolver>() .Except <IFallbackStrategyProvider>() .Except <ImdbFallbackStrategyProvider>() .Except <IFallbackStrategy>() .Except <ImdbFallbackStrategy>() .Except <IResultFilterProvider>() .Except <ImdbTitleResultFilterProvider>() .Except <IResultFilter>() .Except <ImdbTitleResultFilterProvider>() .Except <BaseMetaIndexer>() .Except <AggregateIndexer>() .Except <CardigannIndexer>() .AsImplementedInterfaces().SingleInstance(); builder.RegisterApiControllers(thisAssembly).InstancePerRequest(); builder.RegisterType <HttpWebClient>(); // Register the best web client for the platform or the override switch (Startup.ClientOverride) { case "httpclient": builder.RegisterType <HttpWebClient>().As <IWebClient>(); break; case "httpclient2": builder.RegisterType <HttpWebClient2>().As <IWebClient>(); break; case "safecurl": builder.RegisterType <UnixSafeCurlWebClient>().As <IWebClient>(); break; case "libcurl": builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); break; case "automatic": default: if (System.Environment.OSVersion.Platform == PlatformID.Unix) { var usehttpclient = false; try { Type monotype = Type.GetType("Mono.Runtime"); if (monotype != null) { MethodInfo displayName = monotype.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); if (displayName != null) { var monoVersion = displayName.Invoke(null, null).ToString(); var monoVersionO = new Version(monoVersion.Split(' ')[0]); if ((monoVersionO.Major >= 4 && monoVersionO.Minor >= 8) || monoVersionO.Major >= 5) { // check if btls is supported var monoSecurity = Assembly.Load("Mono.Security"); Type monoTlsProviderFactory = monoSecurity.GetType("Mono.Security.Interface.MonoTlsProviderFactory"); if (monoTlsProviderFactory != null) { MethodInfo isProviderSupported = monoTlsProviderFactory.GetMethod("IsProviderSupported"); if (isProviderSupported != null) { var btlsSupported = (bool)isProviderSupported.Invoke(null, new string[] { "btls" }); if (btlsSupported) { // initialize btls MethodInfo initialize = monoTlsProviderFactory.GetMethod("Initialize", new[] { typeof(string) }); if (initialize != null) { initialize.Invoke(null, new string[] { "btls" }); usehttpclient = true; } } } } } } } } catch (Exception e) { Console.Out.WriteLine("Error while deciding which HttpWebClient to use: " + e); } if (usehttpclient) { builder.RegisterType <HttpWebClient>().As <IWebClient>(); } else { builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); } } else { builder.RegisterType <HttpWebClient>().As <IWebClient>(); } break; } Mapper.CreateMap <WebClientByteResult, WebClientStringResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((be, str) => { str.Content = Encoding.UTF8.GetString(be.Content); }); Mapper.CreateMap <WebClientStringResult, WebClientByteResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((str, be) => { if (!string.IsNullOrEmpty(str.Content)) { be.Content = Encoding.UTF8.GetBytes(str.Content); } }); Mapper.CreateMap <WebClientStringResult, WebClientStringResult>(); Mapper.CreateMap <WebClientByteResult, WebClientByteResult>(); Mapper.CreateMap <ReleaseInfo, ReleaseInfo>(); Mapper.CreateMap <ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { if (r.Category != null) { var CategoryDesc = string.Join(", ", r.Category.Select(x => TorznabCatType.GetCatDesc(x)).Where(x => !string.IsNullOrEmpty(x))); t.CategoryDesc = CategoryDesc; } else { t.CategoryDesc = ""; } }); }
protected override void Load(ContainerBuilder builder) { // Just register everything! var thisAssembly = typeof(JackettModule).Assembly; builder.RegisterAssemblyTypes(thisAssembly).Except <IIndexer>().AsImplementedInterfaces().SingleInstance(); builder.RegisterApiControllers(thisAssembly).InstancePerRequest(); builder.RegisterType <HttpWebClient>(); // Register the best web client for the platform or the override switch (Startup.ClientOverride) { case "httpclient": builder.RegisterType <HttpWebClient>().As <IWebClient>(); break; case "safecurl": builder.RegisterType <UnixSafeCurlWebClient>().As <IWebClient>(); break; case "libcurl": builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); break; case "automatic": default: if (System.Environment.OSVersion.Platform == PlatformID.Unix) { var usehttpclient = false; try { Type monotype = Type.GetType("Mono.Runtime"); if (monotype != null) { MethodInfo displayName = monotype.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static); if (displayName != null) { var monoVersion = displayName.Invoke(null, null).ToString(); var monoVersionO = new Version(monoVersion.Split(' ')[0]); if (monoVersionO.Major >= 4 && monoVersionO.Minor >= 8) { usehttpclient = true; } } } } catch (Exception e) { Console.Out.WriteLine("Error while deciding which HttpWebClient to use: " + e); } if (usehttpclient) { builder.RegisterType <HttpWebClient>().As <IWebClient>(); } else { builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); } } else { builder.RegisterType <HttpWebClient>().As <IWebClient>(); } break; } // Register indexers foreach (var indexer in thisAssembly.GetTypes() .Where(p => typeof(IIndexer).IsAssignableFrom(p) && !p.IsInterface) .ToArray()) { builder.RegisterType(indexer).Named <IIndexer>(BaseIndexer.GetIndexerID(indexer)); } Mapper.CreateMap <WebClientByteResult, WebClientStringResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((be, str) => { str.Content = Encoding.UTF8.GetString(be.Content); }); Mapper.CreateMap <WebClientStringResult, WebClientByteResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((str, be) => { if (!string.IsNullOrEmpty(str.Content)) { be.Content = Encoding.UTF8.GetBytes(str.Content); } }); Mapper.CreateMap <WebClientStringResult, WebClientStringResult>(); Mapper.CreateMap <WebClientByteResult, WebClientByteResult>(); Mapper.CreateMap <ReleaseInfo, ReleaseInfo>(); Mapper.CreateMap <ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { t.CategoryDesc = TorznabCatType.GetCatDesc(r.Category); }); }
protected override void Load(ContainerBuilder builder) { // Just register everything! var thisAssembly = typeof(JackettModule).Assembly; builder.RegisterAssemblyTypes(thisAssembly).Except <IIndexer>().AsImplementedInterfaces().SingleInstance(); builder.RegisterApiControllers(thisAssembly).InstancePerRequest(); builder.RegisterType <HttpWebClient>(); // Register the best web client for the platform or the override switch (Startup.ClientOverride) { case "httpclient": builder.RegisterType <HttpWebClient>().As <IWebClient>(); break; case "safecurl": builder.RegisterType <UnixSafeCurlWebClient>().As <IWebClient>(); break; case "libcurl": builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); break; case "automatic": default: if (System.Environment.OSVersion.Platform == PlatformID.Unix) { builder.RegisterType <UnixLibCurlWebClient>().As <IWebClient>(); } else { builder.RegisterType <HttpWebClient>().As <IWebClient>(); } break; } // Register indexers foreach (var indexer in thisAssembly.GetTypes() .Where(p => typeof(IIndexer).IsAssignableFrom(p) && !p.IsInterface) .ToArray()) { builder.RegisterType(indexer).Named <IIndexer>(BaseIndexer.GetIndexerID(indexer)); } Mapper.CreateMap <WebClientByteResult, WebClientStringResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((be, str) => { str.Content = Encoding.UTF8.GetString(be.Content); }); Mapper.CreateMap <WebClientStringResult, WebClientByteResult>().ForMember(x => x.Content, opt => opt.Ignore()).AfterMap((str, be) => { if (!string.IsNullOrEmpty(str.Content)) { be.Content = Encoding.UTF8.GetBytes(str.Content); } }); Mapper.CreateMap <WebClientStringResult, WebClientStringResult>(); Mapper.CreateMap <WebClientByteResult, WebClientByteResult>(); Mapper.CreateMap <ReleaseInfo, ReleaseInfo>(); Mapper.CreateMap <ReleaseInfo, TrackerCacheResult>().AfterMap((r, t) => { t.CategoryDesc = TorznabCatType.GetCatDesc(r.Category); }); }