public static void RunUpdateChecker() { Debugger.WriteLine(LogLevel.Info, "Checking for updates..."); UpdateInfo = new UpdateInfo(); Dictionary<string, object> versionInfo; try { versionInfo = GetLatestReleasedVersion(); if (versionInfo == null) throw new Exception("No version data downloaded!"); } catch (WebException e) { Debugger.WriteLine(LogLevel.Error, $"Failed to get latest version info! Reason: {e}"); Debugger.WriteLine( LogLevel.Error, $"Response: {new StreamReader(e.Response.GetResponseStream()).ReadToEnd()}"); UpdatesChecked = true; return; } catch (Exception e) { Debugger.WriteLine(LogLevel.Error, $"Failed to get latest version info! Reason: {e}"); UpdatesChecked = true; return; } Debugger.WriteLine(LogLevel.Info, "Got latest version info!"); Debugger.WriteLine(LogLevel.Info, $"Current version: {MaidFiddler.VERSION_TAG}"); Debugger.WriteLine(LogLevel.Info, $"Latest version: {versionInfo["tag_name"]}"); Match current = versionPattern.Match(MaidFiddler.VERSION_TAG); Match latest = versionPattern.Match((string) versionInfo["tag_name"]); if (!latest.Success) { Debugger.WriteLine( LogLevel.Error, "Could not process version tag. Tag is probably older than Beta 0.11 Skipping version check."); UpdatesChecked = true; return; } bool isNewAvailable; try { string currentVersionPrefix = current.Groups["prefix"].Value; int currentMajor = int.Parse(current.Groups["major"].Value); int currentMinor = int.Parse(current.Groups["minor"].Value); int currentPatch = current.Groups["patch"].Success ? int.Parse(current.Groups["patch"].Value) : 0; string latestVersionPrefix = latest.Groups["prefix"].Value; int latestMajor = int.Parse(latest.Groups["major"].Value); int latestMinor = int.Parse(latest.Groups["minor"].Value); int latestPatch = latest.Groups["patch"].Success ? int.Parse(latest.Groups["patch"].Value) : 0; bool samePrefix = latestVersionPrefix == currentVersionPrefix; bool sameMajor = latestMajor == currentMajor; bool sameMinor = latestMinor == currentMinor; isNewAvailable = latestVersionPrefix == "v" && currentVersionPrefix == "Beta-" || samePrefix && latestMajor > currentMajor || samePrefix && sameMajor && latestMinor > currentMinor || samePrefix && sameMajor && sameMinor && latestPatch > currentPatch; } catch (Exception e) { Debugger.WriteLine(LogLevel.Error, $"Failed to parse tool versions! Reason: {e}"); UpdatesChecked = true; return; } if (!isNewAvailable) { UpdatesChecked = true; return; } UpdateInfo newUpdateInfo = new UpdateInfo { IsAvailable = true, Version = (string) versionInfo["name"], Changelog = ((string) versionInfo["body"]).Replace("*", string.Empty) }; UpdateInfo = newUpdateInfo; UpdatesChecked = true; }
public static void RunUpdateChecker() { Debugger.WriteLine(LogLevel.Info, "Checking for updates..."); UpdateInfo = new UpdateInfo(); Dictionary <string, object> versionInfo; try { versionInfo = GetLatestReleasedVersion(); if (versionInfo == null) { throw new Exception("No version data downloaded!"); } } catch (WebException e) { Debugger.WriteLine(LogLevel.Error, $"Failed to get latest version info! Reason: {e}"); Debugger.WriteLine( LogLevel.Error, $"Response: {new StreamReader(e.Response.GetResponseStream()).ReadToEnd()}"); UpdatesChecked = true; return; } catch (Exception e) { Debugger.WriteLine(LogLevel.Error, $"Failed to get latest version info! Reason: {e}"); UpdatesChecked = true; return; } Debugger.WriteLine(LogLevel.Info, "Got latest version info!"); Debugger.WriteLine(LogLevel.Info, $"Current version: {MaidFiddler.VERSION_TAG}"); Debugger.WriteLine(LogLevel.Info, $"Latest version: {versionInfo["tag_name"]}"); Match current = versionPattern.Match(MaidFiddler.VERSION_TAG); Match latest = versionPattern.Match((string)versionInfo["tag_name"]); if (!latest.Success) { Debugger.WriteLine( LogLevel.Error, "Could not process version tag. Tag is probably older than Beta 0.11 Skipping version check."); UpdatesChecked = true; return; } bool isNewAvailable; try { string currentVersionPrefix = current.Groups["prefix"].Value; int currentMajor = int.Parse(current.Groups["major"].Value); int currentMinor = int.Parse(current.Groups["minor"].Value); int currentPatch = current.Groups["patch"].Success ? int.Parse(current.Groups["patch"].Value) : 0; string latestVersionPrefix = latest.Groups["prefix"].Value; int latestMajor = int.Parse(latest.Groups["major"].Value); int latestMinor = int.Parse(latest.Groups["minor"].Value); int latestPatch = latest.Groups["patch"].Success ? int.Parse(latest.Groups["patch"].Value) : 0; bool samePrefix = latestVersionPrefix == currentVersionPrefix; bool sameMajor = latestMajor == currentMajor; bool sameMinor = latestMinor == currentMinor; isNewAvailable = latestVersionPrefix == "v" && currentVersionPrefix == "Beta-" || samePrefix && latestMajor > currentMajor || samePrefix && sameMajor && latestMinor > currentMinor || samePrefix && sameMajor && sameMinor && latestPatch > currentPatch; } catch (Exception e) { Debugger.WriteLine(LogLevel.Error, $"Failed to parse tool versions! Reason: {e}"); UpdatesChecked = true; return; } if (!isNewAvailable) { UpdatesChecked = true; return; } UpdateInfo newUpdateInfo = new UpdateInfo { IsAvailable = true, Version = (string)versionInfo["name"], Changelog = ((string)versionInfo["body"]).Replace("*", string.Empty) }; UpdateInfo = newUpdateInfo; UpdatesChecked = true; }