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")); + } + } +}