From af0c15be2c4990cc85c41fbe69aa9ea60a1caaca Mon Sep 17 00:00:00 2001
From: "garreth.jeremiah@gmail.com" <garreth.jeremiah@gmail.com>
Date: Mon, 28 Dec 2015 08:42:11 -0500
Subject: [PATCH] added notice in log when proxying is used bitsoup multi
 category searches look for all cats instead of making multiple queries

---
 src/Jackett.Console/Program.cs  | 445 ++++++++++++++++----------------
 src/Jackett/Indexers/BitSoup.cs |  43 +--
 2 files changed, 231 insertions(+), 257 deletions(-)

diff --git a/src/Jackett.Console/Program.cs b/src/Jackett.Console/Program.cs
index 64abc0a3..f5a3e8d7 100644
--- a/src/Jackett.Console/Program.cs
+++ b/src/Jackett.Console/Program.cs
@@ -1,225 +1,226 @@
-using CommandLine;
-using CommandLine.Text;
-using Jackett;
-using Jackett.Console;
-using Jackett.Indexers;
-using Jackett.Utils;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace JackettConsole
-{
-    public class Program
-    {
-        static void Main(string[] args)
-        {
-            try
-            {
-                var options = new ConsoleOptions();
-                if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
-                {
-                    if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
-                    {
-                        var help = new HelpText();
-                        var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
-                        Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
-                        Console.WriteLine("Switch error: " + errors);
-                        Console.WriteLine("See --help for further details on switches.");
-                        Environment.ExitCode = 1;
-                        return;
-                    }
-                    else
-                    {
-
-                        var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
-                        text.Copyright = " ";
-                        text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
-                        Console.WriteLine(text);
-                        Environment.ExitCode = 1;
-                        return;
-                    }
-                }
-                else
-                {
-
-                    if (options.ListenPublic && options.ListenPrivate)
-                    {
-                        Console.WriteLine("You can only use listen private OR listen publicly.");
-                        Environment.ExitCode = 1;
-                        return;
-                    }
-                    /*  ======     Options    =====  */
-
-                    // SSL Fix
-                    Startup.DoSSLFix = options.SSLFix;
-
-                    // Use curl
-                    if (options.Client != null)
-                        Startup.ClientOverride = options.Client.ToLowerInvariant();
-
-                    // Use Proxy
+using CommandLine;
+using CommandLine.Text;
+using Jackett;
+using Jackett.Console;
+using Jackett.Indexers;
+using Jackett.Utils;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace JackettConsole
+{
+    public class Program
+    {
+        static void Main(string[] args)
+        {
+            try
+            {
+                var options = new ConsoleOptions();
+                if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
+                {
+                    if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
+                    {
+                        var help = new HelpText();
+                        var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
+                        Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
+                        Console.WriteLine("Switch error: " + errors);
+                        Console.WriteLine("See --help for further details on switches.");
+                        Environment.ExitCode = 1;
+                        return;
+                    }
+                    else
+                    {
+
+                        var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
+                        text.Copyright = " ";
+                        text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
+                        Console.WriteLine(text);
+                        Environment.ExitCode = 1;
+                        return;
+                    }
+                }
+                else
+                {
+
+                    if (options.ListenPublic && options.ListenPrivate)
+                    {
+                        Console.WriteLine("You can only use listen private OR listen publicly.");
+                        Environment.ExitCode = 1;
+                        return;
+                    }
+                    /*  ======     Options    =====  */
+
+                    // SSL Fix
+                    Startup.DoSSLFix = options.SSLFix;
+
+                    // Use curl
+                    if (options.Client != null)
+                        Startup.ClientOverride = options.Client.ToLowerInvariant();
+
+                    // Use Proxy
                     if (options.ProxyConnection != null)
                     {
                         Startup.ProxyConnection = options.ProxyConnection.ToLowerInvariant();
-                    }
-                    // Logging
-                    if (options.Logging)
-                        Startup.LogRequests = true;
-
-                    // Tracing
-                    if (options.Tracing)
-                        Startup.TracingEnabled = true;
-
-                    // Log after the fact as using the logger will cause the options above to be used
-
-                    if (options.Logging)
-                        Engine.Logger.Info("Logging enabled.");
-
-                    if (options.Tracing)
-                        Engine.Logger.Info("Tracing enabled.");
-
-                    if (options.SSLFix == true)
-                        Engine.Logger.Info("SSL ECC workaround enabled.");
-                    else if (options.SSLFix == false)
-                        Engine.Logger.Info("SSL ECC workaround has been disabled.");
-
-                    // Ignore SSL errors on Curl
-                    Startup.IgnoreSslErrors = options.IgnoreSslErrors;
-                    if (options.IgnoreSslErrors == true)
-                    {
-                        Engine.Logger.Info("Curl will ignore SSL certificate errors.");
-                    }
-
-                    /*  ======     Actions    =====  */
-
-                    // Install service
-                    if (options.Install)
-                    {
-                        Engine.ServiceConfig.Install();
-                        return;
-                    }
-
-                    // Uninstall service
-                    if (options.Uninstall)
-                    {
-                        Engine.Server.ReserveUrls(doInstall: false);
-                        Engine.ServiceConfig.Uninstall();
-                        return;
-                    }
-
-                    // Reserve urls
-                    if (options.ReserveUrls)
-                    {
-                        Engine.Server.ReserveUrls(doInstall: true);
-                        return;
-                    }
-
-                    // Start Service
-                    if (options.StartService)
-                    {
-                        if (!Engine.ServiceConfig.ServiceRunning())
-                        {
-                            Engine.ServiceConfig.Start();
-                        }
-                        return;
-                    }
-
-                    // Stop Service
-                    if (options.StopService)
-                    {
-                        if (Engine.ServiceConfig.ServiceRunning())
-                        {
-                            Engine.ServiceConfig.Stop();
-                        }
-                        return;
-                    }
-
-                    // Migrate settings
-                    if (options.MigrateSettings)
-                    {
-                        Engine.ConfigService.PerformMigration();
-                        return;
-                    }
-
-
-                    // Show Version
-                    if (options.ShowVersion)
-                    {
-                        Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
-                        return;
-                    }
-
-                    /*  ======     Overrides    =====  */
-
-                    // Override listen public
-                    if (options.ListenPublic || options.ListenPrivate)
-                    {
-                        if (Engine.Server.Config.AllowExternal != options.ListenPublic)
-                        {
-                            Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
-                            Engine.Server.Config.AllowExternal = options.ListenPublic;
-                            if (System.Environment.OSVersion.Platform != PlatformID.Unix)
-                            {
-                                if (ServerUtil.IsUserAdministrator())
-                                {
-                                    Engine.Server.ReserveUrls(doInstall: true);
-                                }
-                                else
-                                {
-                                    Engine.Logger.Error("Unable to switch to public listening without admin rights.");
-                                    Environment.ExitCode = 1;
-                                    return;
-                                }
-                            }
-
-                            Engine.Server.SaveConfig();
-                        }
-                    }
-
-                    // Override port
-                    if (options.Port != 0)
-                    {
-                        if (Engine.Server.Config.Port != options.Port)
-                        {
-                            Engine.Logger.Info("Overriding port to " + options.Port);
-                            Engine.Server.Config.Port = options.Port;
-                            if (System.Environment.OSVersion.Platform != PlatformID.Unix)
-                            {
-                                if (ServerUtil.IsUserAdministrator())
-                                {
-                                    Engine.Server.ReserveUrls(doInstall: true);
-                                }
-                                else
-                                {
-                                    Engine.Logger.Error("Unable to switch ports when not running as administrator");
-                                    Environment.ExitCode = 1;
-                                    return;
-                                }
-                            }
-
-                            Engine.Server.SaveConfig();
-                        }
-                    }
-                }
-
-                Engine.Server.Initalize();
-                Engine.Server.Start();
-                Engine.RunTime.Spin();
-                Engine.Logger.Info("Server thread exit");
-            }
-            catch (Exception e)
-            {
-                Engine.Logger.Error(e, "Top level exception");
-            }
-        }
-    }
-}
-
+                        Engine.Logger.Info("Proxy enabled. " + Startup.ProxyConnection);
+                    }
+                    // Logging
+                    if (options.Logging)
+                        Startup.LogRequests = true;
+
+                    // Tracing
+                    if (options.Tracing)
+                        Startup.TracingEnabled = true;
+
+                    // Log after the fact as using the logger will cause the options above to be used
+
+                    if (options.Logging)
+                        Engine.Logger.Info("Logging enabled.");
+
+                    if (options.Tracing)
+                        Engine.Logger.Info("Tracing enabled.");
+
+                    if (options.SSLFix == true)
+                        Engine.Logger.Info("SSL ECC workaround enabled.");
+                    else if (options.SSLFix == false)
+                        Engine.Logger.Info("SSL ECC workaround has been disabled.");
+
+                    // Ignore SSL errors on Curl
+                    Startup.IgnoreSslErrors = options.IgnoreSslErrors;
+                    if (options.IgnoreSslErrors == true)
+                    {
+                        Engine.Logger.Info("Curl will ignore SSL certificate errors.");
+                    }
+
+                    /*  ======     Actions    =====  */
+
+                    // Install service
+                    if (options.Install)
+                    {
+                        Engine.ServiceConfig.Install();
+                        return;
+                    }
+
+                    // Uninstall service
+                    if (options.Uninstall)
+                    {
+                        Engine.Server.ReserveUrls(doInstall: false);
+                        Engine.ServiceConfig.Uninstall();
+                        return;
+                    }
+
+                    // Reserve urls
+                    if (options.ReserveUrls)
+                    {
+                        Engine.Server.ReserveUrls(doInstall: true);
+                        return;
+                    }
+
+                    // Start Service
+                    if (options.StartService)
+                    {
+                        if (!Engine.ServiceConfig.ServiceRunning())
+                        {
+                            Engine.ServiceConfig.Start();
+                        }
+                        return;
+                    }
+
+                    // Stop Service
+                    if (options.StopService)
+                    {
+                        if (Engine.ServiceConfig.ServiceRunning())
+                        {
+                            Engine.ServiceConfig.Stop();
+                        }
+                        return;
+                    }
+
+                    // Migrate settings
+                    if (options.MigrateSettings)
+                    {
+                        Engine.ConfigService.PerformMigration();
+                        return;
+                    }
+
+
+                    // Show Version
+                    if (options.ShowVersion)
+                    {
+                        Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
+                        return;
+                    }
+
+                    /*  ======     Overrides    =====  */
+
+                    // Override listen public
+                    if (options.ListenPublic || options.ListenPrivate)
+                    {
+                        if (Engine.Server.Config.AllowExternal != options.ListenPublic)
+                        {
+                            Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
+                            Engine.Server.Config.AllowExternal = options.ListenPublic;
+                            if (System.Environment.OSVersion.Platform != PlatformID.Unix)
+                            {
+                                if (ServerUtil.IsUserAdministrator())
+                                {
+                                    Engine.Server.ReserveUrls(doInstall: true);
+                                }
+                                else
+                                {
+                                    Engine.Logger.Error("Unable to switch to public listening without admin rights.");
+                                    Environment.ExitCode = 1;
+                                    return;
+                                }
+                            }
+
+                            Engine.Server.SaveConfig();
+                        }
+                    }
+
+                    // Override port
+                    if (options.Port != 0)
+                    {
+                        if (Engine.Server.Config.Port != options.Port)
+                        {
+                            Engine.Logger.Info("Overriding port to " + options.Port);
+                            Engine.Server.Config.Port = options.Port;
+                            if (System.Environment.OSVersion.Platform != PlatformID.Unix)
+                            {
+                                if (ServerUtil.IsUserAdministrator())
+                                {
+                                    Engine.Server.ReserveUrls(doInstall: true);
+                                }
+                                else
+                                {
+                                    Engine.Logger.Error("Unable to switch ports when not running as administrator");
+                                    Environment.ExitCode = 1;
+                                    return;
+                                }
+                            }
+
+                            Engine.Server.SaveConfig();
+                        }
+                    }
+                }
+
+                Engine.Server.Initalize();
+                Engine.Server.Start();
+                Engine.RunTime.Spin();
+                Engine.Logger.Info("Server thread exit");
+            }
+            catch (Exception e)
+            {
+                Engine.Logger.Error(e, "Top level exception");
+            }
+        }
+    }
+}
+
diff --git a/src/Jackett/Indexers/BitSoup.cs b/src/Jackett/Indexers/BitSoup.cs
index accc6fb2..d2a12769 100644
--- a/src/Jackett/Indexers/BitSoup.cs
+++ b/src/Jackett/Indexers/BitSoup.cs
@@ -22,7 +22,7 @@ namespace Jackett.Indexers
 {
     public class BitSoup : BaseIndexer, IIndexer
     {
-        private string UseLink { get { return (this.configData.AlternateLink.Value != "" ? this.configData.AlternateLink.Value : SiteLink); } }
+        private string UseLink { get { return (this.configData.AlternateLink.Value != null && this.configData.AlternateLink.Value != "" ? this.configData.AlternateLink.Value : SiteLink); } }
         private string BrowseUrl { get { return UseLink + "browse.php"; } }
         private string LoginUrl { get { return UseLink + "takelogin.php"; } }
         private string LoginReferer {  get { return UseLink + "login.php";  } }
@@ -187,40 +187,13 @@ namespace Jackett.Indexers
             var trackerCats = MapTorznabCapsToTrackers(query);
             var queryCollection = new NameValueCollection();
 
-            
-            
-            if (!string.IsNullOrWhiteSpace(searchString))
-            {
-                queryCollection.Add("search", searchString);
-                queryCollection.Add("incldead", "0");
-                queryCollection.Add("cat", "0");
-                // Tracker cannot search multi categories
-                // so we either search "all"
-                // or do multiple searches
-                if (trackerCats.Count == 0)
-                {
-                    searchUrl += "?" + queryCollection.GetQueryString();
-                    await ProcessPage(releases, searchUrl);
-                } else
-                {
-                    foreach (var cat in trackerCats)
-                    {
-                        queryCollection.Remove("cat");
-                        queryCollection.Add("cat", cat);
-                        searchUrl += "?" + queryCollection.GetQueryString();
-                        await ProcessPage(releases, searchUrl);
-                    }
-                }           
-                
-            }
-            else
-            {
-                queryCollection.Add("search", "");
-                queryCollection.Add("cat", "0");
-                searchUrl += "?" + queryCollection.GetQueryString();
-                await ProcessPage(releases, searchUrl);
-            }
-         
+
+            queryCollection.Add("search", string.IsNullOrWhiteSpace(searchString)? "" : searchString);
+            queryCollection.Add("incldead", "0");
+            queryCollection.Add("cat", (trackerCats.Count < 2 ? "0" : trackerCats.ElementAt(0)));
+            searchUrl += "?" + queryCollection.GetQueryString();
+            await ProcessPage(releases, searchUrl);
+
             return releases;
         }
 
-- 
GitLab