Example #1
0
        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");
            }
        }
Example #2
0
        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));
                }
            }
        }