mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-04 10:16:24 +02:00
[DSC] Implement Microsoft.PowerToys.Configure DSCResource & winget support (#30918)
* [DSC] Microsoft.PowerToys.Configure module + winget configuration file support
* f: fix for an incorrect directory id reference
* f: update comment
* f: address review comments
* f: file locksmith bug fix
* f: add explorer preview switches in samples
* f: remove debug
* Sign DSC files
* f: implement docs/samples generator
* [ci]Sign FancyZonesEditorCommon.dll
* Sign DSC files in the Generated folder
* f: address review comments
* f: update usable options
* f: add autogenerated sample
* [Installer] Don't use same GUID for different components
* [Installer]Don't remove folders shared by other modules
* Allow configuring PTRun MaximumNumberOfResults
* Remove all settings DSC sample. Just random data
* Allow configuring Hosts Run as Administrator
* Revert "[Installer]Don't remove folders shared by other modules"
This reverts commit 6da3d6cfd5.
* Add all PTRun plugins and Global and keyboard to DSC sample
* Fix issues with context menu modules not disabling
* Fix default enabled values when setting with DSC
* Fix tests regarding default modules in Settings
* Fix merge error
* Restart PowerToys process if we stopped it
---------
Co-authored-by: Andrey Nekrasov <1828123+yuyoyuppe@users.noreply.github.com>
Co-authored-by: Jaime Bernardo <jaime@janeasystems.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
// Copyright (c) Microsoft Corporation
|
||||
// The Microsoft Corporation licenses this file to you under the MIT license.
|
||||
// See the LICENSE file in the project root for more information.
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Text.Json;
|
||||
using System.Xml;
|
||||
using Microsoft.PowerToys.Settings.UI.Library.Interfaces;
|
||||
using Settings.UI.Library.Attributes;
|
||||
|
||||
namespace Microsoft.PowerToys.Settings.UI.Library;
|
||||
|
||||
/// <summary>
|
||||
/// This user flow allows DSC resources to use PowerToys.Settings executable to get settings values by querying them from command line using the following syntax:
|
||||
/// PowerToys.Settings.exe get <path to a json file containing a list of modules and their corresponding properties>
|
||||
///
|
||||
/// Example: PowerToys.Settings.exe get %TEMP%\properties.json
|
||||
/// `properties.json` file contents:
|
||||
/// {
|
||||
/// "AlwaysOnTop": ["FrameEnabled", "FrameAccentColor"],
|
||||
/// "FancyZones": ["FancyzonesShiftDrag", "FancyzonesShowOnAllMonitors"]
|
||||
/// }
|
||||
///
|
||||
/// Upon PowerToys.Settings.exe completion, it'll update `properties.json` file to contain something like this:
|
||||
/// {
|
||||
/// "AlwaysOnTop": {
|
||||
/// "FrameEnabled": true,
|
||||
/// "FrameAccentColor": "#0099cc"
|
||||
/// },
|
||||
/// "FancyZones": {
|
||||
/// "FancyzonesShiftDrag": true,
|
||||
/// "FancyzonesShowOnAllMonitors": false
|
||||
/// }
|
||||
/// }
|
||||
/// </summary>
|
||||
public sealed class GetSettingCommandLineCommand
|
||||
{
|
||||
private static JsonSerializerOptions _serializerOptions = new JsonSerializerOptions
|
||||
{
|
||||
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping,
|
||||
};
|
||||
|
||||
public static string Execute(Dictionary<string, List<string>> settingNamesForModules)
|
||||
{
|
||||
var modulesSettings = new Dictionary<string, Dictionary<string, object>>();
|
||||
|
||||
var settingsAssembly = CommandLineUtils.GetSettingsAssembly();
|
||||
var settingsUtils = new SettingsUtils();
|
||||
|
||||
var enabledModules = SettingsRepository<GeneralSettings>.GetInstance(settingsUtils).SettingsConfig.Enabled;
|
||||
|
||||
foreach (var (moduleName, settings) in settingNamesForModules)
|
||||
{
|
||||
var moduleSettings = new Dictionary<string, object>();
|
||||
if (moduleName != nameof(GeneralSettings))
|
||||
{
|
||||
moduleSettings.Add("Enabled", typeof(EnabledModules).GetProperty(moduleName).GetValue(enabledModules));
|
||||
}
|
||||
|
||||
var settingsConfig = CommandLineUtils.GetSettingsConfigFor(moduleName, settingsUtils, settingsAssembly);
|
||||
foreach (var settingName in settings)
|
||||
{
|
||||
var value = CommandLineUtils.GetPropertyValue(settingName, settingsConfig);
|
||||
if (value != null)
|
||||
{
|
||||
var cmdReprValue = ICmdLineRepresentable.ToCmdRepr(value.GetType(), value);
|
||||
moduleSettings.Add(settingName, cmdReprValue);
|
||||
}
|
||||
}
|
||||
|
||||
modulesSettings.Add(moduleName, moduleSettings);
|
||||
}
|
||||
|
||||
return JsonSerializer.Serialize(modulesSettings, _serializerOptions);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user