[NewPlus]Normalize settings infrastructure (#35145)

This commit is contained in:
Jaime Bernardo
2024-09-30 16:54:07 +01:00
committed by GitHub
parent 9b41786c57
commit 77de44fdb4
6 changed files with 94 additions and 81 deletions

View File

@@ -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)
{ {

View File

@@ -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);
} }

View 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);
}
}

View File

@@ -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;

View File

@@ -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);
} }
} }

View File

@@ -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);
}
} }
} }