PowerToys/doc/devdocs/modules/launcher/project_structure.md
Josh Soref 74a1a6eca2
Some checks are pending
Spell checking / Check Spelling (push) Waiting to run
Spell checking / Report (Push) (push) Blocked by required conditions
Spell checking / Report (PR) (push) Blocked by required conditions
Spell checking / Update PR (push) Waiting to run
Upgrade to check-spelling v0.0.24 (#36235)
This upgrades to [v0.0.24](https://github.com/check-spelling/check-spelling/releases/tag/v0.0.24).

A number of GitHub APIs are being turned off shortly, so you need to upgrade or various uncertain outcomes will occur.

There's a new accessibility forbidden pattern:

> Do not use `(click) here` links
> For more information, see:
> * https://www.w3.org/QA/Tips/noClickHere
> * https://webaim.org/techniques/hypertext/link_text
> * https://granicus.com/blog/why-click-here-links-are-bad/
> * https://heyoka.medium.com/dont-use-click-here-f32f445d1021
```pl
(?i)(?:>|\[)(?:(?:click |)here|link|(?:read |)more)(?:</|\]\()
```

There are some minor bugs that I'm aware of and which I've fixed since this release, but I don't expect to make another release this month.

I've added a pair of patterns for includes and pragmas. My argument is that the **compiler** will _generally_ tell you if you've misspelled an include and the **linker** will _generally_ tell you if you misspell a lib.

- There's a caveat here: If your include case-insensitively matches the referenced file (but doesn't properly match it), then unless you either use a case-sensitive file system (as opposed to case-preserving) or beg clang to warn, you won't notice when you make this specific mistake -- this matters in that a couple of Windows headers (e.g. Unknwn.h) have particular case and repositories don't tend to consistently/properly write them.
2024-12-06 10:33:08 -06:00

3.0 KiB

Project Structure

Overview

PowerToys Run is divided across several projects to keep a logical separation between plugins and core functionality. The following sections provide a brief overview of each project.

Image of project dependency Fig 1. Project along with their dependencies in PowerToys Run ecosystem.

Project Description

PowerLauncher

This is the startup project for the PowerToys Run. It is a WPF desktop application and follows the Model-View-ViewModel (MVVM) design pattern. Plugins play the role of Model and provide data to ViewModel.

PowerLauncher.Telemetry

PowerLauncher.Telemetry is a .net core project that contains telemetry events generated by PowerLauncher. These events have been discussed in detail in Launcher Telemetry.

Wox.Core

Wox.Core is a .net core project that contains helper classes required by the PowerLauncher project. Two major functionalities encapsulated in this project are PluginManager and Query Builder. PluginManager provides an interface for managing C# plugins. Query Builder. decimate user-typed query string and creates a Query object. Query object contains the action keyword and cleaned query, which is then sent to all plugins.

Wox.Infrastructure

Wox.Infrastructure is a .net core project that contains helper classes required for image manipulation and storage by the PowerLauncher project and the plugins. ImageLoader.cs class is used to load icons for Win32 program. It also provides caching functionality to speed up image loading for frequently queried programs.

Wox.Plugin

Wox.Plugin contains interfaces that facilitate communication between PowerLauncher and plugins. These interfaces have been discussed in detail in Flow of data between ViewModels and Plugins(Model). It also contains a helper class for logging. Log.cs provides an abstraction for logging error, information, and output to text files. These files are stored at %userprofile%/appdata/local/microsoft/powertoys/powertoys run/Logs.