mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 10:46:33 +02:00
[NewPlus]Normalize settings infrastructure (#35145)
This commit is contained in:
@@ -51,21 +51,30 @@ public:
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void set_config(PCWSTR config) override
|
virtual void set_config(const wchar_t* config) override
|
||||||
{
|
{
|
||||||
// The following just checks to see if the Template Location was changed for metrics purposes
|
// The following just checks to see if the Template Location was changed for metrics purposes
|
||||||
// Note: We are not saving the settings here and instead relying on read/write of json in Settings App .cs code paths
|
// Note: We are not saving the settings here and instead relying on read/write of json in Settings App .cs code paths
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
json::JsonObject config_as_json = json::JsonValue::Parse(winrt::to_hstring(config)).GetObjectW();
|
// Parse the input JSON string.
|
||||||
|
PowerToysSettings::PowerToyValues values =
|
||||||
|
PowerToysSettings::PowerToyValues::from_json_string(config, get_key());
|
||||||
|
|
||||||
const auto latest_location_value = config_as_json.GetNamedString(newplus::constants::non_localizable::settings_json_key_template_location).data();
|
values.save_to_settings_file();
|
||||||
const auto existing_location_value = NewSettingsInstance().GetTemplateLocation();
|
NewSettingsInstance().Load();
|
||||||
|
|
||||||
if (!newplus::utilities::wstring_same_when_comparing_ignore_case(latest_location_value, existing_location_value))
|
auto templateValue = values.get_string_value(newplus::constants::non_localizable::settings_json_key_template_location);
|
||||||
|
if (templateValue.has_value())
|
||||||
{
|
{
|
||||||
Trace::EventChangedTemplateLocation();
|
const auto latest_location_value = templateValue.value();
|
||||||
|
const auto existing_location_value = NewSettingsInstance().GetTemplateLocation();
|
||||||
|
if (!newplus::utilities::wstring_same_when_comparing_ignore_case(latest_location_value, existing_location_value))
|
||||||
|
{
|
||||||
|
Trace::EventChangedTemplateLocation();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (std::exception& e)
|
catch (std::exception& e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include <common/utils/gpo.h>
|
#include <common/utils/gpo.h>
|
||||||
#include <common/utils/json.h>
|
#include <common/utils/json.h>
|
||||||
#include <common/SettingsAPI/settings_helpers.h>
|
#include <common/SettingsAPI/settings_helpers.h>
|
||||||
|
#include <common/SettingsAPI/settings_objects.h>
|
||||||
|
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
@@ -38,18 +39,13 @@ NewSettings::NewSettings()
|
|||||||
|
|
||||||
void NewSettings::Save()
|
void NewSettings::Save()
|
||||||
{
|
{
|
||||||
json::JsonObject new_settings_json_data;
|
PowerToysSettings::PowerToyValues values(newplus::constants::non_localizable::powertoy_key, newplus::constants::non_localizable::powertoy_key);
|
||||||
|
|
||||||
new_settings_json_data.SetNamedValue(newplus::constants::non_localizable::settings_json_key_hide_file_extension,
|
values.add_property(newplus::constants::non_localizable::settings_json_key_hide_file_extension, new_settings.hide_file_extension);
|
||||||
json::value(new_settings.hide_file_extension));
|
values.add_property(newplus::constants::non_localizable::settings_json_key_hide_starting_digits, new_settings.hide_starting_digits);
|
||||||
|
values.add_property(newplus::constants::non_localizable::settings_json_key_template_location, new_settings.template_location);
|
||||||
|
|
||||||
new_settings_json_data.SetNamedValue(newplus::constants::non_localizable::settings_json_key_hide_starting_digits,
|
values.save_to_settings_file();
|
||||||
json::value(new_settings.hide_starting_digits));
|
|
||||||
|
|
||||||
new_settings_json_data.SetNamedValue(newplus::constants::non_localizable::settings_json_key_template_location,
|
|
||||||
json::value(new_settings.template_location));
|
|
||||||
|
|
||||||
json::to_file(new_settings_json_file_path, new_settings_json_data);
|
|
||||||
|
|
||||||
GetSystemTimeAsFileTime(&new_settings_last_loaded_timestamp);
|
GetSystemTimeAsFileTime(&new_settings_last_loaded_timestamp);
|
||||||
}
|
}
|
||||||
@@ -122,35 +118,27 @@ void NewSettings::Reload()
|
|||||||
|
|
||||||
void NewSettings::ParseJson()
|
void NewSettings::ParseJson()
|
||||||
{
|
{
|
||||||
auto json = json::from_file(new_settings_json_file_path);
|
PowerToysSettings::PowerToyValues settings =
|
||||||
if (json)
|
PowerToysSettings::PowerToyValues::load_from_settings_file(newplus::constants::non_localizable::powertoy_key);
|
||||||
|
|
||||||
|
auto templateValue = settings.get_string_value(newplus::constants::non_localizable::settings_json_key_template_location);
|
||||||
|
if (templateValue.has_value())
|
||||||
{
|
{
|
||||||
try
|
new_settings.template_location = templateValue.value();
|
||||||
{
|
|
||||||
const json::JsonObject& new_settings_json = json.value();
|
|
||||||
|
|
||||||
if (json::has(new_settings_json, newplus::constants::non_localizable::settings_json_key_hide_file_extension, json::JsonValueType::Boolean))
|
|
||||||
{
|
|
||||||
new_settings.hide_file_extension = new_settings_json.GetNamedBoolean(
|
|
||||||
newplus::constants::non_localizable::settings_json_key_hide_file_extension);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (json::has(new_settings_json, newplus::constants::non_localizable::settings_json_key_hide_starting_digits, json::JsonValueType::Boolean))
|
|
||||||
{
|
|
||||||
new_settings.hide_starting_digits = new_settings_json.GetNamedBoolean(
|
|
||||||
newplus::constants::non_localizable::settings_json_key_hide_starting_digits);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (json::has(new_settings_json, newplus::constants::non_localizable::settings_json_key_template_location, json::JsonValueType::String))
|
|
||||||
{
|
|
||||||
new_settings.template_location = new_settings_json.GetNamedString(
|
|
||||||
newplus::constants::non_localizable::settings_json_key_template_location);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (const winrt::hresult_error&)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto hideFileExtensionValue = settings.get_bool_value(newplus::constants::non_localizable::settings_json_key_hide_file_extension);
|
||||||
|
if (hideFileExtensionValue.has_value())
|
||||||
|
{
|
||||||
|
new_settings.hide_file_extension = hideFileExtensionValue.value();
|
||||||
|
}
|
||||||
|
|
||||||
|
auto hideStartingDigitsValue = settings.get_bool_value(newplus::constants::non_localizable::settings_json_key_hide_starting_digits);
|
||||||
|
if (hideStartingDigitsValue.has_value())
|
||||||
|
{
|
||||||
|
new_settings.hide_starting_digits = hideStartingDigitsValue.value();
|
||||||
|
}
|
||||||
|
|
||||||
GetSystemTimeAsFileTime(&new_settings_last_loaded_timestamp);
|
GetSystemTimeAsFileTime(&new_settings_last_loaded_timestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
34
src/settings-ui/Settings.UI.Library/NewPlusProperties.cs
Normal file
34
src/settings-ui/Settings.UI.Library/NewPlusProperties.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// 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.IO;
|
||||||
|
using System.Text.Json;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace Microsoft.PowerToys.Settings.UI.Library
|
||||||
|
{
|
||||||
|
public class NewPlusProperties
|
||||||
|
{
|
||||||
|
public const string ModuleName = "NewPlus";
|
||||||
|
|
||||||
|
public NewPlusProperties()
|
||||||
|
{
|
||||||
|
HideFileExtension = new BoolProperty(true);
|
||||||
|
HideStartingDigits = new BoolProperty(true);
|
||||||
|
TemplateLocation = new StringProperty(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "PowerToys", "NewPlus", "Templates"));
|
||||||
|
}
|
||||||
|
|
||||||
|
[JsonPropertyName("HideFileExtension")]
|
||||||
|
public BoolProperty HideFileExtension { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("HideStartingDigits")]
|
||||||
|
public BoolProperty HideStartingDigits { get; set; }
|
||||||
|
|
||||||
|
[JsonPropertyName("TemplateLocation")]
|
||||||
|
public StringProperty TemplateLocation { get; set; }
|
||||||
|
|
||||||
|
public override string ToString() => JsonSerializer.Serialize(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,34 +12,27 @@ using Settings.UI.Library.Resources;
|
|||||||
|
|
||||||
namespace Microsoft.PowerToys.Settings.UI.Library
|
namespace Microsoft.PowerToys.Settings.UI.Library
|
||||||
{
|
{
|
||||||
public class NewPlusSettings : ISettingsConfig
|
public class NewPlusSettings : BasePTModuleSettings, ISettingsConfig
|
||||||
{
|
{
|
||||||
public const string ModuleName = "NewPlus";
|
public const string ModuleName = "NewPlus";
|
||||||
|
public const string ModuleVersion = "1.0";
|
||||||
|
|
||||||
public void InitializeWithDefaultSettings()
|
[JsonPropertyName("properties")]
|
||||||
|
public NewPlusProperties Properties { get; set; }
|
||||||
|
|
||||||
|
public NewPlusSettings()
|
||||||
{
|
{
|
||||||
// This code path should never happen
|
Name = ModuleName;
|
||||||
|
Version = ModuleVersion;
|
||||||
|
Properties = new NewPlusProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string ToJsonString()
|
|
||||||
{
|
|
||||||
return JsonSerializer.Serialize(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
[JsonPropertyName("HideFileExtension")]
|
|
||||||
public bool HideFileExtension { get; set; }
|
|
||||||
|
|
||||||
[JsonPropertyName("HideStartingDigits")]
|
|
||||||
public bool HideStartingDigits { get; set; }
|
|
||||||
|
|
||||||
[JsonPropertyName("TemplateLocation")]
|
|
||||||
public string TemplateLocation { get; set; }
|
|
||||||
|
|
||||||
public string GetModuleName()
|
public string GetModuleName()
|
||||||
{
|
{
|
||||||
return ModuleName;
|
return Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This can be utilized in the future if the settings.json file is to be modified/deleted.
|
||||||
public bool UpgradeSettingsConfiguration()
|
public bool UpgradeSettingsConfiguration()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
{
|
{
|
||||||
var settingsUtils = new SettingsUtils();
|
var settingsUtils = new SettingsUtils();
|
||||||
var settings = NewPlusViewModel.LoadSettings(settingsUtils);
|
var settings = NewPlusViewModel.LoadSettings(settingsUtils);
|
||||||
NewPlusViewModel.CopyTemplateExamples(settings.TemplateLocation);
|
NewPlusViewModel.CopyTemplateExamples(settings.Properties.TemplateLocation.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -47,9 +47,9 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
Settings = LoadSettings(settingsUtils);
|
Settings = LoadSettings(settingsUtils);
|
||||||
|
|
||||||
// Initialize properties
|
// Initialize properties
|
||||||
_hideFileExtension = Settings.HideFileExtension;
|
_hideFileExtension = Settings.Properties.HideFileExtension.Value;
|
||||||
_hideStartingDigits = Settings.HideStartingDigits;
|
_hideStartingDigits = Settings.Properties.HideStartingDigits.Value;
|
||||||
_templateLocation = Settings.TemplateLocation;
|
_templateLocation = Settings.Properties.TemplateLocation.Value;
|
||||||
InitializeEnabledValue();
|
InitializeEnabledValue();
|
||||||
InitializeGpoValues();
|
InitializeGpoValues();
|
||||||
|
|
||||||
@@ -119,12 +119,10 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
if (_templateLocation != value)
|
if (_templateLocation != value)
|
||||||
{
|
{
|
||||||
_templateLocation = value;
|
_templateLocation = value;
|
||||||
Settings.TemplateLocation = value;
|
Settings.Properties.TemplateLocation.Value = value;
|
||||||
OnPropertyChanged(nameof(TemplateLocation));
|
OnPropertyChanged(nameof(TemplateLocation));
|
||||||
|
|
||||||
NotifySettingsChanged();
|
NotifySettingsChanged();
|
||||||
|
|
||||||
SaveSettingsToJson();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -146,12 +144,10 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
if (_hideFileExtension != value && !_hideFileExtensionIsGPOConfigured)
|
if (_hideFileExtension != value && !_hideFileExtensionIsGPOConfigured)
|
||||||
{
|
{
|
||||||
_hideFileExtension = value;
|
_hideFileExtension = value;
|
||||||
Settings.HideFileExtension = value;
|
Settings.Properties.HideFileExtension.Value = value;
|
||||||
OnPropertyChanged(nameof(HideFileExtension));
|
OnPropertyChanged(nameof(HideFileExtension));
|
||||||
|
|
||||||
NotifySettingsChanged();
|
NotifySettingsChanged();
|
||||||
|
|
||||||
SaveSettingsToJson();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -168,12 +164,10 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
if (_hideStartingDigits != value)
|
if (_hideStartingDigits != value)
|
||||||
{
|
{
|
||||||
_hideStartingDigits = value;
|
_hideStartingDigits = value;
|
||||||
Settings.HideStartingDigits = value;
|
Settings.Properties.HideStartingDigits.Value = value;
|
||||||
OnPropertyChanged(nameof(HideStartingDigits));
|
OnPropertyChanged(nameof(HideStartingDigits));
|
||||||
|
|
||||||
NotifySettingsChanged();
|
NotifySettingsChanged();
|
||||||
|
|
||||||
SaveSettingsToJson();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -208,10 +202,10 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
{
|
{
|
||||||
settings = settingsUtils.GetSettingsOrDefault<NewPlusSettings>(NewPlusSettings.ModuleName);
|
settings = settingsUtils.GetSettingsOrDefault<NewPlusSettings>(NewPlusSettings.ModuleName);
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(settings.TemplateLocation))
|
if (string.IsNullOrEmpty(settings.Properties.TemplateLocation.Value))
|
||||||
{
|
{
|
||||||
// This can happen when running the DEBUG Settings application without first letting the runner create the default settings file.
|
// This can happen when running the DEBUG Settings application without first letting the runner create the default settings file.
|
||||||
settings.TemplateLocation = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "PowerToys", "NewPlus", "Templates");
|
settings.Properties.TemplateLocation.Value = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Microsoft", "PowerToys", "NewPlus", "Templates");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
@@ -278,10 +272,5 @@ namespace Microsoft.PowerToys.Settings.UI.ViewModels
|
|||||||
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.GetSettingsWindow());
|
var hwnd = WinRT.Interop.WindowNative.GetWindowHandle(App.GetSettingsWindow());
|
||||||
return await Task.FromResult(GetFolderDialogWithFlags(hwnd, FolderDialogFlags._BIF_NEWDIALOGSTYLE));
|
return await Task.FromResult(GetFolderDialogWithFlags(hwnd, FolderDialogFlags._BIF_NEWDIALOGSTYLE));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveSettingsToJson()
|
|
||||||
{
|
|
||||||
_settingsUtils.SaveSettings(Settings.ToJsonString(), ModuleName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user