private void StartLauncherPatch() { if (string.IsNullOrEmpty(launcherVersionInfoURL)) { return; } SimplePatchTool patcher = InitializePatcher(launcherDirectory, launcherVersionInfoURL); PatcherListener patcherListener = new PatcherListener(); patcherListener.OnVersionInfoFetched += (versionInfo) => versionInfo.AddIgnoredPath(gamesSubdirectory + "/"); patcherListener.OnVersionFetched += (currVersion, newVersion) => versionCodeText.text = "v" + currVersion; patcherListener.OnFinish += () => { if (patcher.Result == PatchResult.Success) { updateLauncherPanel.gameObject.SetActive(true); updateLauncherButton.onClick.AddListener(() => patcher.ApplySelfPatch(selfPatcherPath, PatchUtils.GetCurrentExecutablePath())); } else if (patcher.Result == PatchResult.AlreadyUpToDate) { Debug.Log("Launcher is up-to-date!"); } else { Debug.LogError("Something went wrong with launcher's patch: " + patcher.FailDetails); } }; if (!patcher.SetListener(patcherListener).Run(true)) // true: Self patching { Debug.LogWarning("Operation could not be started; maybe it is already executing?"); } }
private IEnumerator ExecutePatch() { patchButton.interactable = false; playButton.interactable = false; patcher.LogProgress(true); if (patcher.Run(isPatchingLauncher)) { Debug.Log("Executing patch..."); while (patcher.IsRunning) { FetchLogsFromPatcher(); yield return(null); } FetchLogsFromPatcher(); playButton.interactable = true; if (patcher.Result == PatchResult.AlreadyUpToDate) { // If launcher is already up-to-date, check if there is an update for the main app if (isPatchingLauncher) { StartMainAppPatch(true); } } else if (patcher.Result == PatchResult.Success) { // If patcher was self patching the launcher, start the self patcher executable // Otherwise, we have just updated the main app successfully! if (patcher.Operation == PatchOperation.SelfPatching) { string selfPatcherPath = SPTUtils.SelfPatcherExecutablePath; if (!string.IsNullOrEmpty(selfPatcherPath) && File.Exists(selfPatcherPath)) { patcher.ApplySelfPatch(selfPatcherPath, PatchUtils.GetCurrentExecutablePath()); } else { patcherLogText.text = "Self patcher does not exist!"; } } } else { // An error occurred, user can click the Patch button to try again patchButton.interactable = true; } } else { Debug.LogWarning("Operation could not be started; maybe it is already executing?"); } }
private void ExecutePatch() { StartThread(() => { ButtonSetEnabled(patchButton, false); ButtonSetEnabled(playButton, false); patcher.LogProgress(true); if (patcher.Run(isPatchingLauncher)) { while (patcher.IsRunning) { FetchLogsFromPatcher(); Thread.Sleep(500); } FetchLogsFromPatcher(); ButtonSetEnabled(playButton, true); if (patcher.Result == PatchResult.AlreadyUpToDate) { // If launcher is already up-to-date, check if there is an update for the main app if (isPatchingLauncher) { StartMainAppPatch(true); } } else if (patcher.Result == PatchResult.Success) { // If patcher was self patching the launcher, start the self patcher executable // Otherwise, we have just updated the main app successfully! if (patcher.Operation == PatchOperation.SelfPatching) { if (!string.IsNullOrEmpty(selfPatcherExecutablePath) && File.Exists(selfPatcherExecutablePath)) { patcher.ApplySelfPatch(selfPatcherExecutablePath, PatchUtils.GetCurrentExecutablePath()); } else { UpdateLabel(progressText, "Self patcher does not exist!"); } } } else { // An error occurred, user can click the Patch button to try again ButtonSetEnabled(patchButton, true); } } }); }
private void ApplySelfPatch() { patcher.ApplySelfPatch(selfPatcherPath, PatchUtils.GetCurrentExecutablePath()); }