* fix: add 3rd param to setexchangecode callback
I'm unsure what that param is, it could be an error indicator of some sorts, for now I'll just assume a happy path
* chore: add logging for the param
* Handle file tasks case-insensitively
* Also make verification and uninstallation case-insensitive if necessary
This also only enables case-insensitive file tasks if installing a
Windows game
* Fastpath for existing path case
"Fastpath", heh, get it, because it's working with paths...
* Move to pyproject.toml and the uv build system
* A few tweaks that should make it even faster
* Add pyinstaller to optional dependencies and install it as part of the workflow
* Use --no-editable to avoid building and installing Legendary manually
* Drop deprecated license classifier
* Update README.md to mention uv
* feat: support encrypted manifests and chunks
fix: ensure manifest_secrets is always defined in info
fix: update all usage of DLManager with manifest secrets
* chore: remove unused is_preloaded var
Some UE asset manifests seem to have `"OwnershipToken": ""` instead
of something `strtobool` could understand. When trying to import these
through `egl-sync` an exception is being raised, which blocks importing
other titles too.
The other use of `strtobool` is in `LGDRY_NO_WINE` environment variable,
which also causes an exception if set as `LGDRY_NO_WINE=`
When running legendary through Wine and `XDG_CONFIG_HOME` is set in the environment,
`config_path` resolves to the absolute path to the Linux config directory. Wine in turn
resolves the path in the way that Legendary uses the existing Linux host config
directory instead of creating/using the one under Wine prefix in `%USERPROFILE%\.config`
If a game has a `__required` SDL which is an empty string will fail verification
because the check for building the list of hashes will fail, implying that the
whole game including all the SDLs will be validated.
At the same time, if we are importing a game using a config file that doesn't
specify the `install_tags` for such a game, the install tags won't be saved
due to calling an early `exit(0)`.
These two issues combined can cause a verification, repair, verification loop.
This commit addresses both of those issues.
Related convertation on Discord:
https://discord.com/channels/695233346627698689/695234626582609940/1084939380713594924