public static void DisableVRCFlowManager() { VRCModLogger.Log("[VRCFlowManagerUtils] Looking for VRCFlowManager"); VRCFlowManager[] flowManagers = Resources.FindObjectsOfTypeAll <VRCFlowManager>(); foreach (VRCFlowManager flowManager in flowManagers) { flowManager.enabled = false; } VRCModLogger.Log("[VRCFlowManagerUtils] Disabled " + flowManagers.Length + " VRCFlowManager"); if (GameObject.Find("UserInterface") == null) { VRCModLogger.Log("[VRCToolsUpdater] Loading additive scene \"ui\""); AssetManagement.LoadLevelAdditive("ui"); } }
internal static IEnumerator UpdateAndRebootIfRequired() { if (needUpdate || errored) { bool goForUpdate = needUpdate; needUpdate = false; VRCModLogger.Log("[VRCToolsUpdater] Looking for VRCFlowManager"); VRCFlowManager[] flowManagers = Resources.FindObjectsOfTypeAll <VRCFlowManager>(); foreach (VRCFlowManager flowManager in flowManagers) { flowManager.enabled = false; } VRCModLogger.Log("[VRCToolsUpdater] Disabled " + flowManagers.Length + " VRCFlowManager"); if (GameObject.Find("UserInterface") == null) { VRCModLogger.Log("[VRCToolsUpdater] Loading additive scene \"ui\""); AssetManagement.LoadLevelAdditive("ui"); } if (goForUpdate) { needUpdate = false; bool choiceDone = false; bool update = false; yield return(ShowPopup("VRCTools Updater", "A VRCTools update is available", "Update", () => { choiceDone = true; update = true; }, "Ignore", () => { choiceDone = true; })); yield return(new WaitUntil(() => choiceDone)); if (update) { yield return(ShowUpdatePopup()); VRCModLogger.Log("[VRCToolsUpdater] Update popup shown"); WWW vrctoolsDownload = new WWW("https://vrchat.survival-machines.fr/vrcmod/VRCTools.dll"); yield return(vrctoolsDownload); while (!vrctoolsDownload.isDone) { VRCModLogger.Log("[VRCToolsUpdater] Download progress: " + vrctoolsDownload.progress); downloadProgressFillImage.fillAmount = vrctoolsDownload.progress; yield return(null); } int responseCode = getResponseCode(vrctoolsDownload); VRCModLogger.Log("[VRCToolsUpdater] Download done ! response code: " + responseCode); VRCModLogger.Log("[VRCToolsUpdater] File size: " + vrctoolsDownload.bytes.Length); if (responseCode == 200) { yield return(ShowPopup("VRCTools Updater", "Saving VRCTools")); VRCModLogger.Log("[VRCToolsUpdater] Saving file"); File.WriteAllBytes(vrctoolsPath, vrctoolsDownload.bytes); VRCModLogger.Log("[VRCToolsUpdater] Showing restart dialog"); choiceDone = false; yield return(ShowPopup("VRCTools Updater", "Update downloaded", "Restart", () => { choiceDone = true; })); yield return(new WaitUntil(() => choiceDone)); yield return(ShowPopup("VRCTools Updater", "Restarting game")); VRCModLogger.Log("[VRCToolsUpdater] Rebooting game"); string args = ""; bool first = true; foreach (string arg in Environment.GetCommandLineArgs()) { if (first) { first = false; } else { args = args + arg + " "; } } Thread t = new Thread(() => { Thread.Sleep(1000); System.Diagnostics.Process.Start(Path.GetDirectoryName(Path.GetDirectoryName(vrctoolsPath)) + "\\VRChat.exe", args); Thread.Sleep(100); }); t.Start(); Application.Quit(); } else { yield return(ShowErrorPopup("Unable to update VRCTools: Server returned code " + responseCode)); } } else { uiPopupManagerInstance.HideCurrentPopup(); foreach (VRCFlowManager flowManager in flowManagers) { flowManager.enabled = true; } VRCModLogger.Log("[VRCToolsUpdater] Enabled " + flowManagers.Length + " VRCFlowManager"); } } else if (errored) { yield return(ShowErrorPopup("Unable to check VRCTools validity: Server returned code " + errorCode)); } } }