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/Package/Translation.cs | 171 ++++++++++++-------------------------------------------- 1 files changed, 37 insertions(+), 134 deletions(-) diff --git a/QtVsTools.Package/Package/Translation.cs b/QtVsTools.Package/Package/Translation.cs index 3c7e9f2..d47e525 100644 --- a/QtVsTools.Package/Package/Translation.cs +++ b/QtVsTools.Package/Package/Translation.cs @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 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. @@ -26,24 +26,16 @@ ** ****************************************************************************/ -using Microsoft.VisualStudio; -using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.VCProjectEngine; -using QtVsTools.Core; -using QtVsTools.VisualStudio; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using System.Windows.Forms; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.VCProjectEngine; namespace QtVsTools { - using static Core.HelperFunctions; + using Core; using QtMsBuild; /// <summary> @@ -51,16 +43,10 @@ /// </summary> public static class Translation { - public static void RunlRelease(VCFile vcFile) - { - var vcProj = vcFile.project as VCProject; - var project = vcProj?.Object as EnvDTE.Project; - RunTranslationTarget(BuildAction.Release, - project, new[] { vcFile.RelativePath }); - } - public static void RunlRelease(VCFile[] vcFiles) { + ThreadHelper.ThrowIfNotOnUIThread(); + var vcProj = vcFiles.FirstOrDefault()?.project as VCProject; var project = vcProj?.Object as EnvDTE.Project; RunTranslationTarget(BuildAction.Release, @@ -69,11 +55,14 @@ public static void RunlRelease(EnvDTE.Project project) { + ThreadHelper.ThrowIfNotOnUIThread(); RunTranslationTarget(BuildAction.Release, project); } public static void RunlRelease(EnvDTE.Solution solution) { + ThreadHelper.ThrowIfNotOnUIThread(); + if (solution == null) return; @@ -83,6 +72,8 @@ public static void RunlUpdate(VCFile vcFile) { + ThreadHelper.ThrowIfNotOnUIThread(); + var vcProj = vcFile.project as VCProject; var project = vcProj?.Object as EnvDTE.Project; RunTranslationTarget(BuildAction.Update, @@ -91,6 +82,8 @@ public static void RunlUpdate(VCFile[] vcFiles) { + ThreadHelper.ThrowIfNotOnUIThread(); + var vcProj = vcFiles.FirstOrDefault()?.project as VCProject; var project = vcProj?.Object as EnvDTE.Project; RunTranslationTarget(BuildAction.Update, @@ -99,16 +92,19 @@ public static void RunlUpdate(EnvDTE.Project project) { + ThreadHelper.ThrowIfNotOnUIThread(); RunTranslationTarget(BuildAction.Update, project); } - enum BuildAction { Update, Release } + internal enum BuildAction { Update, Release } static void RunTranslationTarget( BuildAction buildAction, EnvDTE.Project project, IEnumerable<string> selectedFiles = null) { + ThreadHelper.ThrowIfNotOnUIThread(); + using (WaitDialog.Start( "Qt Visual Studio Tools", "Running translation tool...")) { @@ -122,10 +118,9 @@ if (qtPro.FormatVersion < Resources.qtMinFormatVersion_Settings) { Messages.Print("translation: Legacy project format"); try { - Legacy_RunTranslation(buildAction, qtPro, selectedFiles); - } catch (Exception e) { - Messages.Print( - e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace); + Legacy.Translation.Run(buildAction, qtPro, selectedFiles); + } catch (Exception exception) { + exception.Log(); } return; } @@ -152,12 +147,15 @@ if (selectedFiles != null) properties["SelectedFiles"] = string.Join(";", selectedFiles); - QtProjectBuild.StartBuild(project, activeConfigId, properties, new[] { target }); + QtProjectBuild.StartBuild( + project, project.FullName, activeConfigId, properties, new[] { target }); } } public static void RunlUpdate(EnvDTE.Solution solution) { + ThreadHelper.ThrowIfNotOnUIThread(); + if (solution == null) return; @@ -165,118 +163,23 @@ RunlUpdate(project); } - static void Legacy_RunTranslation( - BuildAction buildAction, - QtProject qtProject, - IEnumerable<string> tsFiles) - { - if (tsFiles == null) { - tsFiles = (qtProject.VCProject - .GetFilesEndingWith(".ts") as IVCCollection) - .Cast<VCFile>() - .Select(vcFile => vcFile.RelativePath); - if (tsFiles == null) { - Messages.Print("translation: no translation files found"); - return; - } - } - string tempFile = null; - foreach (var file in tsFiles.Where(file => file != null)) - Legacy_RunTranslation(buildAction, qtProject, file, ref tempFile); - } - - static void Legacy_RunTranslation( - BuildAction buildAction, - QtProject qtProject, - string tsFile, - ref string tempFile) - { - var qtVersion = qtProject.GetQtVersion(); - var qtInstallPath = QtVersionManager.The().GetInstallPath(qtVersion); - if (string.IsNullOrEmpty(qtInstallPath)) { - Messages.Print("translation: Error accessing Qt installation"); - return; - } - - var procInfo = new ProcessStartInfo - { - WorkingDirectory = qtProject.ProjectDir, - CreateNoWindow = true, - UseShellExecute = false, - RedirectStandardError = true, - RedirectStandardOutput = true, - Arguments = "" - }; - switch (buildAction) { - case BuildAction.Update: - Messages.Print("\r\n--- (lupdate) file: " + tsFile); - procInfo.FileName = Path.Combine(qtInstallPath, "bin", "lupdate.exe"); - var options = QtVSIPSettings.GetLUpdateOptions(); - if (!string.IsNullOrEmpty(options)) - procInfo.Arguments += options + " "; - if (tempFile == null) { - var inputFiles = GetProjectFiles(qtProject.Project, FilesToList.FL_HFiles) - .Union(GetProjectFiles(qtProject.Project, FilesToList.FL_CppFiles)) - .Union(GetProjectFiles(qtProject.Project, FilesToList.FL_UiFiles)) - .Union(GetProjectFiles(qtProject.Project, FilesToList.FL_QmlFiles)); - tempFile = Path.GetTempFileName(); - File.WriteAllLines(tempFile, inputFiles); - } - procInfo.Arguments += string.Format("\"@{0}\" -ts \"{1}\"", tempFile, tsFile); - break; - case BuildAction.Release: - Messages.Print("\r\n--- (lrelease) file: " + tsFile); - procInfo.FileName = Path.Combine(qtInstallPath, "bin", "lrelease.exe"); - options = QtVSIPSettings.GetLReleaseOptions(); - if (!string.IsNullOrEmpty(options)) - procInfo.Arguments += options + " "; - procInfo.Arguments += string.Format("\"{0}\"", tsFile); - break; - } - using (var proc = Process.Start(procInfo)) { - proc.OutputDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!string.IsNullOrEmpty(e.Data)) - Messages.Print(e.Data); - }; - proc.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!string.IsNullOrEmpty(e.Data)) - Messages.Print(e.Data); - }; - proc.BeginOutputReadLine(); - proc.BeginErrorReadLine(); - proc.WaitForExit(); - switch (proc.ExitCode) { - case 0: - Messages.Print("translation: ok"); - break; - default: - Messages.Print(string.Format("translation: ERROR {0}", proc.ExitCode)); - break; - } - } - } - - public static void CreateNewTranslationFile(EnvDTE.Project project) + public static bool ToolsAvailable(EnvDTE.Project project) { if (project == null) - return; + return false; + if (QtProject.GetPropertyValue(project, "ApplicationType") == "Linux") + return true; - using (var transDlg = new AddTranslationDialog(project)) { - if (transDlg.ShowDialog() == DialogResult.OK) { - try { - var qtPro = QtProject.Create(project); - var file = qtPro.AddFileInFilter(Filters.TranslationFiles(), - transDlg.TranslationFile, true); - RunlUpdate(file); - } catch (QtVSException e) { - Messages.DisplayErrorMessage(e.Message); - } catch (System.Exception ex) { - Messages.DisplayErrorMessage(ex.Message); - } - } + var qtToolsPath = QtProject.GetPropertyValue(project, "QtToolsPath"); + if (string.IsNullOrEmpty(qtToolsPath)) { + var qtVersion = QtVersionManager.The().GetProjectQtVersion(project); + var qtInstallPath = QtVersionManager.The().GetInstallPath(qtVersion); + if (string.IsNullOrEmpty(qtInstallPath)) + return false; + qtToolsPath = Path.Combine(qtInstallPath, "bin"); } + return File.Exists(Path.Combine(qtToolsPath, "lupdate.exe")) + && File.Exists(Path.Combine(qtToolsPath, "lrelease.exe")); } } } -- Gitblit v1.9.1