Launchpad 9.2
This is another big under-the-hood release. Launchpad should be speedier and more stable for users, and much easier to maintain and less error-prone for developers.
First of all, as usual, the last major release of Launchpad broke a couple things. These have been fixed:
- When using the Advanced editor and editing either the Managed Launcher or Managed Game, you would previously get an error if changing the value of the Exe file. This has been fixed so that it works without any errors.
- Recently, string sanitizing was added to many places in the backend, and it highlighted a problem with how we are applying data processors. Sometimes, the processors were being applied to objects they weren't designed for and causing unintended results. They now filter themselves to only apply to certain types.
- Sometimes the hidden console window that Launchpad uses for certain tasks isn't visible when Launchpad tries to hide it, and that was causing an error. This has been fixed so that Launchpad only hides the console if it's actually shown.
Changes and Enhancements:
- Launchpad now uses real dependency injection to access the majority of its services, and a lot more classes within Launchpad are now considered services. This has several benefits, such as services only being loaded the first time they're actually accessed, and the fact that almost any service in the deepest depths of Launchpad can be replaced from the top level of the application, and soon from configuration files as well. Not only are services injected, but any arbitrary parameters can be injected independently of the service definitions, so things like private data can be passed in from outside Launchpad in a secure way. This functionality is modeled loosely after how the Symfony framework in PHP handles dependency injection, except built from the ground up for AHK.
- As a bonus to fixing the way data processors work, they now can actually apply to arrays and maps, where they originally only supported strings. Now, more strings in Launchpad are automatically sanitized and expanded with placeholder values!
- Launchpad's class library has been heavily refactored and moved around recently, and this process is still ongoing. The goal is to split off most of Launchpad's shared libraries into independent libraries that are not so tightly coupled so that they can more easily be swapped out and/or contributed back to the AHK community in a way that is easier to digest. This also helps massively with maintainability--as Launchpad's codebase continues to expand and get more complex, keeping things as uncluttered as possible is a big priority.
Going forward, the big underlying changes still underway are:
- Turning more classes into injected services
- Creating factories for repeatable services so that even more classes can be injected properly
- Moving everything that isn't strictly required for basic functionality to separate modules which can be enabled or disabled at will
- Overhauling how API data is handled so that it's faster, more reliable, and results in less requests