2020-04-08 01:19:14 +08:00
// 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.
2020-09-24 04:20:32 +08:00
using System ;
2020-10-22 03:32:53 +08:00
using System.Diagnostics.CodeAnalysis ;
2020-03-25 10:55:02 +08:00
using System.Text.Json ;
2020-04-17 02:45:27 +08:00
using System.Text.Json.Serialization ;
2020-09-24 04:20:32 +08:00
using Microsoft.PowerToys.Settings.UI.Lib.Interface ;
using Microsoft.PowerToys.Settings.UI.Lib.Utilities ;
2020-03-25 10:55:02 +08:00
2020-04-02 21:08:56 +08:00
namespace Microsoft.PowerToys.Settings.UI.Lib
2020-03-25 10:55:02 +08:00
{
2020-09-24 04:20:32 +08:00
public class GeneralSettings : ISettingsConfig
2020-03-25 10:55:02 +08:00
{
2020-04-08 01:19:14 +08:00
// Gets or sets a value indicating whether packaged.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("packaged")]
2020-04-08 01:19:14 +08:00
public bool Packaged { get ; set ; }
// Gets or sets a value indicating whether run powertoys on start-up.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("startup")]
public bool Startup { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets a value indicating whether the powertoy elevated.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("is_elevated")]
public bool IsElevated { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets a value indicating whether powertoys should run elevated.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("run_elevated")]
public bool RunElevated { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets a value indicating whether is admin.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("is_admin")]
public bool IsAdmin { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets theme Name.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("theme")]
public string Theme { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets system theme name.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("system_theme")]
public string SystemTheme { get ; set ; }
2020-04-08 01:19:14 +08:00
// Gets or sets powertoys version number.
2020-04-17 02:45:27 +08:00
[JsonPropertyName("powertoys_version")]
public string PowertoysVersion { get ; set ; }
2020-05-03 18:17:06 +08:00
[JsonPropertyName("action_name")]
public string CustomActionName { get ; set ; }
2020-04-17 02:45:27 +08:00
[JsonPropertyName("enabled")]
public EnabledModules Enabled { get ; set ; }
2020-03-25 10:55:02 +08:00
2020-05-03 18:17:06 +08:00
[JsonPropertyName("download_updates_automatically")]
public bool AutoDownloadUpdates { get ; set ; }
2020-10-22 03:32:53 +08:00
[SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "Any error from calling interop code should not prevent the program from loading.")]
2020-03-30 20:38:03 +08:00
public GeneralSettings ( )
{
2020-08-20 06:59:10 +08:00
Packaged = false ;
Startup = false ;
IsAdmin = false ;
IsElevated = false ;
AutoDownloadUpdates = false ;
Theme = "system" ;
SystemTheme = "light" ;
2020-05-06 07:01:55 +08:00
try
{
2020-08-20 06:59:10 +08:00
PowertoysVersion = DefaultPowertoysVersion ( ) ;
2020-05-06 07:01:55 +08:00
}
2020-10-22 03:32:53 +08:00
catch ( Exception e )
2020-05-06 07:01:55 +08:00
{
2020-10-22 03:32:53 +08:00
Logger . LogError ( "Exception encountered when getting PowerToys version" , e ) ;
2020-08-20 06:59:10 +08:00
PowertoysVersion = "v0.0.0" ;
2020-05-06 07:01:55 +08:00
}
2020-08-20 06:59:10 +08:00
Enabled = new EnabledModules ( ) ;
CustomActionName = string . Empty ;
2020-03-30 20:38:03 +08:00
}
2020-04-08 01:19:14 +08:00
// converts the current to a json string.
2020-04-02 21:08:56 +08:00
public string ToJsonString ( )
2020-03-25 10:55:02 +08:00
{
return JsonSerializer . Serialize ( this ) ;
}
2020-05-06 07:01:55 +08:00
2020-10-10 08:58:52 +08:00
private static string DefaultPowertoysVersion ( )
2020-05-06 07:01:55 +08:00
{
return interop . CommonManaged . GetProductVersion ( ) ;
}
2020-09-24 04:20:32 +08:00
// This function is to implement the ISettingsConfig interface.
// This interface helps in getting the settings configurations.
public string GetModuleName ( )
{
// The SettingsUtils functions access general settings when the module name is an empty string.
return string . Empty ;
}
public bool UpgradeSettingsConfiguration ( )
{
try
{
2020-10-09 07:34:19 +08:00
if ( Helper . CompareVersions ( PowertoysVersion , Helper . GetProductVersion ( ) ) ! = 0 )
2020-09-24 04:20:32 +08:00
{
// Update settings
PowertoysVersion = Helper . GetProductVersion ( ) ;
return true ;
}
}
catch ( FormatException )
{
// If there is an issue with the version number format, don't migrate settings.
}
return false ;
}
2020-03-25 10:55:02 +08:00
}
}