public override void Work() { string raw; using (var client = new WebClient()) { client.Headers.Add("user-agent", Constants.WEB_USER_AGENT); try { raw = client.DownloadString(Constants.UPDATE_REPO_URL); } catch (WebException ex) { raw = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); } } LatestReleaseData data = JsonConvert.DeserializeObject <LatestReleaseData>(raw); EventManager.Trigger_UpdateCheckDone(data); }
public void OnUpdateCheckComplete(object sender, EventArgs args) { LatestReleaseData data = ((UpdateCheckDoneArgs)args).Data; bool isUpdating = false; // Check our update data. if (data.message != null) { // If a message is set, it was some kind of error. Log.Write("NOT UPDATING: GitHub gave us an error -> " + data.message); } else { // Ensure our remote version number is not malformed. data.tag_name = data.tag_name.Trim(); // Trim any whitespace that might have slipped in. Regex versionCheck = new Regex(@"^\d+\.\d+\.\d+\.\d+$", RegexOptions.IgnoreCase); if (versionCheck.Match(data.tag_name).Success) { Log.Write("Remote latest version: " + data.tag_name); Version localVersion = new Version(Program.Version); Version remoteVersion = new Version(data.tag_name); if (remoteVersion.CompareTo(localVersion) > 0) { if (data.assets.Length > 0) { // Local version is out-of-date, lets fix that. isUpdating = true; new RunnerDownloadUpdate(data.assets[0].browser_download_url).Begin(); UI_FirstRunText.Text = string.Format("Updating W3DT ({0} -> {1})...", localVersion, remoteVersion); UI_FirstRunText.Show(); } else { // Missing assets. Human error (most likely). Log.Write("NOT UPDATING: Remote version has no assets attached!"); } } else { // Local version is equal to remote (or somehow newer). Log.Write("NOT UPDATING: Local version is newer or equal to remote version."); } } else { // Version number is not valid, generally caused by human error. Log.Write("NOT UPDATING: Remote version number is malformed -> " + data.tag_name); } } // There shouldn't be more than one event fired, but unregister anyway. EventManager.UpdateCheckDone -= OnUpdateCheckComplete; if (!isUpdating) { EventManager.Trigger_LoadStepDone(); if (!Program.Settings.ShowSourceSelector) { isDoneLoading = true; } isUpdateCheckDone = true; } }
public UpdateCheckDoneArgs(LatestReleaseData data) { Data = data; }
public static void Trigger_UpdateCheckDone(LatestReleaseData data) { TriggerEvent(_UpdateCheckDone, new UpdateCheckDoneArgs(data)); }