using System.Diagnostics; using System.Reflection; using File = System.IO.File; namespace AiQ_GUI { internal class GUIUpdate { public static string GUIVerShort = ""; public static string FindGUIVersion() { string GUIVersion = Convert.ToString(Assembly.GetExecutingAssembly().GetName().Version); int dotLocation = GUIVersion.IndexOf('.'); // Find the first dot location // If there is no dot in the version string, return the version as is if (dotLocation < 0) { return GUIVersion; } // Check if the next character after the dot is "0" if (dotLocation + 1 < GUIVersion.Length && GUIVersion[dotLocation + 1] == '0') { return GUIVersion.Substring(0, dotLocation); // If it's "0", remove everything after the first dot } else { // Otherwise, trim the version to the second dot (if it exists) int secondDotLocation = GUIVersion.IndexOf('.', dotLocation + 1); if (secondDotLocation >= 0) { return GUIVersion.Substring(0, secondDotLocation); } else { // If there's no second dot, return the version up to the first dot return GUIVersion.Substring(0, dotLocation); } } } // Checks if the version in the model info spreadsheet is newer than the one installed and goes to update path if so and opens file // Because it has the same application name Windows treats it as an update and installs it as the same program, therefore no need for acrhive folder // It will install as 1 program as not to fill up the PC with lots of different apps public static void UpdateGUI() { if (ComapreVersions()) // Checks if the current version is older than the latest version { string GUIPath = $"{GoogleAPI.DrivePath}AiQ\\GUI's\\AiQ_Final_Test\\AiQ_GUI.application"; // Check if path is real if (!File.Exists(GUIPath)) { MainForm.Instance.AddToActionsList("Error finding new app version in Google Drive."); return; } // Brings up messagebox to ask user if they want to update DialogResult result = MessageBox.Show( $"Do you want to update to version {UniversalData.LatestVersion}?", "Update Available", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly ); if (result == DialogResult.Yes) { ProcessStartInfo psi = new() { FileName = GUIPath, UseShellExecute = true // Lets the OS decide how to open it }; Logging.LogMessage($"Updating to {UniversalData.LatestVersion} at {GUIPath}"); Process.Start(psi); Application.Exit(); } else { Logging.LogWarningMessage($"Refused Update to {UniversalData.LatestVersion} at {GUIPath}"); } } } private static bool ComapreVersions() { // Handles missing dots and patch numbers string[] currentParts = GUIVerShort.Split('.'); string[] latestParts = UniversalData.LatestVersion.Split('.'); int currentMajor = currentParts.Length > 0 && int.TryParse(currentParts[0], out int cm) ? cm : 0; int latestMajor = latestParts.Length > 0 && int.TryParse(latestParts[0], out int lm) ? lm : 0; int currentMinor = currentParts.Length > 1 && int.TryParse(currentParts[1], out int cmi) ? cmi : 0; int latestMinor = latestParts.Length > 1 && int.TryParse(latestParts[1], out int lmi) ? lmi : 0; int currentPatch = currentParts.Length > 2 && int.TryParse(currentParts[2], out int cp) ? cp : 0; int latestPatch = latestParts.Length > 2 && int.TryParse(latestParts[2], out int lp) ? lp : 0; if (latestMajor > currentMajor) return true; // Newer major version else if (latestMajor == currentMajor) { if (latestMinor > currentMinor) return true; // Newer minor version else if (latestMinor == currentMinor) { if (latestPatch > currentPatch) return true; // Newer patch version } } return false; // There is not a newer version } } }