From ca47896204482bf4a6979e3838bf7f09f61cebeb Mon Sep 17 00:00:00 2001 From: giy <giy@omp-system.ru> Date: Fri, 02 Sep 2022 14:16:56 +0300 Subject: [PATCH] Обновление до версии 2.9.0 --- QtVsTools.Package/Options/QtVersionsPage.cs | 92 +++++++++++++++++++++++++++++++++------------- 1 files changed, 66 insertions(+), 26 deletions(-) diff --git a/QtVsTools.Package/Options/QtVersionsPage.cs b/QtVsTools.Package/Options/QtVersionsPage.cs index f28e8ee..cffc4b7 100644 --- a/QtVsTools.Package/Options/QtVersionsPage.cs +++ b/QtVsTools.Package/Options/QtVersionsPage.cs @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2022 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt VS Tools. @@ -28,29 +28,37 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Windows; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; -using QtVsTools.Core; namespace QtVsTools.Options { + using Common; + using Core; + using static QtVsTools.Options.QtVersionsTable; + public class QtVersionsPage : UIElementDialogPage { + static LazyFactory Lazy { get; } = new LazyFactory(); + QtVersionManager VersionManager => QtVersionManager.The(); - QtVersionsTable _VersionsTable; - QtVersionsTable VersionsTable => _VersionsTable - ?? (_VersionsTable = new QtVersionsTable()); + QtVersionsTable VersionsTable => Lazy.Get(() => + VersionsTable, () => new QtVersionsTable()); protected override UIElement Child => VersionsTable; public override void LoadSettingsFromStorage() { - var versions = new List<QtVersionsTable.Row>(); + var versions = new List<Row>(); foreach (var versionName in VersionManager.GetVersions()) { var versionPath = VersionManager.GetInstallPath(versionName); + if (string.IsNullOrEmpty(versionPath)) + continue; + BuildHost host = BuildHost.Windows; string compiler = "msvc"; if (versionPath.StartsWith("SSH:") || versionPath.StartsWith("WSL:")) { @@ -65,13 +73,15 @@ compiler = linuxPaths[2]; } var defaultVersion = VersionManager.GetDefaultVersion(); - versions.Add(new QtVersionsTable.Row() + versions.Add(new Row() { IsDefault = (versionName == defaultVersion), VersionName = versionName, + InitialVersionName = versionName, Path = versionPath, Host = host, Compiler = compiler, + State = State.Unknown }); } VersionsTable.UpdateVersions(versions); @@ -79,23 +89,40 @@ public override void SaveSettingsToStorage() { - foreach (var versionName in VersionManager.GetVersions()) { + void RemoveVersion(string versionName) + { try { VersionManager.RemoveVersion(versionName); } catch (Exception exception) { - Messages.Print( - exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace); + exception.Log(); } } - foreach (var version in VersionsTable.Versions) { + + var versions = VersionsTable.Versions; + foreach (var version in versions) { + if (version.State.HasFlag(State.Removed)) + RemoveVersion(version.VersionName); + + if (!version.State.HasFlag(State.Modified)) + continue; + try { if (version.Host == BuildHost.Windows) { - var versionInfo = VersionInformation.Get(version.Path); - var generator = versionInfo.GetQMakeConfEntry("MAKEFILE_GENERATOR"); - if (generator != "MSVC.NET" && generator != "MSBUILD") - throw new Exception(SR.GetString( - "AddQtVersionDialog_IncorrectMakefileGenerator", generator)); - VersionManager.SaveVersion(version.VersionName, version.Path); + if (version.State.HasFlag((State)Column.Path)) { + var versionPath = version.Path; + var ignoreCase = StringComparison.CurrentCultureIgnoreCase; + if (Path.GetFileName(versionPath).Equals("qmake.exe", ignoreCase)) + versionPath = Path.GetDirectoryName(versionPath); + if (Path.GetFileName(versionPath).Equals("bin", ignoreCase)) + versionPath = Path.GetDirectoryName(versionPath); + var versionInfo = VersionInformation.Get(versionPath); + var generator = versionInfo.GetQMakeConfEntry("MAKEFILE_GENERATOR"); + if (generator != "MSVC.NET" && generator != "MSBUILD") + throw new Exception(string.Format( + "This Qt version uses an unsupported makefile generator (used: " + + "{0}, supported: MSVC.NET, MSBUILD)", generator)); + VersionManager.SaveVersion(version.VersionName, versionPath); + } } else { string name = version.VersionName; string access = @@ -107,21 +134,34 @@ path = string.Format("{0}:{1}:{2}", access, path, compiler); VersionManager.SaveVersion(name, path, checkPath: false); } + + if (version.State.HasFlag((State)Column.VersionName)) { + try { + VersionManager.SaveVersion(version.VersionName, version.Path); + if (!string.IsNullOrEmpty(version.InitialVersionName)) + VersionManager.RemoveVersion(version.InitialVersionName); + } catch (Exception exception) { + exception.Log(); + } + } } catch (Exception exception) { - Messages.Print( - exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace); + exception.Log(); + version.State = State.Removed; + RemoveVersion(version.VersionName); } } + try { - var defaultVersion = VersionsTable.Versions - .Where(version => version.IsDefault) - .FirstOrDefault(); - if (defaultVersion != null) - VersionManager.SaveDefaultVersion(defaultVersion.VersionName); + var defaultVersion = + versions.FirstOrDefault(v => v.IsDefault && v.State != State.Removed) + ?? versions.FirstOrDefault(v => v.State != State.Removed); + VersionManager.SaveDefaultVersion(defaultVersion?.VersionName ?? ""); } catch (Exception exception) { - Messages.Print( - exception.Message + "\r\n\r\nStacktrace:\r\n" + exception.StackTrace); + exception.Log(); } + + if (Notifications.NoQtVersion.IsOpen && VersionManager.GetVersions()?.Any() == true) + Notifications.NoQtVersion.Close(); } protected override void OnApply(PageApplyEventArgs e) -- Gitblit v1.9.1