diff --git a/src/Jackett.Updater/Jackett.Updater.csproj b/src/Jackett.Updater/Jackett.Updater.csproj
index 03b99a2c6..ff5dec912 100644
--- a/src/Jackett.Updater/Jackett.Updater.csproj
+++ b/src/Jackett.Updater/Jackett.Updater.csproj
@@ -39,6 +39,10 @@
jackett.ico
+
+ ..\packages\Autofac.3.5.2\lib\net40\Autofac.dll
+ True
+
..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll
True
diff --git a/src/Jackett.Updater/Program.cs b/src/Jackett.Updater/Program.cs
index 729425fb3..d4cb023f2 100644
--- a/src/Jackett.Updater/Program.cs
+++ b/src/Jackett.Updater/Program.cs
@@ -1,149 +1,150 @@
-using CommandLine;
-using Jackett.Services;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading;
-using System.Threading.Tasks;
-
-namespace Jackett.Updater
-{
- class Program
- {
- static void Main(string[] args)
- {
- new Program().Run(args);
- }
-
- private void Run(string[] args)
- {
- Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
-
- try {
- var options = new UpdaterConsoleOptions();
- if (Parser.Default.ParseArguments(args, options))
- {
- ProcessUpdate(options);
- }
- else
- {
- Engine.Logger.Error("Failed to process update arguments!: " + string.Join(" ", args));
- Console.ReadKey();
- }
- }
- catch (Exception e)
- {
- Engine.Logger.Error(e, "Exception applying update!");
- }
- }
-
- private string GetCurrentVersion()
- {
- var assembly = System.Reflection.Assembly.GetExecutingAssembly();
- var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
- return fvi.FileVersion;
- }
-
- private void ProcessUpdate(UpdaterConsoleOptions options)
- {
- var updateLocation = GetUpdateLocation();
- if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
- {
- updateLocation += Path.DirectorySeparatorChar;
- }
-
- var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
- var trayRunning = false;
- var trayProcesses = Process.GetProcessesByName("JackettTray");
- if (isWindows)
- {
- if (trayProcesses.Count() > 0)
- {
- foreach (var proc in trayProcesses)
- {
- try
- {
- Engine.Logger.Info("Killing tray process " + proc.Id);
- proc.Kill();
- trayRunning = true;
- }
- catch { }
- }
- }
- }
-
- Engine.Logger.Info("Waiting for Jackett to close..");
- Thread.Sleep(2000);
-
- var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
- foreach(var file in files)
- {
- var fileName = Path.GetFileName(file).ToLowerInvariant();
-
- if (fileName.EndsWith(".zip") ||
- fileName.EndsWith(".tar") ||
- fileName.EndsWith(".gz"))
- {
- continue;
- }
- try {
- Engine.Logger.Info("Copying " + fileName);
- var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
- File.Copy(file, dest, true);
- }
- catch(Exception e)
- {
- Engine.Logger.Error(e);
- }
- }
-
- if (trayRunning)
- {
- var startInfo = new ProcessStartInfo()
- {
- Arguments = options.Args,
- FileName = Path.Combine(options.Path, "JackettTray.exe"),
- UseShellExecute = true
- };
-
- Process.Start(startInfo);
- }
-
- if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
- {
- var serviceHelper = new ServiceConfigService(null, null);
- if (serviceHelper.ServiceExists())
- {
- serviceHelper.Start();
- }
- } else
- {
- var startInfo = new ProcessStartInfo()
- {
- Arguments = options.Args,
- FileName = Path.Combine(options.Path, "JackettConsole.exe"),
- UseShellExecute = true
- };
-
- if (!isWindows)
- {
- startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
- startInfo.FileName = "mono";
- }
-
- Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
- Process.Start(startInfo);
- }
- }
-
- private string GetUpdateLocation()
- {
- var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
- return new FileInfo(location.AbsolutePath).DirectoryName;
- }
- }
-}
+using CommandLine;
+using Jackett.Services;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Jackett.Updater
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ new Program().Run(args);
+ }
+
+ private void Run(string[] args)
+ {
+ Engine.SetupLogging(null, "updater.txt");
+ Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
+ Engine.Logger.Info("Options " + string.Join(" ", args));
+ try {
+ var options = new UpdaterConsoleOptions();
+ if (Parser.Default.ParseArguments(args, options))
+ {
+ ProcessUpdate(options);
+ }
+ else
+ {
+ Engine.Logger.Error("Failed to process update arguments!: " + string.Join(" ", args));
+ Console.ReadKey();
+ }
+ }
+ catch (Exception e)
+ {
+ Engine.Logger.Error(e, "Exception applying update!");
+ }
+ }
+
+ private string GetCurrentVersion()
+ {
+ var assembly = System.Reflection.Assembly.GetExecutingAssembly();
+ var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
+ return fvi.FileVersion;
+ }
+
+ private void ProcessUpdate(UpdaterConsoleOptions options)
+ {
+ var updateLocation = GetUpdateLocation();
+ if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
+ {
+ updateLocation += Path.DirectorySeparatorChar;
+ }
+
+ var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
+ var trayRunning = false;
+ var trayProcesses = Process.GetProcessesByName("JackettTray");
+ if (isWindows)
+ {
+ if (trayProcesses.Count() > 0)
+ {
+ foreach (var proc in trayProcesses)
+ {
+ try
+ {
+ Engine.Logger.Info("Killing tray process " + proc.Id);
+ proc.Kill();
+ trayRunning = true;
+ }
+ catch { }
+ }
+ }
+ }
+
+ Engine.Logger.Info("Waiting for Jackett to close..");
+ Thread.Sleep(2000);
+ Engine.Logger.Info("Finding files in: " + updateLocation);
+ var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
+ foreach(var file in files)
+ {
+ var fileName = Path.GetFileName(file).ToLowerInvariant();
+
+ if (fileName.EndsWith(".zip") ||
+ fileName.EndsWith(".tar") ||
+ fileName.EndsWith(".gz"))
+ {
+ continue;
+ }
+ try {
+ Engine.Logger.Info("Copying " + fileName);
+ var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
+ File.Copy(file, dest, true);
+ }
+ catch(Exception e)
+ {
+ Engine.Logger.Error(e);
+ }
+ }
+
+ if (trayRunning)
+ {
+ var startInfo = new ProcessStartInfo()
+ {
+ Arguments = options.Args,
+ FileName = Path.Combine(options.Path, "JackettTray.exe"),
+ UseShellExecute = true
+ };
+
+ Process.Start(startInfo);
+ }
+
+ if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
+ {
+ var serviceHelper = new ServiceConfigService(null, null);
+ if (serviceHelper.ServiceExists())
+ {
+ serviceHelper.Start();
+ }
+ } else
+ {
+ var startInfo = new ProcessStartInfo()
+ {
+ Arguments = options.Args,
+ FileName = Path.Combine(options.Path, "JackettConsole.exe"),
+ UseShellExecute = true
+ };
+
+ if (!isWindows)
+ {
+ startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
+ startInfo.FileName = "mono";
+ }
+
+ Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
+ Process.Start(startInfo);
+ }
+ }
+
+ private string GetUpdateLocation()
+ {
+ var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
+ return new FileInfo(location.AbsolutePath).DirectoryName;
+ }
+ }
+}
diff --git a/src/Jackett.Updater/packages.config b/src/Jackett.Updater/packages.config
index 35a3b7c41..a89ec5c4b 100644
--- a/src/Jackett.Updater/packages.config
+++ b/src/Jackett.Updater/packages.config
@@ -1,5 +1,6 @@
+
diff --git a/src/Jackett/Engine.cs b/src/Jackett/Engine.cs
index 55b8edfcf..87e38fe10 100644
--- a/src/Jackett/Engine.cs
+++ b/src/Jackett/Engine.cs
@@ -1,190 +1,191 @@
-using Autofac;
-using Jackett.Services;
-using NLog;
-using NLog.Config;
-using NLog.LayoutRenderers;
-using NLog.Targets;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Jackett
-{
- public class Engine
- {
- private static IContainer container = null;
-
- static Engine()
- {
- BuildContainer();
-
- }
-
- public static void BuildContainer()
- {
- var builder = new ContainerBuilder();
- builder.RegisterModule();
- container = builder.Build();
-
- // Register the container in itself to allow for late resolves
- var secondaryBuilder = new ContainerBuilder();
- secondaryBuilder.RegisterInstance(container).SingleInstance();
- SetupLogging(secondaryBuilder);
- secondaryBuilder.Update(container);
-
- }
-
- public static IContainer GetContainer()
- {
- return container;
- }
-
- public static bool IsWindows
- {
- get
- {
- return Environment.OSVersion.Platform == PlatformID.Win32NT;
- }
- }
-
- public static IConfigurationService ConfigService
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static IProcessService ProcessService
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static IServiceConfigService ServiceConfig
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static ITrayLockService LockService
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static IServerService Server
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static IRunTimeService RunTime
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static Logger Logger
- {
- get
- {
- return container.Resolve();
- }
- }
-
- public static ISecuityService SecurityService
- {
- get
- {
- return container.Resolve();
- }
- }
-
-
- private static void SetupLogging(ContainerBuilder builder)
- {
- var logLevel = Startup.TracingEnabled ? LogLevel.Debug : LogLevel.Info;
- // Add custom date time format renderer as the default is too long
- ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("simpledatetime", typeof(SimpleDateTimeRenderer));
-
- var logConfig = new LoggingConfiguration();
- var logFile = new FileTarget();
- logConfig.AddTarget("file", logFile);
- logFile.Layout = "${longdate} ${level} ${message} ${exception:format=ToString}";
- logFile.FileName = Path.Combine(ConfigurationService.GetAppDataFolderStatic(), "log.txt");
- logFile.ArchiveFileName = "log.{#####}.txt";
- logFile.ArchiveAboveSize = 500000;
- logFile.MaxArchiveFiles = 5;
- logFile.KeepFileOpen = false;
- logFile.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
- var logFileRule = new LoggingRule("*", logLevel, logFile);
- logConfig.LoggingRules.Add(logFileRule);
-
- var logConsole = new ColoredConsoleTarget();
- logConfig.AddTarget("console", logConsole);
-
- logConsole.Layout = "${simpledatetime} ${level} ${message} ${exception:format=ToString}";
- var logConsoleRule = new LoggingRule("*", logLevel, logConsole);
- logConfig.LoggingRules.Add(logConsoleRule);
-
- var logService = new LogCacheService();
- logConfig.AddTarget("service", logService);
- var serviceRule = new LoggingRule("*", logLevel, logService);
- logConfig.LoggingRules.Add(serviceRule);
-
- LogManager.Configuration = logConfig;
- builder.RegisterInstance(LogManager.GetCurrentClassLogger()).SingleInstance();
-
-
- }
-
- public static void SetLogLevel(LogLevel level)
- {
-
- foreach (var rule in LogManager.Configuration.LoggingRules)
- {
- if (level == LogLevel.Debug)
- {
- if (!rule.Levels.Contains(LogLevel.Debug))
- {
- rule.EnableLoggingForLevel(LogLevel.Debug);
- }
- }
- else
- {
- if (rule.Levels.Contains(LogLevel.Debug))
- {
- rule.DisableLoggingForLevel(LogLevel.Debug);
- }
- }
-
- }
-
- LogManager.ReconfigExistingLoggers();
- }
- }
-
-
- [LayoutRenderer("simpledatetime")]
- public class SimpleDateTimeRenderer : LayoutRenderer
- {
- protected override void Append(StringBuilder builder, LogEventInfo logEvent)
- {
- builder.Append(DateTime.Now.ToString("MM-dd HH:mm:ss"));
- }
- }
-}
+using Autofac;
+using Jackett.Services;
+using NLog;
+using NLog.Config;
+using NLog.LayoutRenderers;
+using NLog.Targets;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Jackett
+{
+ public class Engine
+ {
+ private static IContainer container = null;
+
+ static Engine()
+ {
+ BuildContainer();
+
+ }
+
+ public static void BuildContainer()
+ {
+ var builder = new ContainerBuilder();
+ builder.RegisterModule();
+ container = builder.Build();
+
+ // Register the container in itself to allow for late resolves
+ var secondaryBuilder = new ContainerBuilder();
+ secondaryBuilder.RegisterInstance(container).SingleInstance();
+ SetupLogging(secondaryBuilder);
+ secondaryBuilder.Update(container);
+
+ }
+
+ public static IContainer GetContainer()
+ {
+ return container;
+ }
+
+ public static bool IsWindows
+ {
+ get
+ {
+ return Environment.OSVersion.Platform == PlatformID.Win32NT;
+ }
+ }
+
+ public static IConfigurationService ConfigService
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static IProcessService ProcessService
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static IServiceConfigService ServiceConfig
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static ITrayLockService LockService
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static IServerService Server
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static IRunTimeService RunTime
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static Logger Logger
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+ public static ISecuityService SecurityService
+ {
+ get
+ {
+ return container.Resolve();
+ }
+ }
+
+
+ public static void SetupLogging(ContainerBuilder builder = null, string logfile = "log.txt")
+ {
+ var logLevel = Startup.TracingEnabled ? LogLevel.Debug : LogLevel.Info;
+ // Add custom date time format renderer as the default is too long
+ ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("simpledatetime", typeof(SimpleDateTimeRenderer));
+
+ var logConfig = new LoggingConfiguration();
+ var logFile = new FileTarget();
+ logConfig.AddTarget("file", logFile);
+ logFile.Layout = "${longdate} ${level} ${message} ${exception:format=ToString}";
+ logFile.FileName = Path.Combine(ConfigurationService.GetAppDataFolderStatic(), logfile);
+ logFile.ArchiveFileName = "log.{#####}.txt";
+ logFile.ArchiveAboveSize = 500000;
+ logFile.MaxArchiveFiles = 5;
+ logFile.KeepFileOpen = false;
+ logFile.ArchiveNumbering = ArchiveNumberingMode.DateAndSequence;
+ var logFileRule = new LoggingRule("*", logLevel, logFile);
+ logConfig.LoggingRules.Add(logFileRule);
+
+ var logConsole = new ColoredConsoleTarget();
+ logConfig.AddTarget("console", logConsole);
+
+ logConsole.Layout = "${simpledatetime} ${level} ${message} ${exception:format=ToString}";
+ var logConsoleRule = new LoggingRule("*", logLevel, logConsole);
+ logConfig.LoggingRules.Add(logConsoleRule);
+
+ var logService = new LogCacheService();
+ logConfig.AddTarget("service", logService);
+ var serviceRule = new LoggingRule("*", logLevel, logService);
+ logConfig.LoggingRules.Add(serviceRule);
+
+ LogManager.Configuration = logConfig;
+ if (builder != null)
+ {
+ builder.RegisterInstance(LogManager.GetCurrentClassLogger()).SingleInstance();
+ }
+ }
+
+ public static void SetLogLevel(LogLevel level)
+ {
+
+ foreach (var rule in LogManager.Configuration.LoggingRules)
+ {
+ if (level == LogLevel.Debug)
+ {
+ if (!rule.Levels.Contains(LogLevel.Debug))
+ {
+ rule.EnableLoggingForLevel(LogLevel.Debug);
+ }
+ }
+ else
+ {
+ if (rule.Levels.Contains(LogLevel.Debug))
+ {
+ rule.DisableLoggingForLevel(LogLevel.Debug);
+ }
+ }
+
+ }
+
+ LogManager.ReconfigExistingLoggers();
+ }
+ }
+
+
+ [LayoutRenderer("simpledatetime")]
+ public class SimpleDateTimeRenderer : LayoutRenderer
+ {
+ protected override void Append(StringBuilder builder, LogEventInfo logEvent)
+ {
+ builder.Append(DateTime.Now.ToString("MM-dd HH:mm:ss"));
+ }
+ }
+}