This change replaces the creation of Redis URL, from a simple string
interpolation, to using `yarl.URL`. The main benefit, besides not
forgetting to set all five different variables on every Redis client
initialization, is that user credentials are correctly URL-encoded, if
present.
Up until now, if a password had special characters, it could break the
generated URL.
This change also introduces support for a `REDIS_SSL` setting, which
allows the user to specify if the Redis connection should use SSL or not.
According to Ruffle documentation [1], the `preferredRenderer` option is
only needed if a renderer needs to be enforced. When not provided:
> By default, Ruffle chooses the most featureful backend supported by the
> user's system, falling back to more basic backends if necessary.
This commit removes the `preferredRenderer` option from the Ruffle
configuration in the frontend, so that the default behavior is used.
It also removes the noisy `logLevel` option, which was set to `debug`.
Fixes rendering issue for `Boxhead: The Rooms`, reported in #1216.
[1] https://github.com/ruffle-rs/ruffle/wiki/Using-Ruffle
This change improves memory usage, by only keeping a single archive's
member file in memory at a time during 7zip decompression.
The `py7zr` library does not support streaming decompression yet, so
this change is the best we can do for now.
Potential fix for #1211, but it won't improve memory usage for
single-file 7zip archives.
When serving files using the `X-Accel-Redirect` header in nginx, the
header values must be URL-encoded. Otherwise, nginx will not be able
to serve the files if they contain special characters.
This commit adds a new `FileRedirectResponse` class to the `utils.nginx`
module, to simplify the creation of responses that serve files using the
`X-Accel-Redirect` header.
Fixes#1212, #1223.
Build and include the `RAHasher` binary in the Docker image, to
calculate hashes for RetroAchievements. Also, add a service to
run `RAHasher` from Python.
Example usage:
```python
from adapters.services.rahasher import RAHasherError, RAHasherService
rahasher = RAHasherService()
try:
hash = await rahasher.calculate_hash("nes", Path("path/to/rom.nes"))
except RAHasherError:
# Handle error
hash = None
```
This change replaces the bundled Redis server with Valkey. No breaking
changes are introduced, as considered environment variables still
maintain the `REDIS_` prefix.
Fixes#925.
If a game is manually unmatched, we update its `name` field to
`file_name` (which includes both tags and extension). After that, if we
go to the Rom list, and click on "Manual match" for that rom, the search
field is populated with that Rom name, which commonly won't retrieve any
results from the metadata providers.
This change makes the "Manual match" search term to use the filename
without tags or extension, when the Rom is currently not matched. It
also triggers the search automatically when a search term was set.
Potential fix for #1167.
* Initialize `removeCover` as `false` on each dialog render, so previous
overrides don't affect the initial state.
* Make both file upload and cover online search update `removeCover` to
false.
* Fix collection update to send `remove_cover` to the API.
Potential fix for #1169.