Наша сборка Qt VS Tools
giy
2022-06-13 175679ae608f0b295d761588d332f635b21bdf30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt VS Tools.
**
** $QT_BEGIN_LICENSE:GPL-EXCEPT$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 as published by the Free Software
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
 
using System;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.VisualStudio.Shell;
using Microsoft.VisualStudio.Shell.Interop;
using Microsoft.VisualStudio.Threading;
 
using Task = System.Threading.Tasks.Task;
 
namespace QtVsTest
{
    using Macros;
    using System.IO;
 
    [Guid(PackageGuidString)]
    [InstalledProductRegistration(
        productName: "Qt Visual Studio Test",
        productDetails: "Auto-test framework for Qt Visual Studio Tools.",
        productId: "1.0",
        IconResourceID = 400)]
    [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
    [ProvideAutoLoad(UIContextGuids.SolutionExists, PackageAutoLoadFlags.BackgroundLoad)]
    [ProvideAutoLoad(UIContextGuids.NoSolution, PackageAutoLoadFlags.BackgroundLoad)]
 
    public sealed class QtVsTest : AsyncPackage
    {
        public const string PackageGuidString = "0e258dce-fc8a-49a2-81c5-c9e138bfe500";
        MacroServer MacroServer { get; set; }
 
        public QtVsTest()
        {
            MacroServer = new MacroServer(this, JoinableTaskFactory);
        }
 
        protected override async Task InitializeAsync(
            CancellationToken cancellationToken,
            IProgress<ServiceProgressData> progress)
        {
            // Get package install path
            var uri = new Uri(System.Reflection.Assembly
                .GetExecutingAssembly().EscapedCodeBase);
            var pkgInstallPath = Path.GetDirectoryName(
                Uri.UnescapeDataString(uri.AbsolutePath)) + @"\";
 
            // Install client interface
            var qtVsTestFiles = Environment.
                ExpandEnvironmentVariables(@"%LOCALAPPDATA%\qtvstest");
            Directory.CreateDirectory(qtVsTestFiles);
            File.Copy(
                Path.Combine(pkgInstallPath, "MacroClient.h"),
                Path.Combine(qtVsTestFiles, "MacroClient.h"),
                overwrite: true);
 
            // Install .csmacro syntax highlighting
            var grammarFilesPath = Environment.
                ExpandEnvironmentVariables(@"%USERPROFILE%\.vs\Extensions\qtcsmacro");
            Directory.CreateDirectory(grammarFilesPath);
            File.Copy(
                Path.Combine(pkgInstallPath, "csmacro.tmLanguage"),
                Path.Combine(grammarFilesPath, "csmacro.tmLanguage"),
                overwrite: true);
            File.Copy(
                Path.Combine(pkgInstallPath, "csmacro.tmTheme"),
                Path.Combine(grammarFilesPath, "csmacro.tmTheme"),
                overwrite: true);
 
            // Start macro server loop as background task
            await Task.Run(() => MacroServer.LoopAsync().Forget());
        }
 
        protected override int QueryClose(out bool canClose)
        {
            // Shutdown macro server when closing Visual Studio
            MacroServer.Loop.Cancel();
 
            return base.QueryClose(out canClose);
        }
    }
}