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