From c70981efae72a8392c18a7e92db667eddbc55485 Mon Sep 17 00:00:00 2001 From: sr55 Date: Sun, 10 Jun 2018 21:21:45 +0100 Subject: [PATCH] WinGui: Implement most of the HTTP Worker Process stubs. --- .../Interop/HandBrakeInstance.cs | 16 ++ .../Interop/HandBrakeInstanceManager.cs | 53 +---- .../Interop/Interfaces/IEncodeInstance.cs | 20 ++ .../Interop/Interfaces/IHandBrakeInstance.cs | 13 -- .../Model/HBConfiguration.cs | 10 + win/CS/HandBrake.Worker/ApiRouter.cs | 52 +++-- win/CS/HandBrake.Worker/Program.cs | 13 +- .../Factories/HBConfigurationFactory.cs | 4 +- win/CS/HandBrakeWPF/HandBrakeWPF.csproj | 7 + .../Instance/HandBrakeInstanceManager.cs | 78 ++++++++ .../Instance/Model/ServerResponse.cs | 24 +++ .../HandBrakeWPF/Instance/RemoteInstance.cs | 188 ++++++++++++++++-- .../HandBrakeWPF/Services/Encode/LibEncode.cs | 13 +- win/CS/HandBrakeWPF/Services/Scan/LibScan.cs | 19 +- win/CS/HandBrakeWPF/UserSettingConstants.cs | 10 + .../HandBrakeWPF/ViewModels/MainViewModel.cs | 1 + win/CS/HandBrakeWPF/defaultsettings.xml | 16 ++ 17 files changed, 414 insertions(+), 123 deletions(-) create mode 100644 win/CS/HandBrakeWPF/Instance/HandBrakeInstanceManager.cs create mode 100644 win/CS/HandBrakeWPF/Instance/Model/ServerResponse.cs diff --git a/win/CS/HandBrake.Interop/Interop/HandBrakeInstance.cs b/win/CS/HandBrake.Interop/Interop/HandBrakeInstance.cs index 9f5420d3f..a5aef04a6 100644 --- a/win/CS/HandBrake.Interop/Interop/HandBrakeInstance.cs +++ b/win/CS/HandBrake.Interop/Interop/HandBrakeInstance.cs @@ -420,6 +420,22 @@ namespace HandBrake.Interop.Interop } } + /// + /// Checks the status of the ongoing encode. + /// + /// + /// The . + /// + [HandleProcessCorruptedStateExceptions] + public JsonState GetEncodeProgress() + { + IntPtr json = HBFunctions.hb_get_state_json(this.hbHandle); + string statusJson = Marshal.PtrToStringAnsi(json); + + JsonState state = JsonConvert.DeserializeObject(statusJson); + return state; + } + /// /// Frees any resources associated with this object. /// diff --git a/win/CS/HandBrake.Interop/Interop/HandBrakeInstanceManager.cs b/win/CS/HandBrake.Interop/Interop/HandBrakeInstanceManager.cs index 07ddb8a15..227fa0bd1 100644 --- a/win/CS/HandBrake.Interop/Interop/HandBrakeInstanceManager.cs +++ b/win/CS/HandBrake.Interop/Interop/HandBrakeInstanceManager.cs @@ -12,6 +12,7 @@ namespace HandBrake.Interop.Interop using System; using HandBrake.Interop.Interop.Interfaces; + using HandBrake.Interop.Model; /// /// The HandBrake Instance manager. @@ -20,7 +21,6 @@ namespace HandBrake.Interop.Interop public static class HandBrakeInstanceManager { private static HandBrakeInstance scanInstance; - private static HandBrakeInstance encodeInstance; private static HandBrakeInstance previewInstance; private static HandBrakeInstance masterInstance; @@ -71,34 +71,13 @@ namespace HandBrake.Interop.Interop /// /// The verbosity. /// - /// - /// The . - /// - public static IHandBrakeInstance GetEncodeInstance(int verbosity) - { - if (encodeInstance != null) - { - encodeInstance.Dispose(); - encodeInstance = null; - } - - HandBrakeInstance newInstance = new HandBrakeInstance(); - newInstance.Initialize(verbosity); - encodeInstance = newInstance; - - return encodeInstance; - } - - /// - /// The get encode instance. - /// - /// - /// The verbosity. + /// + /// The configuration. /// /// /// The . /// - public static IHandBrakeInstance GetPreviewInstance(int verbosity) + public static IHandBrakeInstance GetPreviewInstance(int verbosity, HBConfiguration configuration) { if (previewInstance != null) { @@ -110,6 +89,8 @@ namespace HandBrake.Interop.Interop newInstance.Initialize(verbosity); previewInstance = newInstance; + HandBrakeUtils.SetDvdNav(!configuration.IsDvdNavDisabled); + return previewInstance; } @@ -145,27 +126,5 @@ namespace HandBrake.Interop.Interop return scanInstance.Handle; } } - - /// - /// Gets the last encode scan instance. - /// - internal static IHandBrakeInstance LastEncodeScanInstance - { - get - { - return encodeInstance; - } - } - - /// - /// Gets the encode handle. - /// - internal static IntPtr LastEncodeHandle - { - get - { - return encodeInstance.Handle; - } - } } } diff --git a/win/CS/HandBrake.Interop/Interop/Interfaces/IEncodeInstance.cs b/win/CS/HandBrake.Interop/Interop/Interfaces/IEncodeInstance.cs index 68fd266f0..f0c4a2575 100644 --- a/win/CS/HandBrake.Interop/Interop/Interfaces/IEncodeInstance.cs +++ b/win/CS/HandBrake.Interop/Interop/Interfaces/IEncodeInstance.cs @@ -13,6 +13,7 @@ namespace HandBrake.Interop.Interop.Interfaces using HandBrake.Interop.Interop.EventArgs; using HandBrake.Interop.Interop.Json.Encode; + using HandBrake.Interop.Interop.Json.State; public interface IEncodeInstance { @@ -26,6 +27,19 @@ namespace HandBrake.Interop.Interop.Interfaces /// event EventHandler EncodeProgress; + /// + /// Initializes this instance. + /// + /// + /// The code for the logging verbosity to use. + /// + void Initialize(int verbosity); + + /// + /// Frees any resources associated with this object. + /// + void Dispose(); + /// /// Pauses the current encode. /// @@ -48,5 +62,11 @@ namespace HandBrake.Interop.Interop.Interfaces /// Stops the current encode. /// void StopEncode(); + + /// + /// Get the current Encode State. + /// + /// A JsonState object + JsonState GetEncodeProgress(); } } \ No newline at end of file diff --git a/win/CS/HandBrake.Interop/Interop/Interfaces/IHandBrakeInstance.cs b/win/CS/HandBrake.Interop/Interop/Interfaces/IHandBrakeInstance.cs index b6d46c80c..193769090 100644 --- a/win/CS/HandBrake.Interop/Interop/Interfaces/IHandBrakeInstance.cs +++ b/win/CS/HandBrake.Interop/Interop/Interfaces/IHandBrakeInstance.cs @@ -60,19 +60,6 @@ namespace HandBrake.Interop.Interop.Interfaces #region Public Methods - /// - /// Initializes this instance. - /// - /// - /// The code for the logging verbosity to use. - /// - void Initialize(int verbosity); - - /// - /// Frees any resources associated with this object. - /// - void Dispose(); - /// /// Gets an image for the given job and preview /// diff --git a/win/CS/HandBrake.Interop/Model/HBConfiguration.cs b/win/CS/HandBrake.Interop/Model/HBConfiguration.cs index a9c59c8b4..77ea30954 100644 --- a/win/CS/HandBrake.Interop/Model/HBConfiguration.cs +++ b/win/CS/HandBrake.Interop/Model/HBConfiguration.cs @@ -63,5 +63,15 @@ namespace HandBrake.Interop.Model /// Gets or sets the save log copy directory. /// public string SaveLogCopyDirectory { get; set; } + + /// + /// Gets or sets a value indicating whether we use in-process or out-of-process encoding. + /// + public bool RemoteServiceEnabled { get; set; } + + /// + /// Gets or sets a value indicating what port the worker process is to use. + /// + public int RemoteServicePort { get; set; } } } diff --git a/win/CS/HandBrake.Worker/ApiRouter.cs b/win/CS/HandBrake.Worker/ApiRouter.cs index 876680848..79b0ad262 100644 --- a/win/CS/HandBrake.Worker/ApiRouter.cs +++ b/win/CS/HandBrake.Worker/ApiRouter.cs @@ -14,34 +14,40 @@ namespace HandBrake.Worker using System.Net; using HandBrake.Interop.Interop; + using HandBrake.Interop.Interop.Json.State; using HandBrake.Interop.Utilities; using Newtonsoft.Json; public class ApiRouter { + private readonly JsonSerializerSettings jsonNetSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }; private HandBrakeInstance handbrakeInstance; - public string GetVersionInfo(HttpListenerRequest request) + public string Initialise(HttpListenerRequest request) { - JsonSerializerSettings settings = - new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }; + if (this.handbrakeInstance == null) + { + this.handbrakeInstance = new HandBrakeInstance(); + } + + // TODO support verbosity + this.handbrakeInstance.Initialize(1); + + return null; + } - string versionInfo = JsonConvert.SerializeObject((object)VersionHelper.GetVersion(), Formatting.Indented, settings); + public string GetVersionInfo(HttpListenerRequest request) + { + string versionInfo = JsonConvert.SerializeObject(VersionHelper.GetVersion(), Formatting.Indented, this.jsonNetSettings); return versionInfo; } public string StartEncode(HttpListenerRequest request) { - if (this.handbrakeInstance == null) - { - this.handbrakeInstance = new HandBrakeInstance(); - } + string requestPostData = GetRequestPostData(request); - string requestPostData = ApiRouter.GetRequestPostData(request); - - this.handbrakeInstance.Initialize(1); this.handbrakeInstance.StartEncode(requestPostData); return null; @@ -49,30 +55,21 @@ namespace HandBrake.Worker public string StopEncode(HttpListenerRequest request) { - if (this.handbrakeInstance != null) - { - this.handbrakeInstance.StopEncode(); - } + this.handbrakeInstance?.StopEncode(); return (string)null; } public string PauseEncode(HttpListenerRequest request) { - if (this.handbrakeInstance != null) - { - this.handbrakeInstance.PauseEncode(); - } + this.handbrakeInstance?.PauseEncode(); return null; } public string ResumeEncode(HttpListenerRequest request) { - if (this.handbrakeInstance != null) - { - this.handbrakeInstance.ResumeEncode(); - } + this.handbrakeInstance?.ResumeEncode(); return null; } @@ -81,7 +78,10 @@ namespace HandBrake.Worker { if (this.handbrakeInstance != null) { - return null; + JsonState statusJson = this.handbrakeInstance.GetEncodeProgress(); + string versionInfo = JsonConvert.SerializeObject(statusJson, Formatting.Indented, this.jsonNetSettings); + + return versionInfo; } return null; @@ -108,8 +108,4 @@ namespace HandBrake.Worker } } } - - public class strixng - { - } } diff --git a/win/CS/HandBrake.Worker/Program.cs b/win/CS/HandBrake.Worker/Program.cs index 139cf8c8f..d65d5d36a 100644 --- a/win/CS/HandBrake.Worker/Program.cs +++ b/win/CS/HandBrake.Worker/Program.cs @@ -15,6 +15,16 @@ namespace HandBrake.Worker public class Program { + /* + * TODO + * Methods: + * 1. Fetch Log + * 2. Fetch Log since last index. + * Services: + * 3. Support for connecting via sockets. + * 4. All methods will return a json state object response. + */ + private static ApiRouter router; public static void Main(string[] args) @@ -66,7 +76,8 @@ namespace HandBrake.Worker apiHandlers.Add("StopEncode", router.StopEncode); apiHandlers.Add("PollEncodeProgress", router.PollEncodeProgress); apiHandlers.Add("SetConfiguration", router.SetConfiguration); - + apiHandlers.Add("Initialise", router.Initialise); + return apiHandlers; } } diff --git a/win/CS/HandBrakeWPF/Factories/HBConfigurationFactory.cs b/win/CS/HandBrakeWPF/Factories/HBConfigurationFactory.cs index 568f7e390..c4d199ef8 100644 --- a/win/CS/HandBrakeWPF/Factories/HBConfigurationFactory.cs +++ b/win/CS/HandBrakeWPF/Factories/HBConfigurationFactory.cs @@ -45,7 +45,9 @@ namespace HandBrakeWPF.Factories SaveLogToCopyDirectory = UserSettingService.GetUserSetting(UserSettingConstants.SaveLogToCopyDirectory), SaveLogWithVideo = UserSettingService.GetUserSetting(UserSettingConstants.SaveLogWithVideo), SaveLogCopyDirectory = UserSettingService.GetUserSetting(UserSettingConstants.SaveLogCopyDirectory), - }; + RemoteServiceEnabled = UserSettingService.GetUserSetting(UserSettingConstants.RemoteServiceEnabled), + RemoteServicePort = UserSettingService.GetUserSetting(UserSettingConstants.RemoteServicePort) + }; return config; } diff --git a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj index 1c1d4da42..bbd1fb88d 100644 --- a/win/CS/HandBrakeWPF/HandBrakeWPF.csproj +++ b/win/CS/HandBrakeWPF/HandBrakeWPF.csproj @@ -90,6 +90,7 @@ + @@ -153,6 +154,8 @@ + + @@ -718,6 +721,10 @@ {087a2ba8-bac2-4577-a46f-07ff9d420016} HandBrake.Interop + + {f8370f37-b226-4830-aee7-6d7ae403e3d2} + HandBrake.Worker +