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/QtHelp.cs | 113 ++++++++++++++++++++++++++------------------------------ 1 files changed, 52 insertions(+), 61 deletions(-) diff --git a/QtVsTools.Package/Package/QtHelp.cs b/QtVsTools.Package/Package/QtHelp.cs index e36cb83..12e7b19 100644 --- a/QtVsTools.Package/Package/QtHelp.cs +++ b/QtVsTools.Package/Package/QtHelp.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,13 +26,6 @@ ** ****************************************************************************/ -using EnvDTE; -using Microsoft.VisualStudio.Settings; -using Microsoft.VisualStudio.Shell; -using Microsoft.VisualStudio.Shell.Interop; -using Microsoft.VisualStudio.Shell.Settings; -using QtVsTools.Core; -using QtVsTools.VisualStudio; using System; using System.Collections.Generic; using System.ComponentModel.Design; @@ -40,37 +33,36 @@ using System.Data.SQLite; using System.IO; using System.Linq; -using System.Threading.Tasks; -using Task = System.Threading.Tasks.Task; +using EnvDTE; +using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; namespace QtVsTools { + using Core; + using VisualStudio; + public class QtHelp { public enum SourcePreference { Online, Offline } - public static QtHelp Instance + private static QtHelp Instance { get; - private set; + set; } - public static void Initialize(Package package) + public static void Initialize() { - Instance = new QtHelp(package); + Instance = new QtHelp(); } const int F1QtHelpId = 0x0502; - readonly Package package; - public static readonly Guid MainMenuGuid = new Guid("58f83fff-d39d-4c66-810b-2702e1f04e73"); + private static readonly Guid MainMenuGuid = new Guid("58f83fff-d39d-4c66-810b-2702e1f04e73"); - QtHelp(Package pkg) + private QtHelp() { - if (pkg == null) - throw new ArgumentNullException("package"); - package = pkg; - var commandService = VsServiceProvider .GetService<IMenuCommandService, OleMenuCommandService>(); if (commandService == null) @@ -79,12 +71,6 @@ var menuCommandID = new CommandID(MainMenuGuid, F1QtHelpId); commandService.AddCommand(new MenuCommand(F1QtHelpEventHandler, menuCommandID)); } - - IServiceProvider ServiceProvider - { - get { return package; } - } - static bool IsSuperfluousCharacter(string text) { switch (text) { @@ -131,11 +117,17 @@ void F1QtHelpEventHandler(object sender, EventArgs args) { - QueryEditorContextHelp(true); + ThreadHelper.ThrowIfNotOnUIThread(); + if (!ShowEditorContextHelp()) { + Messages.Print("No help match was found. You can still try to search online at " + + "https://doc.qt.io" + ".", false, true); + } } - public static bool QueryEditorContextHelp(bool defaultTryOnline = false) + public static bool ShowEditorContextHelp() { + ThreadHelper.ThrowIfNotOnUIThread(); + try { var dte = VsServiceProvider.GetService<SDTE, DTE>(); var objTextDocument = dte?.ActiveDocument?.Object() as TextDocument; @@ -173,7 +165,7 @@ var project = HelperFunctions.GetSelectedQtProject(dte); if (project == null) { project = HelperFunctions.GetSelectedProject(dte); - if (project != null && HelperFunctions.IsQMakeProject(project)) { + if (project != null && HelperFunctions.IsQtProject(project)) { var qmakeQtDir = HelperFunctions.GetQtDirFromQMakeProject(project); qtVersion = QtVersionManager.The().GetQtVersionFromInstallDir(qmakeQtDir); } @@ -188,7 +180,7 @@ var qchFiles = Directory.GetFiles(docPath, "*?.qch"); if (qchFiles.Length == 0) - return false; + return TryShowGenericSearchResultsOnline(keyword, info.qtMajor); var offline = QtVsToolsPackage.Instance.Options.HelpPreference == SourcePreference.Offline; @@ -207,8 +199,9 @@ using (var connection = new SQLiteConnection(builder.ToString())) { connection.Open(); using (var command = new SQLiteCommand(linksForKeyword, connection)) { - using (var reader = - Task.Run(async () => await command.ExecuteReaderAsync()).Result) { + var reader = QtVsToolsPackage.Instance.JoinableTaskFactory + .Run(async () => await command.ExecuteReaderAsync()); + using (reader) { while (reader.Read()) { var title = GetString(reader, 0); if (string.IsNullOrWhiteSpace(title)) @@ -233,15 +226,7 @@ var uri = string.Empty; switch (links.Values.Count) { case 0: - if (!offline && defaultTryOnline) { - uri = new UriBuilder($"https://doc.qt.io/qt-{info.qtMajor}/search-results.html") - { - Query = "q=" + keyword - }.ToString(); - } else { - return false; - } - break; + return TryShowGenericSearchResultsOnline(keyword, info.qtMajor); case 1: uri = links.First().Value; break; @@ -254,34 +239,40 @@ }; if (!dialog.ShowModal().GetValueOrDefault()) return false; - uri = dialog.Link - .Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); + uri = dialog.Link; break; } - if (string.IsNullOrEmpty(uri)) { // offline mode without a single search hit - VsShellUtilities.ShowMessageBox(Instance.ServiceProvider, - "Your search - " + keyword + " - did not match any documents.", + uri = HelperFunctions.FromNativeSeparators(uri); + var helpUri = new Uri(uri); + if (helpUri.IsFile && !File.Exists(helpUri.LocalPath)) { + VsShellUtilities.ShowMessageBox(QtVsToolsPackage.Instance, + "Your search - " + keyword + " - did match a document, but it could " + + "not be found on disk. To use the online help, select: " + + "Tools | Options | Qt | Preferred source | Online", string.Empty, OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } else { - var helpUri = new Uri(uri.Replace('\\', '/')); - if (helpUri.IsFile && !File.Exists(helpUri.LocalPath)) { - VsShellUtilities.ShowMessageBox(Instance.ServiceProvider, - "Your search - " + keyword + " - did match a document, but it could " - + "not be found on disk. To use the online help, select: " - + "Help | Set Qt Help Preference | Use Online Documentation", - string.Empty, OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, - OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); - } else { - VsShellUtilities.OpenSystemBrowser(HelperFunctions.ChangePathFormat(uri)); - } + VsShellUtilities.OpenSystemBrowser(uri); } - } catch (Exception e) { - Messages.Print( - e.Message + "\r\n\r\nStacktrace:\r\n" + e.StackTrace); + } catch (Exception exception) { + exception.Log(); } return true; } + + private static bool TryShowGenericSearchResultsOnline(string keyword, uint version) + { + if (QtVsToolsPackage.Instance.Options.HelpPreference != SourcePreference.Online) + return false; + + VsShellUtilities.OpenSystemBrowser(HelperFunctions.FromNativeSeparators( + new UriBuilder($"https://doc.qt.io/qt-{version}/search-results.html") + { + Query = "q=" + keyword + }.ToString()) + ); + return true; + } } } -- Gitblit v1.9.1