Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Dynamic Profile Generators #2603

Merged
merged 89 commits into from
Sep 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
858341f
Create profiles by layering them
zadjii-msft Aug 20, 2019
2074ac2
Update test to layer multiple times on the same profile
zadjii-msft Aug 20, 2019
deb135f
Add support for layering an array of profiles, but break a couple tests
zadjii-msft Aug 20, 2019
e524ea7
Add a defaults.json to the package
zadjii-msft Aug 20, 2019
8157fd6
Layer colorschemes
zadjii-msft Aug 20, 2019
16336bb
Layer an array of color schemes
zadjii-msft Aug 20, 2019
870fed3
Merge remote-tracking branch 'origin/master' into dev/migrie/f/754-la…
zadjii-msft Aug 21, 2019
22e375d
oh no, this was missed with #2481
zadjii-msft Aug 21, 2019
4e3c3c3
Layer keybindings
zadjii-msft Aug 21, 2019
2c2fa14
Read settings from defaults.json + profiles.json, layer appropriately
zadjii-msft Aug 21, 2019
9bcf0c5
Add tests for keybindings
zadjii-msft Aug 21, 2019
c6b80b9
Layer or clear optional properties
zadjii-msft Aug 21, 2019
c040356
Add a helper to get an optional variable for a bunch of different types
zadjii-msft Aug 21, 2019
51bcf11
Do this with the stretch mode too
zadjii-msft Aug 21, 2019
8b938ff
Add back in the GUID check for profiles
zadjii-msft Aug 22, 2019
aec4c51
Add some tests for global settings layering
zadjii-msft Aug 22, 2019
1d662ca
M A D W I T H P O W E R
zadjii-msft Aug 22, 2019
9a14dab
When the user's profile.json doesn't exist, create it from a template
zadjii-msft Aug 22, 2019
82b57f8
Re-order profiles to match the order set in the user's profiles.json
zadjii-msft Aug 22, 2019
2084f89
Add tests for re-ordering profiles to match user ordering
zadjii-msft Aug 22, 2019
e07c1ba
Add support for hiding profiles using `"hidden": true`
zadjii-msft Aug 22, 2019
3ab0f25
Use the hardcoded defaults.json for the exception->"use defaults" case
zadjii-msft Aug 22, 2019
39b7fe1
Merge remote-tracking branch 'origin/master' into dev/migrie/f/754-la…
zadjii-msft Aug 22, 2019
9b6a2ee
Somehow I messed up the git submodules?
zadjii-msft Aug 22, 2019
be8e858
woo documentation
zadjii-msft Aug 22, 2019
7dcb179
Fix a Terminal.App.Unit.Tests failure
zadjii-msft Aug 23, 2019
7953e8c
signed/unsigned is hard
zadjii-msft Aug 23, 2019
2032b96
Use Alt+Settings button to open the default settings
zadjii-msft Aug 23, 2019
bf792e8
Missed a signed/unsigned
zadjii-msft Aug 23, 2019
caeaa34
Start dynamically creating profiles
zadjii-msft Aug 23, 2019
da6d49a
Give the inbox generators a namespace
zadjii-msft Aug 26, 2019
215af70
Merge branch 'master' into dev/migrie/f/754-layer-settings
zadjii-msft Aug 26, 2019
48d3e76
Some very preliminary PR feedback
zadjii-msft Aug 26, 2019
679bf2e
More PR feedback
zadjii-msft Aug 26, 2019
2c978f7
Add templates to these bois
zadjii-msft Aug 26, 2019
9320304
remove some code for generating defaults, reorder defaults.json a tad
zadjii-msft Aug 26, 2019
083ac42
Merge branch 'master' into dev/migrie/f/754-layer-settings
zadjii-msft Aug 26, 2019
2278f22
Make guid a std::optional
zadjii-msft Aug 26, 2019
0873210
Large block of PR feedback
zadjii-msft Aug 27, 2019
e3171ea
stl is love, stl is life
zadjii-msft Aug 27, 2019
86f9df0
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Aug 27, 2019
64f3d63
Serialize the source key
zadjii-msft Aug 27, 2019
3d36bf0
Make the Azure cloud shell a dynamic profile
zadjii-msft Aug 27, 2019
fa7f862
Make the built-in namespaces public
zadjii-msft Aug 27, 2019
16053cd
Add a mechanism for quick-diffing a profile
zadjii-msft Aug 27, 2019
d877794
Generate partial serializations of dynamic profiles _not_ in the user…
zadjii-msft Aug 27, 2019
4bd28aa
Start writing tests for generating dyn profiles
zadjii-msft Aug 28, 2019
6481fa1
Add more DPG tests - TestDontRunDisabledGenerators
zadjii-msft Aug 28, 2019
20ffea8
Don't layer profiles with a source that's also different
zadjii-msft Aug 28, 2019
7e81a9e
Add another test, DoLayerUserProfilesOnDynamicsWhenSourceMatches
zadjii-msft Aug 28, 2019
825226a
Actually insert new dynamic profiles into the file
zadjii-msft Aug 28, 2019
c5fe063
Minor cleanup of `Profile::ShouldBeLayered`
zadjii-msft Aug 28, 2019
4aea2c8
Migrate legacy profiles gracefully
zadjii-msft Aug 28, 2019
90d1665
using namespace winrt::Windows::UI::Xaml;
zadjii-msft Aug 29, 2019
f9eb563
_Only_ layer dynamic profiles from user settings, never create
zadjii-msft Aug 29, 2019
89dc658
Write a test for migrating dynamic profiles
zadjii-msft Aug 29, 2019
31bc741
Comments for dayssssss
zadjii-msft Aug 29, 2019
966ddeb
add `-noprofile`
zadjii-msft Aug 29, 2019
db6a734
Fix the crash that dustin found
zadjii-msft Aug 29, 2019
eea22cc
-Encoding ASCII
zadjii-msft Aug 29, 2019
a685bd8
Set a profile's default scheme to Campbell
zadjii-msft Aug 29, 2019
5e98b81
Fix the tests I regressed
zadjii-msft Aug 29, 2019
4eec81b
Update UsingJsonSetting.md to reflect that changes from these PRs
zadjii-msft Aug 29, 2019
7380015
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Aug 29, 2019
ff1ad96
Change how GenerateGuidForProfile works
zadjii-msft Sep 3, 2019
54eb9c7
Merge branch 'master' into dev/migrie/f/754-layer-settings
zadjii-msft Sep 5, 2019
a659db1
Make AppKeyBindings do its own serialization
zadjii-msft Sep 5, 2019
a757b07
Remove leftover dead code from the previous commit
zadjii-msft Sep 5, 2019
46adadf
Fix up an enormous number of PR nits
zadjii-msft Sep 6, 2019
190ec77
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Sep 6, 2019
209be6d
Don't layer a profile if the json doesn't have a GUID
zadjii-msft Sep 6, 2019
3081b90
Fix a test I unfixed
zadjii-msft Sep 6, 2019
a1bbf9a
get rid of extraneous bois{};
zadjii-msft Sep 6, 2019
8768f91
Piles of PR feedback
zadjii-msft Sep 6, 2019
e716c9b
Collection of PR nits
zadjii-msft Sep 9, 2019
ebd61c5
PR nits
zadjii-msft Sep 11, 2019
86aabba
Merge remote-tracking branch 'origin/master' into dev/migrie/f/754-la…
zadjii-msft Sep 11, 2019
edb1ead
Fix a typo; Update the defaults to match #2378
zadjii-msft Sep 11, 2019
fed6492
Tiny nits
zadjii-msft Sep 11, 2019
4ce2733
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Sep 11, 2019
ad335ef
In-den-taition!
zadjii-msft Sep 12, 2019
d1e98b6
Some typos, PR nits
zadjii-msft Sep 13, 2019
220ed31
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Sep 13, 2019
e454753
Fix this broken defaults case
zadjii-msft Sep 16, 2019
8bdf405
Apply suggestions from code review
zadjii-msft Sep 16, 2019
11051fd
Merge branch 'dev/migrie/f/dynamic-profiles' of https://github.com/Mi…
zadjii-msft Sep 16, 2019
12ad666
Merge branch 'dev/migrie/f/754-layer-settings' into dev/migrie/f/dyna…
zadjii-msft Sep 16, 2019
00efd9f
PR nits
zadjii-msft Sep 16, 2019
7f28047
Merge remote-tracking branch 'origin/master' into dev/migrie/f/dynami…
zadjii-msft Sep 16, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 26 additions & 13 deletions src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -491,12 +491,14 @@ namespace TerminalAppLocalTests
L"default profiles in the opposite order of the default ordering."));

