using System; using System.Collections; using System.IO; using Newtonsoft.Json; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; public class UpdateJSON { [JsonProperty("current_version")] public float Version { get; set; } [JsonProperty("download_link")] public string DownloadLink { get; set; } } public class UpdateChecker : MonoBehaviour { [SerializeField] private GameObject UpdateCover; [SerializeField] private string JSONURL; [SerializeField] private TextMeshProUGUI Message; [SerializeField] private GameObject ProgressContainer; [SerializeField] private Slider Progress; [SerializeField] private TextMeshProUGUI ProgressText; UpdateJSON UpdateJSON; bool doDownload = false; // Start is called before the first frame update void Start() { StartCoroutine(GetUpdateA()); } private IEnumerator GetUpdateA() { UpdateCover.SetActive(true); Message.text = "Checking for update..."; using (UnityWebRequest uwr = UnityWebRequest.Get(JSONURL)) { yield return uwr.SendWebRequest(); if (uwr.result == UnityWebRequest.Result.ConnectionError) { Debug.Log("Error While Sending for User info: " + uwr.error); } else { UpdateJSON JSON = JsonConvert.DeserializeObject(uwr.downloadHandler.text); UpdateJSON = JSON; if (JSON.Version > float.Parse(Application.version)) {// Update Needed! float OnlineVersion = JSON.Version; string message = $"This application is out of date. Please update.\nCurrent Version: {Application.version}\nAvailable Version: {OnlineVersion}\n(Click anywhere to Download and install)"; Message.text = message; doDownload = true; } else if (JSON.Version == float.Parse(Application.version)) {// We are up to date! UpdateCover.SetActive(false); } } } } public void DownloadUpdate() { if (doDownload) { StartCoroutine(DownloadUpdateA()); } } private IEnumerator DownloadUpdateA() { Debug.Log("DownloadFileA Called"); string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+@"\Schaken-ModsĀ®\Mod Downloader\"; string fullPath = Path.Combine(path, "Update.exe"); var dh = new DownloadHandlerFile(fullPath) { removeFileOnAbort = true }; var uwr = new UnityWebRequest(UpdateJSON.DownloadLink, UnityWebRequest.kHttpVerbGET) { downloadHandler = dh }; var operation = uwr.SendWebRequest(); Debug.Log("Web request sent"); while (!operation.isDone) { ProgressContainer.SetActive(true); Progress.value = uwr.downloadProgress; ProgressText.text = string.Format("{0:P1}", uwr.downloadProgress); yield return new WaitForSeconds(0.5f); } if (uwr.result == UnityWebRequest.Result.Success) { Progress.value = 1; ProgressText.text = "Starting Install..."; } else { Debug.LogError($"Download failed: {uwr.error}"); } yield return new WaitForSeconds(0.5f); Debug.Log("Writing File"); uwr.Dispose(); Application.OpenURL(fullPath); yield return new WaitForSeconds(2.0f); #if !UNITY_EDITOR Application.Quit(); #endif } }