Commit Graph

525 Commits

Author SHA1 Message Date
Georges-Antoine Assi
3fcce6606c complete updating the endpoints and models 2024-12-20 22:41:56 -05:00
Georges-Antoine Assi
49c50ad810 Move hash calc for roms to bacakground task 2024-12-19 22:21:51 -05:00
Georges-Antoine Assi
37db255328 refactor oidc handler and fix tests 2024-12-18 10:49:45 -05:00
Georges-Antoine Assi
1a9735645e Merge branch 'master' into openid-connect 2024-12-18 00:17:40 -05:00
Michael Manganiello
099f6e6fe2 misc: Remove unneeded Redis key for Twitch token expiration
The key `romm:twitch_token_expires_at` is not needed, as we already
set an expiration time for the token key itself. If the token is still
present in Redis, it is valid. If not, it means we either never fetched
it, or it was too close to expiration.

With this change, fetching the Twitch token makes a single Redis call
instead of two.
2024-12-13 14:33:56 -03:00
Michael Manganiello
f78611e8bb Merge pull request #1359 from rommapp/misc/sort-roms-at-handler
misc: Sort roms in get_roms method
2024-12-13 14:29:01 -03:00
Georges-Antoine Assi
34d49e6494 changes from self review 2024-12-13 11:33:39 -05:00
Michael Manganiello
bcaecbd311 misc: Sort roms in get_roms method
The `get_roms` method is used during scanning and to generate feeds.
Sorting by filename is not perfect (e.g. prefixes like "The" or "A"),
but should be good enough for users to better visualize how the scanning
process is going, and how close it's to finish.
2024-12-13 10:01:49 -03:00
Michael Manganiello
09c32f2376 misc: Use async cache in IGDB handler
One of the only places we are still using the sync cache, can be easily
changed to use the async one.
2024-12-13 09:21:47 -03:00
Georges-Antoine Assi
2d5bc34e9c add tests for oidc handler 2024-12-12 17:37:30 -05:00
Georges-Antoine Assi
82ac766c9e oidc login using email 2024-12-12 10:08:27 -05:00
Georges-Antoine Assi
0e2866f0f5 dont setup OIDC if disabled 2024-12-11 23:20:21 -05:00
Georges-Antoine Assi
cae4089ccf add email field 2024-12-09 19:57:13 -05:00
Georges-Antoine Assi
b7dac4743a Merge branch 'master' into openid-connect 2024-12-07 22:19:24 -05:00
zurdi
c6039ccff4 fix: correct filter condition for retrieving collections associated with a ROM ID 2024-12-05 16:16:34 +00:00
zurdi
014427e69f fix: update ROM deletion process to remove associated collections and streamline user data updates 2024-12-05 16:08:45 +00:00
zurdi
eae8d34d8f fix: convert zlib error to string for better logging in ROM hash calculation 2024-12-04 00:10:44 +00:00
zurdi
7614df07b1 fix: handle zlib error when calculating ROM hashes for corrupted files 2024-12-04 00:06:06 +00:00
Zurdi
a6ff9baf80 Merge pull request #1324 from rommapp/feature/add-platform-info
feat: Add platform info drawer + per platform settings
2024-12-03 19:01:16 +01:00
Zurdi
5b39127a02 Merge pull request #1323 from rommapp/fix/check-user-on-middleware
fix: Crash on new instance from previous installation
2024-12-03 00:25:42 +01:00
Zurdi
219145e000 Update middleware based on review 2024-12-02 18:56:58 +01:00
zurdi
caa24433b1 refactor: improve user authentication handling without requesting to database 2024-12-02 15:37:13 +00:00
zurdi
44afc718a6 refactor: check user existence only for /api/heartbeat endpoint 2024-12-02 15:09:36 +00:00
zurdi
52ccd1c727 fixes based on unit testing 2024-12-02 11:20:40 +00:00
Michael Manganiello
0a4c81d5c1 misc: Retrieve roms by filename from database in bulk during scan
The scanning process could try to fetch thousands of roms from the
database, one by one, which is very inefficient, especially when only a
few new roms are added to the library, as the overhead of database calls
is very high compared to metadata API calls.

This change introduces a new method in the roms handler to retrieve roms
by their file names in bulk, which is used during the scan process to
fetch a batch of roms at once, instead of one by one.