CascadiaSettings settings;
settings._LayerJsonString(defaultProfilesString, true);
settings._ParseJsonString(defaultProfilesString, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile3", settings._profiles.at(1)._name);

settings._LayerJsonString(userProfiles0String, false);
settings._ParseJsonString(userProfiles0String, false);
settings.LayerJson(settings._userSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile1", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile0", settings._profiles.at(1)._name);
Expand All @@ -512,12 +514,14 @@ namespace TerminalAppLocalTests
L"Case 2: Make sure all the user's profiles appear before the defaults."));

CascadiaSettings settings;
settings._LayerJsonString(defaultProfilesString, true);
settings._ParseJsonString(defaultProfilesString, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile3", settings._profiles.at(1)._name);

settings._LayerJsonString(userProfiles1String, false);
settings._ParseJsonString(userProfiles1String, false);
settings.LayerJson(settings._userSettings);
VERIFY_ARE_EQUAL(3u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile4", settings._profiles.at(1)._name);
Expand Down Expand Up @@ -588,14 +592,16 @@ namespace TerminalAppLocalTests

{
CascadiaSettings settings;
settings._LayerJsonString(defaultProfilesString, true);
settings._ParseJsonString(defaultProfilesString, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile3", settings._profiles.at(1)._name);
VERIFY_ARE_EQUAL(false, settings._profiles.at(0)._hidden);
VERIFY_ARE_EQUAL(false, settings._profiles.at(1)._hidden);

settings._LayerJsonString(userProfiles0String, false);
settings._ParseJsonString(userProfiles0String, false);
settings.LayerJson(settings._userSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile1", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile0", settings._profiles.at(1)._name);
Expand All @@ -611,14 +617,16 @@ namespace TerminalAppLocalTests

{
CascadiaSettings settings;
settings._LayerJsonString(defaultProfilesString, true);
settings._ParseJsonString(defaultProfilesString, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile3", settings._profiles.at(1)._name);
VERIFY_ARE_EQUAL(false, settings._profiles.at(0)._hidden);
VERIFY_ARE_EQUAL(false, settings._profiles.at(1)._hidden);

settings._LayerJsonString(userProfiles1String, false);
settings._ParseJsonString(userProfiles1String, false);
settings.LayerJson(settings._userSettings);
VERIFY_ARE_EQUAL(4u, settings._profiles.size());
VERIFY_ARE_EQUAL(L"profile2", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"profile4", settings._profiles.at(1)._name);
Expand Down Expand Up @@ -788,7 +796,8 @@ namespace TerminalAppLocalTests
const auto settings0Json = VerifyParseSucceeded(settings0String);

CascadiaSettings settings;
settings._LayerJsonString(settings0String, false);
settings._ParseJsonString(settings0String, false);
settings.LayerJson(settings._userSettings);

VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_IS_TRUE(settings._profiles.at(0)._guid.has_value());
Expand Down Expand Up @@ -824,14 +833,16 @@ namespace TerminalAppLocalTests
const auto settings0Json = VerifyParseSucceeded(settings0String);

CascadiaSettings settings;
settings._LayerJsonString(DefaultJson, true);
settings._ParseJsonString(DefaultJson, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_IS_TRUE(settings._profiles.at(0)._guid.has_value());
VERIFY_IS_TRUE(settings._profiles.at(1)._guid.has_value());
VERIFY_ARE_EQUAL(L"Windows PowerShell", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"cmd", settings._profiles.at(1)._name);

settings._LayerJsonString(settings0String, false);
settings._ParseJsonString(settings0String, false);
settings.LayerJson(settings._userSettings);

VERIFY_ARE_EQUAL(4u, settings._profiles.size());
VERIFY_IS_TRUE(settings._profiles.at(0)._guid.has_value());
Expand Down Expand Up @@ -923,14 +934,16 @@ namespace TerminalAppLocalTests
const auto settings0Json = VerifyParseSucceeded(settings0String);

CascadiaSettings settings;
settings._LayerJsonString(DefaultJson, true);
settings._ParseJsonString(DefaultJson, true);
settings.LayerJson(settings._defaultSettings);
VERIFY_ARE_EQUAL(2u, settings._profiles.size());
VERIFY_IS_TRUE(settings._profiles.at(0)._guid.has_value());
VERIFY_IS_TRUE(settings._profiles.at(1)._guid.has_value());
VERIFY_ARE_EQUAL(L"Windows PowerShell", settings._profiles.at(0)._name);
VERIFY_ARE_EQUAL(L"cmd", settings._profiles.at(1)._name);

settings._LayerJsonString(settings0String, false);
settings._ParseJsonString(settings0String, false);
settings.LayerJson(settings._userSettings);

VERIFY_ARE_EQUAL(4u, settings._profiles.size());
VERIFY_IS_TRUE(settings._profiles.at(0)._guid.has_value());
Expand Down
48 changes: 48 additions & 0 deletions src/cascadia/TerminalApp/AzureCloudShellGenerator.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.

#include "pch.h"

#include <winrt/Microsoft.Terminal.TerminalConnection.h>

#include "AzureCloudShellGenerator.h"
#include "LegacyProfileGeneratorNamespaces.h"

#include "../../types/inc/utils.hpp"
#include "../../inc/DefaultSettings.h"
#include "Utils.h"
#include "DefaultProfileUtils.h"

using namespace ::TerminalApp;

std::wstring_view AzureCloudShellGenerator::GetNamespace()
{
return AzureGeneratorNamespace;
}

// Method Description:
// - Checks if the Azure Cloud shell is available on this platform, and if it
// is, creates a profile to be able to launch it.
// Arguments:
// - <none>
// Return Value:
// - a vector with the Azure Cloud Shell connection profile, if available.
std::vector<TerminalApp::Profile> AzureCloudShellGenerator::GenerateProfiles()
{
std::vector<TerminalApp::Profile> profiles;

if (winrt::Microsoft::Terminal::TerminalConnection::AzureConnection::IsAzureConnectionAvailable())
{
auto azureCloudShellProfile{ CreateDefaultProfile(L"Azure Cloud Shell") };
azureCloudShellProfile.SetCommandline(L"Azure");
azureCloudShellProfile.SetStartingDirectory(DEFAULT_STARTING_DIRECTORY);
azureCloudShellProfile.SetColorScheme({ L"Vintage" });
azureCloudShellProfile.SetAcrylicOpacity(0.6);
azureCloudShellProfile.SetUseAcrylic(true);
azureCloudShellProfile.SetCloseOnExit(false);
azureCloudShellProfile.SetConnectionType(AzureConnectionType);
profiles.emplace_back(azureCloudShellProfile);
}

return profiles;
}
34 changes: 34 additions & 0 deletions src/cascadia/TerminalApp/AzureCloudShellGenerator.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*++
Copyright (c) Microsoft Corporation
Licensed under the MIT license.

Module Name:
- AzureCloudShellGenerator

Abstract:
- This is the dynamic profile generator for the azure cloud shell connector.
Checks if the Azure Cloud shell is available on this platform, and if it is,
creates a profile to be able to launch it.

Author(s):
- Mike Griese - August 2019

--*/

#pragma once
#include "IDynamicProfileGenerator.h"

static constexpr GUID AzureConnectionType = { 0xd9fcfdfa, 0xa479, 0x412c, { 0x83, 0xb7, 0xc5, 0x64, 0xe, 0x61, 0xcd, 0x62 } };

namespace TerminalApp
{
class AzureCloudShellGenerator : public TerminalApp::IDynamicProfileGenerator
{
public:
AzureCloudShellGenerator() = default;
~AzureCloudShellGenerator() = default;
std::wstring_view GetNamespace() override;

std::vector<TerminalApp::Profile> GenerateProfiles() override;
};
};
Loading