From a9e14cc4af5abf9f1cc24c5ecb49a9c527a08531 Mon Sep 17 00:00:00 2001 From: WhatFox Date: Mon, 9 Nov 2015 21:59:16 +0000 Subject: [PATCH] Auto update #8 --- .gitignore | 1 + Build.bat | 4 + Installer.iss | 26 ++- src/Jackett.Updater/App.config | 30 +++ src/Jackett.Updater/Jackett.Updater.csproj | 83 +++++++ src/Jackett.Updater/Program.cs | 143 ++++++++++++ .../Properties/AssemblyInfo.cs | 36 +++ src/Jackett.Updater/UpdaterConsoleOptions.cs | 21 ++ src/Jackett.Updater/jackett.ico | Bin 0 -> 370070 bytes src/Jackett.Updater/packages.config | 5 + src/Jackett.sln | 6 + src/Jackett/Content/custom.css | 2 +- src/Jackett/Content/custom.js | 16 ++ src/Jackett/Content/index.html | 9 +- src/Jackett/Controllers/AdminController.cs | 18 +- src/Jackett/Jackett.csproj | 9 + src/Jackett/Models/Config/ServerConfig.cs | 3 + src/Jackett/Services/ServerService.cs | 5 +- src/Jackett/Services/ServiceConfigService.cs | 2 +- src/Jackett/Services/UpdateService.cs | 207 ++++++++++++++++++ src/Jackett/packages.config | 2 + 21 files changed, 610 insertions(+), 18 deletions(-) create mode 100644 src/Jackett.Updater/App.config create mode 100644 src/Jackett.Updater/Jackett.Updater.csproj create mode 100644 src/Jackett.Updater/Program.cs create mode 100644 src/Jackett.Updater/Properties/AssemblyInfo.cs create mode 100644 src/Jackett.Updater/UpdaterConsoleOptions.cs create mode 100644 src/Jackett.Updater/jackett.ico create mode 100644 src/Jackett.Updater/packages.config create mode 100644 src/Jackett/Services/UpdateService.cs diff --git a/.gitignore b/.gitignore index eb5a9e709..b448ab4bf 100644 --- a/.gitignore +++ b/.gitignore @@ -196,3 +196,4 @@ FakesAssemblies/ *.opt /Build.mono /Build.windows +/Output diff --git a/Build.bat b/Build.bat index c00001a65..d8639c15d 100644 --- a/Build.bat +++ b/Build.bat @@ -11,6 +11,8 @@ copy /Y src\Jackett.Service\bin\Release\JackettService.exe build.windows\Jackett copy /Y src\Jackett.Service\bin\Release\JackettService.exe.config build.windows\JackettService.exe.config copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe build.windows\JackettTray.exe copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe.config build.windows\JackettTray.exe.config +copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe build.windows\JackettUpdater.exe +copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe.config build.windows\JackettUpdater.exe.config copy /Y LICENSE build.windows\LICENSE copy /Y README.md build.windows\README.md @@ -25,6 +27,8 @@ copy /Y src\Jackett.Service\bin\Release\JackettService.exe build.mono\JackettSer copy /Y src\Jackett.Service\bin\Release\JackettService.exe.config build.mono\JackettService.exe.config copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe build.mono\JackettTray.exe copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe.config build.mono\JackettTray.exe.config +copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe build.mono\JackettUpdater.exe +copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe.config build.mono\JackettUpdater.exe.config copy /Y LICENSE build.mono\LICENSE copy /Y README.md build.mono\README.md copy /Y Upstart.config build.mono\Upstart.config diff --git a/Installer.iss b/Installer.iss index 3458be00b..103f09715 100644 --- a/Installer.iss +++ b/Installer.iss @@ -24,9 +24,10 @@ DefaultGroupName={#MyAppName} DisableProgramGroupPage=yes OutputBaseFilename=setup SetupIconFile=src\Jackett.Console\jackett.ico -UninstallDisplayIcon={app}\JackettConsole.exe +UninstallDisplayIcon={userappdata}\Jackett\JackettConsole.exe Compression=lzma SolidCompression=yes +DisableDirPage=yes [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" @@ -36,26 +37,27 @@ Name: "windowsService"; Description: "Install as a Windows Service" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] -Source: "build.windows\JackettTray.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "build.windows\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: "build.windows\JackettTray.exe"; DestDir: "{userappdata}\Jackett"; Flags: ignoreversion +Source: "build.windows\JackettUpdater.exe"; DestDir: "{userappdata}\Jackett"; Flags: ignoreversion +Source: "build.windows\*"; DestDir: "{userappdata}\Jackett"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] -Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{group}\{#MyAppName}"; Filename: "{userappdata}\Jackett\{#MyAppExeName}" Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" -Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon +Name: "{commondesktop}\{#MyAppName}"; Filename: "{userappdata}\Jackett\{#MyAppExeName}"; Tasks: desktopicon [Run] -Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent +Filename: "{userappdata}\Jackett\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent [Run] -Filename: "{app}\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated; -Filename: "{app}\JackettConsole.exe"; Parameters: "--ReserveUrls"; Flags: waituntilterminated; -Filename: "{app}\JackettConsole.exe"; Parameters: "--MigrateSettings"; Flags: waituntilterminated; -Filename: "{app}\JackettConsole.exe"; Parameters: "--Install"; Flags: waituntilterminated; Tasks: windowsService -Filename: "{app}\JackettConsole.exe"; Parameters: "--Start"; Flags: waituntilterminated; Tasks: windowsService +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated; +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--ReserveUrls"; Flags: waituntilterminated; +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--MigrateSettings"; Flags: waituntilterminated; +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--Install"; Flags: waituntilterminated; Tasks: windowsService +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--Start"; Flags: waituntilterminated; Tasks: windowsService [UninstallRun] -Filename: "{app}\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated skipifdoesntexist +Filename: "{userappdata}\Jackett\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated skipifdoesntexist diff --git a/src/Jackett.Updater/App.config b/src/Jackett.Updater/App.config new file mode 100644 index 000000000..ac8dbeb66 --- /dev/null +++ b/src/Jackett.Updater/App.config @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Jackett.Updater/Jackett.Updater.csproj b/src/Jackett.Updater/Jackett.Updater.csproj new file mode 100644 index 000000000..336b68f84 --- /dev/null +++ b/src/Jackett.Updater/Jackett.Updater.csproj @@ -0,0 +1,83 @@ + + + + + Debug + AnyCPU + {A61E311A-6F8B-4497-B5E4-2EA8994C7BD8} + Exe + Properties + Jackett.Updater + JackettUpdater + v4.5 + 512 + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + jackett.ico + + + + ..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll + True + + + ..\packages\NLog.4.2.0\lib\net45\NLog.dll + True + + + + + + + + + + + + + + + + + + + + + + {e636d5f8-68b4-4903-b4ed-ccfd9c9e899f} + Jackett + + + + + + + + \ No newline at end of file diff --git a/src/Jackett.Updater/Program.cs b/src/Jackett.Updater/Program.cs new file mode 100644 index 000000000..d65a04040 --- /dev/null +++ b/src/Jackett.Updater/Program.cs @@ -0,0 +1,143 @@ +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) + { + Console.WriteLine("Jackett Updater v" + GetCurrentVersion()); + Console.WriteLine("Waiting for Jackett to close.."); + Thread.Sleep(2000); + + try { + var options = new UpdaterConsoleOptions(); + if (Parser.Default.ParseArguments(args, options)) + { + ProcessUpdate(options); + } + else + { + Console.WriteLine("Failed to process update arguments!: " + string.Join(" ", args)); + Console.ReadKey(); + } + } + catch (Exception e) + { + Console.WriteLine("Exception applying update: " + e.Message); + Console.ReadKey(); + } + } + + 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.exe"); + if (isWindows) + { + if (trayProcesses.Count() > 0) + { + foreach (var proc in trayProcesses) + { + try + { + Console.WriteLine("Killing tray process " + proc.Id); + proc.Kill(); + trayRunning = true; + } + catch { } + } + } + } + + 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; + } + + Console.WriteLine("Copying " + fileName); + var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length)); + File.Copy(file, dest, true); + } + + 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"; + } + + 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/Properties/AssemblyInfo.cs b/src/Jackett.Updater/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..a8201c4ad --- /dev/null +++ b/src/Jackett.Updater/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Jackett.Updater")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Jackett.Updater")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a61e311a-6f8b-4497-b5e4-2ea8994c7bd8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.0.0.0")] +[assembly: AssemblyFileVersion("0.0.0.0")] diff --git a/src/Jackett.Updater/UpdaterConsoleOptions.cs b/src/Jackett.Updater/UpdaterConsoleOptions.cs new file mode 100644 index 000000000..8c9703545 --- /dev/null +++ b/src/Jackett.Updater/UpdaterConsoleOptions.cs @@ -0,0 +1,21 @@ +using CommandLine; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Jackett.Updater +{ + public class UpdaterConsoleOptions + { + [Option('p', "Path", HelpText = "Install location")] + public string Path { get; set; } + + [Option('t', "Type", HelpText = "Install type")] + public string Type { get; set; } + + [Option('a', "Args", HelpText = "Launch arguments")] + public string Args { get; set; } + } +} diff --git a/src/Jackett.Updater/jackett.ico b/src/Jackett.Updater/jackett.ico new file mode 100644 index 0000000000000000000000000000000000000000..6392acc61b943dadd0a1cbd56fca7dc5de0b7791 GIT binary patch literal 370070 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 + + + + \ No newline at end of file diff --git a/src/Jackett.sln b/src/Jackett.sln index 587f30ce4..8f4da4b26 100644 --- a/src/Jackett.sln +++ b/src/Jackett.sln @@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jackett.Distribution", "Jac EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Website", "Website\Website.csproj", "{6B6AB1B0-5ABD-4696-A3D2-70E991174625}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Jackett.Updater", "Jackett.Updater\Jackett.Updater.csproj", "{A61E311A-6F8B-4497-B5E4-2EA8994C7BD8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -65,6 +67,10 @@ Global {6B6AB1B0-5ABD-4696-A3D2-70E991174625}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B6AB1B0-5ABD-4696-A3D2-70E991174625}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B6AB1B0-5ABD-4696-A3D2-70E991174625}.Release|Any CPU.Build.0 = Release|Any CPU + {A61E311A-6F8B-4497-B5E4-2EA8994C7BD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A61E311A-6F8B-4497-B5E4-2EA8994C7BD8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A61E311A-6F8B-4497-B5E4-2EA8994C7BD8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A61E311A-6F8B-4497-B5E4-2EA8994C7BD8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/Jackett/Content/custom.css b/src/Jackett/Content/custom.css index d576a4607..013b4cbd7 100644 --- a/src/Jackett/Content/custom.css +++ b/src/Jackett/Content/custom.css @@ -220,7 +220,7 @@ hr { text-align: center; } -#jackett-allowext { +#jackett-allowext, #jackett-allowupdate { width: 25px; } diff --git a/src/Jackett/Content/custom.js b/src/Jackett/Content/custom.js index fa026e9c1..aa31c6060 100644 --- a/src/Jackett/Content/custom.js +++ b/src/Jackett/Content/custom.js @@ -24,6 +24,7 @@ function loadJackettSettings() { $("#jackett-port").val(data.config.port); $("#jackett-savedir").val(data.config.blackholedir); $("#jackett-allowext").attr('checked', data.config.external); + $("#jackett-allowupdate").attr('checked', data.config.updatedisabled); var password = data.config.password; $("#jackett-adminpwd").val(password); if (password != null && password != '') { @@ -544,9 +545,11 @@ function bindUIButtons() { $("#change-jackett-port").click(function () { var jackett_port = $("#jackett-port").val(); var jackett_external = $("#jackett-allowext").is(':checked'); + var jackett_update = $("#jackett-allowupdate").is(':checked'); var jsonObject = { port: jackett_port, external: jackett_external, + updatedisabled: jackett_update, blackholedir: $("#jackett-savedir").val() }; var jqxhr = $.post("/admin/set_config", JSON.stringify(jsonObject), function (data) { @@ -570,6 +573,19 @@ function bindUIButtons() { }); }); + $("#trigger-updater").click(function () { + var jqxhr = $.get("/admin/trigger_update", function (data) { + if (data.result == "error") { + doNotify("Error: " + data.error, "danger", "glyphicon glyphicon-alert"); + return; + } else { + doNotify("Updater triggered see log for details..", "success", "glyphicon glyphicon-ok"); + } + }).fail(function () { + doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert"); + }); + }); + $("#change-jackett-password").click(function () { var password = $("#jackett-adminpwd").val(); var jsonObject = { password: password }; diff --git a/src/Jackett/Content/index.html b/src/Jackett/Content/index.html index fdaaf9996..712fc02cf 100644 --- a/src/Jackett/Content/index.html +++ b/src/Jackett/Content/index.html @@ -61,7 +61,7 @@

Jackett Configuration

- Admin Password: + Admin password:
+
+ Disable auto update: + + +