It also avoids the `@with_details` decorator when fetching roms during
the scanning process, as those details are not needed, and they were
adding unnecessary joins and data decoding.
2024-12-02 00:00:47 -03:00
zurdi
6a7433e1f9 removed unnecessary video endpoint request 2024-11-28 16:12:05 +00:00
zurdi
cb5d2438d2 Merge remote-tracking branch 'origin/master' into feature/add-platform-info 2024-11-28 15:23:32 +00:00
zurdi
a29a14aefb normalized covers and logos 2024-11-28 15:23:20 +00:00
zurdi
bf41d9ff05 fixed total crash on a fresh installation having session cookies from previous installation 2024-11-28 12:30:13 +00:00
zurdi
be87d92cf7 fixed platform info migration and models 2024-11-28 12:28:29 +00:00
Georges-Antoine Assi
1866cfdbae revert one oauth to oidc change 2024-11-27 23:39:53 -05:00
Georges-Antoine Assi
a2179604bf fix trunk error 2024-11-27 23:36:41 -05:00
Georges-Antoine Assi
3abf50b056 changes from self review 2024-11-27 23:28:54 -05:00
Georges-Antoine Assi
11923786be fetch and use rsa key 2024-11-27 22:40:02 -05:00
zurdi
06e524f650 Merge branch 'master' into feature/add-platform-info 2024-11-27 22:51:16 +00:00
zurdi
213e62b31b added mask to mobygames api 2024-11-27 17:29:10 +00:00
zurdi
a51dd03e1a Added full offline support and configurable logging level and API requests debug logs 2024-11-27 17:12:13 +00:00
zurdi
80b7cc7333 added basic platform info from the igdb api call 2024-11-27 11:43:06 +00:00
Georges-Antoine Assi
bc5c2e45f3 wokring oidc setup with authentik 2024-11-26 23:57:15 -05:00
Michael Manganiello
4ecbac73b3 Merge pull request #1300 from rommapp/fix/igdb-game-search-categories
fix: Consider more categories when matching IGDB games
2024-11-17 01:46:23 -03:00
Michael Manganiello
71ac92bfb6 fix: Consider IGDB alternatives when checking for exact match
IGDB provides alternative names for games, which we are currently not
considering when checking for an exact match.

This change starts considering alternative names, in addition to the
game's name and slug, when checking for an exact match.
2024-11-16 20:58:20 -03:00
Michael Manganiello
deaac348da fix: Consider more categories when matching IGDB games
This change includes more categories when matching IGDB games. While
testing, some games were incorrectly matched to the wrong game, and the
reason was that the game was a Port (e.g. `Arkanoid`, `Contra`,
`Double Dragon`, `Metal Gear` for NES), a Remake (e.g.
`Adventure Island` for NES), or a Remaster.
2024-11-16 20:44:41 -03:00
Michael Manganiello
477d9b1744 feat: Add streaming support for 7zip hashing
At the moment, 7zip files are generating memory issues and even OOM
errors on user installations. This is because the current stable release
of `py7zr` does not support decompression streaming, and RomM needs to
decompress the each 7zip file in the library into memory to be able to
calculate hashes.

This change introduces a `py7zr` fork I created to have a stable commit
SHA to refer to in case upstream gets any forced pushes. It includes the
contents of the pull request the `py7zr` creator is working on to
support decompression streaming [1].

The way decompression streaming is implemented in `py7zr` is different
than the other compression utilities. Instead of being able to provide a
`bytes` iterator, we need to provide a `Py7zIO` implementation that
will call a callback on each read and write operation.

[1] https://github.com/miurahr/py7zr/pull/620
2024-11-08 21:31:11 -03:00
Michael Manganiello
009a436915 Merge pull request #1265 from rommapp/misc/initial-igdb-typehints
misc: Initial addition of IGDB typehints
2024-10-29 13:23:02 -03:00
Michael Manganiello
6410b6b981 Merge pull request #1263 from rommapp/fix/download-igdb-screenshot-right-aspect-ratio
fix: Download IGDB screenshots with right aspect ratio
2024-10-29 13:22:36 -03:00
Michael Manganiello
2ff37f268d Merge pull request #1261 from rommapp/fix/broken-igdb-age-rating-image-links
fix: Broken IGDB age rating image links
2024-10-29 13:22:25 -03:00
Michael Manganiello
4bb5cb5149 misc: Initial addition of IGDB typehints
The short-term goal is to completely typehint the IGDB API responses. This
first change adds the base structures and enums RomM currently uses.

The `ExpandableField` type will allow us to model the expansion
mechanism the IGDB API provides, where a field can include either an ID,
or the full nested structure.
2024-10-27 00:02:01 -03:00
Michael Manganiello
752096451e fix: Download IGDB screenshots with right aspect ratio
The IGDB API provides screenshots in a 1280x720 resolution, when either
`screenshot_huge` or `720p` size values are used [1]. The
`screenshot_huge` uses `Lfill`, while `720p` uses `Fit` as the resizing
method.

That means that either `screenshot_huge` or `720p` will provide the
correct aspect ratio for 16:9 platforms. However, for platforms with a
different aspect ratio, we need to use the `720p` size value to get the
correct image instead of a cropped one.

Example:
- [`screenshot_huge`](https://images.igdb.com/igdb/image/upload/t_screenshot_huge/c77bodnkwu73gs2jwhw4.jpg)
- [`720p`](https://images.igdb.com/igdb/image/upload/t_720p/c77bodnkwu73gs2jwhw4.jpg)

[1] https://api-docs.igdb.com/#images
2024-10-26 18:26:00 -03:00
Michael Manganiello
0190566530 fix: Broken IGDB age rating image links
Some of the image links for IGDB age ratings were broken. This commit
fixes all of them.
2024-10-26 01:19:57 -03:00
Michael Manganiello
8fd680ab84 fix: Make tar decompression only consider regular files
The `tar` decompression function was failing for some users, with error
message:

```
'NoneType' object does not support the context manager protocol
```

As explained in the official documentation [1], the `extractfile` method
returns `None` if the member is not a regular file or a link. This
change skips any member that is not a regular file.

[1] https://docs.python.org/3/library/tarfile.html#tarfile.TarFile.extractfile
2024-10-26 01:07:27 -03:00