mirror of
https://github.com/microsoft/PowerToys
synced 2025-08-22 01:58:04 +00:00
## Summary of the Pull Request - #39572 updated check-spelling but ignored: > 🐣 Breaking Changes [Code Scanning action requires a Code Scanning Ruleset](https://github.com/check-spelling/check-spelling/wiki/Breaking-Change:-Code-Scanning-action-requires-a-Code-Scanning-Ruleset) If you use SARIF reporting, then instead of the workflow yielding an ❌ when it fails, it will rely on [github-advanced-security 🤖](https://github.com/apps/github-advanced-security) to report the failure. You will need to adjust your checks for PRs. This means that check-spelling hasn't been properly doing its job 😦. I'm sorry, I should have pushed a thing to this repo earlier,... Anyway, as with most refreshes, this comes with a number of fixes, some are fixes for typos that snuck in before the 0.0.25 upgrade, some are for things that snuck in after, some are based on new rules in spell-check-this, and some are hand written patterns based on running through this repository a few times. About the 🐣 **breaking change**: someone needs to create a ruleset for this repository (see [Code Scanning action requires a Code Scanning Ruleset: Sample ruleset ](https://github.com/check-spelling/check-spelling/wiki/Breaking-Change:-Code-Scanning-action-requires-a-Code-Scanning-Ruleset#sample-ruleset)). The alternative to adding a ruleset is to change the condition to not use sarif for this repository. In general, I think the github integration from sarif is prettier/more helpful, so I think that it's the better choice. You can see an example of it working in: - https://github.com/check-spelling-sandbox/PowerToys/pull/23 --------- Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> Co-authored-by: Mike Griese <migrie@microsoft.com> Co-authored-by: Dustin L. Howett <dustin@howett.net>
3.1 KiB
3.1 KiB
View Models
The view models are located within the Settings.UI.Library
project.
Components
- Each view model takes in the general
settingsRepository
, themoduleSettingsRepository
if it exists and the delegates for IPC communication. - The general
settingsRepository
contains the general configurations of all powertoys whereas themoduleSettingsRepository
is specific to the module. This is to ensure that the configuration details are shared amongst the viewmodels without having to re-open thesettings.json
file. - Whenever there is a change in the UI, the
OnPropertyChanged
event is invoked and the view model sends a corresponding IPC message to the runner which would perform the designated action such as dispatching the change to the modules or enabling/disabling the powertoy, etc.
Difference between view models
- The
GeneralViewModel
is different from the rest of the view models with regard to the IPC communication wherein it sends special IPC messages to the runner to check for updates and to restart as admin. - Each of the powerToy view models have two types of IPC communications, one for the general status of the powerToy and the other for communication powerToy specific change in properties to the runner.
SettingsRepository
- The
SettingsRepository
is a generic singleton which contains the configurations for each view model. - As it is a generic singleton, there can only be one instance of the settings repository of a particular type. This ensures that all the view models are modifying a common object and a change made in one locations reflects everywhere.
- The singleton implementation is thread-safe. Unit tests have been added for the same.
Settings view model anomalies
- The reason behind using the
SettingsRepository
is to ensure that the settings process does not try to access thesettings.json
files directly but rather does it through this class which encapsulates all the file operations from the view models. - However, this could not be expanded to all the view models directly for the following reasons. Some refactoring must be done to unify these cases and to bring them under the same model:
- The PowerRename view model does not save the settings configurations in the same format as the rest of the powertoys, i.e. {name, version, properties}. However, it only stores the properties directly.
- Some view models expect the runner to create the file instead of creating the file themselves, like in keyboard manager.
- The colorpicker powertoy creates the
settings.json
within the module. This must be taken care of when encapsulated within the settingsRepository.
- Currently, all modules use the
SettingsRepository
to access the General Settings config. - However, only FancyZones, ShortcutGuide and PowerPreview use the
SettingsRepository
to access the module properties.