Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v3.6.0 #1248

Open
wants to merge 103 commits into
base: release
Choose a base branch
from
Open

v3.6.0 #1248

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
c3ea419
Add age ratings to UI + filters
gantoine Aug 26, 2024
401d235
Merge branch 'master' into romm-1114
gantoine Aug 26, 2024
5f27c1c
Create new fields on rom_user
gantoine Aug 29, 2024
48ec9f3
create ui components and page
gantoine Aug 29, 2024
efcc2ba
connect to the backend
gantoine Aug 29, 2024
069f1a6
small ui tweak
gantoine Aug 30, 2024
5544ae1
Merge branch 'master' into romm-1114
gantoine Sep 1, 2024
d57f276
fix merge error
gantoine Sep 1, 2024
9b6b19e
Merge branch 'master' into romm-829
gantoine Sep 3, 2024
e432bc3
Merge branch 'master' into romm-1114
gantoine Sep 3, 2024
17c233e
fix trunk
gantoine Sep 3, 2024
0e98183
fix: Correctly update state for cover deletion
adamantike Sep 5, 2024
b65345c
Merge pull request #1174 from rommapp/fix/cover-update-and-delete
adamantike Sep 6, 2024
680943e
fix: Use filename without tags or extension when matching unmatched game
adamantike Sep 6, 2024
d2d9f1d
small code styling
gantoine Sep 6, 2024
bef54f5
Merge pull request #1177 from rommapp/fix/use-filename-when-matching-…
adamantike Sep 6, 2024
8dae0a5
add simple emojis to cards
gantoine Sep 8, 2024
0d80bd7
working sidebar filters
gantoine Sep 8, 2024
750f440
run generate
gantoine Sep 8, 2024
9086fa5
fix a bunch o types
gantoine Sep 8, 2024
e1e2134
refactor filters and centralize under utils
gantoine Sep 8, 2024
d5dfb71
actually hide games
gantoine Sep 8, 2024
4bdcc63
add working filter for hidden roms
gantoine Sep 8, 2024
4a664ab
[ROMM-1181] Skip hashing games on desktop platorms
gantoine Sep 9, 2024
515b352
Merge pull request #1183 from rommapp/romm-1181
gantoine Sep 9, 2024
2765a6e
[ROMM-1176] Fetch video ID and place in carousel
gantoine Sep 9, 2024
00811be
use model to keep steps in sync
gantoine Sep 9, 2024
fc85fcb
fix pytests
gantoine Sep 9, 2024
8fc25cd
use timezone aware datetimes
gantoine Sep 9, 2024
97496d1
Merge pull request #1184 from rommapp/romm-1176
gantoine Sep 9, 2024
0b2a822
remove timezone from config init
gantoine Sep 9, 2024
fc6455e
Merge pull request #1137 from rommapp/romm-829
gantoine Sep 9, 2024
d2ab0f4
Try to fix nginx proxy buffering on upload
gantoine Sep 21, 2024
b85b001
fix socket updates on scan
gantoine Sep 21, 2024
e20465f
increase timeout to 6 minutes
gantoine Sep 21, 2024
bca5520
Merge pull request #1201 from rommapp/rom-upload-proxy-buffering
gantoine Sep 21, 2024
6cb332e
changes from reciew
gantoine Sep 21, 2024
6880d11
Merge branch 'master' into romm-1114
gantoine Sep 21, 2024
8bf3ff6
run formatter
gantoine Sep 21, 2024
8a13611
Merge pull request #1119 from rommapp/romm-1114
gantoine Sep 21, 2024
66e5939
misc: Use bundled Valkey instead of Redis server
adamantike Sep 22, 2024
405a087
Merge pull request #1205 from rommapp/misc/use-bundled-valkey-instead…
adamantike Sep 22, 2024
a82489a
feat: Add RAHasher and util to calculate RetroAchievements hashes
adamantike Sep 22, 2024
cf3932f
Merge pull request #1206 from rommapp/feat/add-rahasher
adamantike Sep 23, 2024
60ff832
fix: Escape URLs when files are served by nginx
adamantike Oct 6, 2024
0b62fe2
Merge pull request #1224 from rommapp/fix/escape-download-urls-when-s…
adamantike Oct 6, 2024
149098f
fix: Improve memory usage during 7zip decompression
adamantike Oct 6, 2024
05dc67c
Merge pull request #1226 from rommapp/fix/improve-memory-usage-7z-dec…
adamantike Oct 6, 2024
abf9dcc
fix: Do not set Ruffle's renderer explicitly
adamantike Oct 6, 2024
36c77d5
Merge pull request #1227 from rommapp/fix/do-not-explicitly-set-ruffl…
adamantike Oct 7, 2024
8438bc9
Fix vite.config.js not reading DEV_PORT
yuri-becker Oct 11, 2024
a26168e
fix: Skip scanning task by checking against the correct function name
adamantike Oct 11, 2024
b81fbc5
fix: Improve handling of Redis URL
adamantike Oct 12, 2024
f68033e
Add UPLOAD_TIMEOUT
yuri-becker Oct 11, 2024
b59411c
misc: Upgrade RALibretro to v1.8.0
adamantike Oct 12, 2024
a9ac322
fix: Correctly resize and save small artwork
adamantike Oct 12, 2024
1127cf9
fix: Avoid image requests for undefined.ico platform icon
adamantike Oct 12, 2024
5acbdfd
add offset parameter to get_roms endpoint
alisci01 Oct 12, 2024
eb6a48e
Use seconds for UPLOAD_TIMEOUT
yuri-becker Oct 12, 2024
ae9939d
Merge pull request #1235 from rommapp/fix/improve-redis-url-handling
adamantike Oct 12, 2024
c91611f
Merge pull request #1234 from rommapp/fix/scanning-skip-if-already-sc…
adamantike Oct 12, 2024
a594eff
Merge pull request #1238 from rommapp/fix-save-small-artworks
adamantike Oct 12, 2024
d35f772
Merge pull request #1239 from rommapp/fix/avoid-image-requests-to-und…
adamantike Oct 12, 2024
4c52219
Merge pull request #1237 from rommapp/misc/upgrade-ralibretro-1.8.0
adamantike Oct 12, 2024
1df2707
fix: Avoid query during import time to set add_user endpoint scopes
adamantike Oct 14, 2024
72182b9
Merge pull request #1240 from alisci01/add-offset-to-get-roms-endpoint
gantoine Oct 14, 2024
2a24f5f
Merge pull request #1241 from rommapp/fix/avoid-query-add_user-at-imp…
adamantike Oct 14, 2024
eba2971
fix: Simplify query that validates new username already exists
adamantike Oct 14, 2024
48f198c
Update docker-compose.example.yml
drcursor Oct 14, 2024
fb7bfe7
Update docker-compose.yml
drcursor Oct 14, 2024
4dd82a9
Merge pull request #1243 from drcursor/patch-1
gantoine Oct 14, 2024
5b73c4e
Merge pull request #1236 from yuri-becker/feature/configurable-upload…
gantoine Oct 14, 2024
fc8cbb7
Merge pull request #1242 from rommapp/fix/simplify-query-to-validate-…
adamantike Oct 14, 2024
beeb9f0
misc: Create enum for authorization scopes
adamantike Oct 19, 2024
310d51f
added 'add exclusion' endpoint and enabled UI
zurdi15 Oct 24, 2024
56270e6
fixed exclusion tests
zurdi15 Oct 24, 2024
a7e1789
added actions buttons to exclusion dialog
zurdi15 Oct 24, 2024
d1faaad
updated readme preview
zurdi15 Oct 24, 2024
c44b27f
added add and remove features to the frontend + backend
zurdi15 Oct 24, 2024
7645331
fixed visual bug when adding platform version
zurdi15 Oct 24, 2024
f33996c
removed unused logs
zurdi15 Oct 24, 2024
c78a5f5
tweak edit rom dialog
zurdi15 Oct 24, 2024
12cb76c
reverted test changes
zurdi15 Oct 24, 2024
a4fd446
added typeguard for exclusion keys
zurdi15 Oct 24, 2024
cc20e84
Merge pull request #1247 from rommapp/misc/scope-enum
adamantike Oct 25, 2024
c6cf605
Merge pull request #1256 from rommapp/docs/update-readme-preview
zurdi15 Oct 25, 2024
8b11bff
Merge remote-tracking branch 'origin/master' into feature/enable-conf…
zurdi15 Oct 25, 2024
373757e
Merge pull request #1254 from rommapp/feature/enable-config-exclusion…
zurdi15 Oct 25, 2024
c41e8ec
fixed rom personal details on mobile
zurdi15 Oct 25, 2024
8fd680a
fix: Make tar decompression only consider regular files
adamantike Oct 26, 2024
0190566
fix: Broken IGDB age rating image links
adamantike Oct 26, 2024
7520964
fix: Download IGDB screenshots with right aspect ratio
adamantike Oct 26, 2024
1c7880b
fix: Show source image on each result for Manual match
adamantike Oct 26, 2024
4bb5cb5
misc: Initial addition of IGDB typehints
adamantike Oct 27, 2024
43e9365
fixed margin for personal tab
zurdi15 Oct 29, 2024
e79ff38
Merge pull request #1260 from rommapp/fix/tar-decompression-only-cons…
adamantike Oct 29, 2024
2ff37f2
Merge pull request #1261 from rommapp/fix/broken-igdb-age-rating-imag…
adamantike Oct 29, 2024
6410b6b
Merge pull request #1263 from rommapp/fix/download-igdb-screenshot-ri…
adamantike Oct 29, 2024
4f78f3b
Merge pull request #1264 from rommapp/fix/source-image-manual-match
adamantike Oct 29, 2024
009a436
Merge pull request #1265 from rommapp/misc/initial-igdb-typehints
adamantike Oct 29, 2024
26dcefa
misc: Use tini as container entrypoint
adamantike Oct 30, 2024
9f28c95
Merge pull request #1272 from rommapp/misc/use-tini-as-container-entr…
adamantike Nov 1, 2024
277470b
Merge pull request #1271 from rommapp/fix/details-personal
zurdi15 Nov 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .github/resources/screenshots/preview-desktop.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/resources/screenshots/preview-mobile.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file removed .github/resources/screenshots/romm-mobile-slider.gif
Binary file not shown.
2 changes: 1 addition & 1 deletion .trunk/trunk.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ lint:
- [email protected]
- git-diff-check
- [email protected]
- mypy@1.11.2
- mypy@1.13.0
- [email protected]
- [email protected]
- [email protected]
Expand Down
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"python.testing.cwd": "${workspaceFolder}/backend",
"python.testing.pytestArgs": ["."],
"python.testing.unittestEnabled": false,
"python.testing.pytestEnabled": true
}
6 changes: 6 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,12 @@
"type": "shell",
"command": "export $(cat .env | grep DB_ROOT_PASSWD | xargs) && docker exec -i mariadb mariadb -u root -p$DB_ROOT_PASSWD < backend/romm_test/setup.sql",
"problemMatcher": []
},
{
"label": "Launch full stack",
"dependsOn": ["Launch frontend", "Launch backend", "Launch worker"],
"problemMatcher": [],
"dependsOrder": "parallel"
}
]
}
17 changes: 13 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,21 @@

# Table of Contents

- [Table of Contents](#table-of-contents)
- [Overview](#overview)
- [Features](#features)
- [Preview](#preview)
- [Installation](#installation)
- [Configuration](#configuration)
- [Folder Structure](#folder-structure)
- [Folder Structure](#folder-structure)
- [Configuration File](#configuration-file)
- [Scheduler](#scheduler)
- [Naming Convention](#naming-convention)
- [Platform Support](#platform-support)
- [Tag Support](#tag-support)
- [Community](#community)
- [Support](#support)
- [Our Friends](#our-friends)

# Overview

Expand All @@ -46,9 +55,9 @@ RomM (ROM Manager) allows you to scan, enrich, and browse your game collection w

## Preview

| 🖥 Desktop | 📱 Mobile |
| :---------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------: |
| <img src=".github/resources/screenshots/romm-desktop-slider.gif" alt="desktop preview" /> | <img style="width: 325px; aspect-ratio: auto;" src=".github/resources/screenshots/romm-mobile-slider.gif" alt="mobile preview" /> |
| 🖥 Desktop | 📱 Mobile |
| :-----------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: |
| <img src=".github/resources/screenshots/preview-desktop.gif" alt="desktop preview" /> | <img style="width: 325px; aspect-ratio: auto;" src=".github/resources/screenshots/preview-mobile.gif" alt="mobile preview" /> |

# Installation

Expand Down
Empty file added backend/adapters/__init__.py
Empty file.
Empty file.
286 changes: 286 additions & 0 deletions backend/adapters/services/igdb_types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,286 @@
from __future__ import annotations

import enum
from typing import NewType, TypedDict

# https://api-docs.igdb.com/#expander
type ExpandableField[T] = T | int

# TODO: Add missing structures until all are implemented.
UnimplementedEntity = NewType("UnimplementedEntity", dict)
AgeRatingContentDescription = UnimplementedEntity
AlternativeName = UnimplementedEntity
Artwork = UnimplementedEntity
CollectionRelation = UnimplementedEntity
CollectionType = UnimplementedEntity
Cover = UnimplementedEntity
ExternalGame = UnimplementedEntity
Franchise = UnimplementedEntity
GameEngine = UnimplementedEntity
GameLocalization = UnimplementedEntity
GameMode = UnimplementedEntity
Genre = UnimplementedEntity
InvolvedCompany = UnimplementedEntity
Keyword = UnimplementedEntity
LanguageSupport = UnimplementedEntity
MultiplayerMode = UnimplementedEntity
PlatformFamily = UnimplementedEntity
PlatformLogo = UnimplementedEntity
PlatformVersionCompany = UnimplementedEntity
PlatformVersionReleaseDate = UnimplementedEntity
PlatformWebsite = UnimplementedEntity
PlayerPerspective = UnimplementedEntity
ReleaseDate = UnimplementedEntity
TagNumber = UnimplementedEntity
Theme = UnimplementedEntity
Website = UnimplementedEntity


class IGDBEntity(TypedDict):
"""Base class for all IGDB entities.

All IGDB entities include an ID field. They must inherit from this class, and set `total=False`
in the class definition, as they only include the `fields` requested in the API query.
"""

id: int


# https://api-docs.igdb.com/#age-rating-enums
class AgeRatingCategory(enum.IntEnum):
ESRB = 1
PEGI = 2
CERO = 3
USK = 4
GRAC = 5
CLASS_IND = 6
ACB = 7


# https://api-docs.igdb.com/#age-rating-enums
class AgeRatingRating(enum.IntEnum):
THREE = 1
SEVEN = 2
TWELVE = 3
SIXTEEN = 4
EIGHTEEN = 5
RP = 6
EC = 7
E = 8
E10 = 9
T = 10
M = 11
AO = 12
CERO_A = 13
CERO_B = 14
CERO_C = 15
CERO_D = 16
CERO_Z = 17
USK_0 = 18
USK_6 = 19
USK_12 = 20
USK_16 = 21
USK_18 = 22
GRAC_ALL = 23
GRAC_TWELVE = 24
GRAC_FIFTEEN = 25
GRAC_EIGHTEEN = 26
GRAC_TESTING = 27
CLASS_IND_L = 28
CLASS_IND_TEN = 29
CLASS_IND_TWELVE = 30
CLASS_IND_FOURTEEN = 31
CLASS_IND_SIXTEEN = 32
CLASS_IND_EIGHTEEN = 33
ACB_G = 34
ACB_PG = 35
ACB_M = 36
ACB_MA15 = 37
ACB_R18 = 38
ACB_RC = 39


# https://api-docs.igdb.com/#age-rating
class AgeRating(IGDBEntity, total=False):
category: AgeRatingCategory
checksum: str # uuid
content_descriptions: list[ExpandableField[AgeRatingContentDescription]]
rating: AgeRatingRating
rating_cover_url: str
synopsis: str


# https://api-docs.igdb.com/#collection
class Collection(IGDBEntity, total=False):
as_child_relations: list[ExpandableField[CollectionRelation]]
as_parent_relations: list[ExpandableField[CollectionRelation]]
checksum: str # uuid
created_at: int # timestamp
games: list[ExpandableField[Game]]
name: str
slug: str
type: ExpandableField[CollectionType]
updated_at: int # timestamp
url: str


# https://api-docs.igdb.com/#game-enums
class GameCategory(enum.IntEnum):
MAIN_GAME = 0
DLC_ADDON = 1
EXPANSION = 2
BUNDLE = 3
STANDALONE_EXPANSION = 4
MOD = 5
EPISODE = 6
SEASON = 7
REMAKE = 8
REMASTER = 9
EXPANDED_GAME = 10
PORT = 11
FORK = 12
PACK = 13
UPDATE = 14


# https://api-docs.igdb.com/#game-enums
class GameStatus(enum.IntEnum):
RELEASED = 0
ALPHA = 2
BETA = 3
EARLY_ACCESS = 4
OFFLINE = 5
CANCELLED = 6
RUMORED = 7
DELISTED = 8


# https://api-docs.igdb.com/#game
class Game(IGDBEntity, total=False):
age_ratings: list[ExpandableField[AgeRating]]
aggregated_rating: float
aggregated_rating_count: int
alternative_names: list[ExpandableField[AlternativeName]]
artworks: list[ExpandableField[Artwork]]
bundles: list[ExpandableField[Game]]
category: GameCategory
checksum: str # uuid
collections: list[ExpandableField[Collection]]
cover: ExpandableField[Cover]
created_at: int # timestamp
dlcs: list[ExpandableField[Game]]
expanded_games: list[ExpandableField[Game]]
expansions: list[ExpandableField[Game]]
external_games: list[ExpandableField[ExternalGame]]
first_release_date: int # timestamp
forks: list[ExpandableField[Game]]
franchise: ExpandableField[Franchise]
franchises: list[ExpandableField[Franchise]]
game_engines: list[ExpandableField[GameEngine]]
game_localizations: list[ExpandableField[GameLocalization]]
game_modes: list[ExpandableField[GameMode]]
genres: list[ExpandableField[Genre]]
hypes: int
involved_companies: list[ExpandableField[InvolvedCompany]]
keywords: list[ExpandableField[Keyword]]
language_supports: list[ExpandableField[LanguageSupport]]
multiplayer_modes: list[ExpandableField[MultiplayerMode]]
name: str
parent_game: ExpandableField[Game]
platforms: list[ExpandableField[Platform]]
player_perspectives: list[ExpandableField[PlayerPerspective]]
ports: list[ExpandableField[Game]]
rating: float
rating_count: int
release_dates: list[ExpandableField[ReleaseDate]]
remakes: list[ExpandableField[Game]]
remasters: list[ExpandableField[Game]]
screenshots: list[ExpandableField[Screenshot]]
similar_games: list[ExpandableField[Game]]
slug: str
standalone_expansions: list[ExpandableField[Game]]
status: GameStatus
storyline: str
summary: str
tags: list[TagNumber]
themes: list[ExpandableField[Theme]]
total_rating: float
total_rating_count: int
updated_at: int # timestamp
url: str
version_parent: ExpandableField[Game]
version_title: str
videos: list[ExpandableField[GameVideo]]
websites: list[ExpandableField[Website]]


# https://api-docs.igdb.com/#game-video
class GameVideo(IGDBEntity, total=False):
checksum: str # uuid
game: ExpandableField[Game]
name: str
video_id: str


# https://api-docs.igdb.com/#platform-enums
class PlatformCategory(enum.IntEnum):
CONSOLE = 1
ARCADE = 2
PLATFORM = 3
OPERATING_SYSTEM = 4
PORTABLE_CONSOLE = 5
COMPUTER = 6


# https://api-docs.igdb.com/#platform
class Platform(IGDBEntity, total=False):
abbreviation: str
alternative_name: str
category: PlatformCategory
checksum: str # uuid
created_at: int # timestamp
generation: int
name: str
platform_family: ExpandableField[PlatformFamily]
platform_logo: ExpandableField[PlatformLogo]
slug: str
summary: str
updated_at: int # timestamp
url: str
versions: list[ExpandableField[PlatformVersion]]
websites: list[ExpandableField[PlatformWebsite]]


# https://api-docs.igdb.com/#platform-version
class PlatformVersion(IGDBEntity, total=False):
checksum: str # uuid
companies: list[ExpandableField[PlatformVersionCompany]]
connectivity: str
cpu: str
graphics: str
main_manufacturer: ExpandableField[PlatformVersionCompany]
media: str
memory: str
name: str
os: str
output: str
platform_logo: ExpandableField[PlatformLogo]
platform_version_release_dates: list[ExpandableField[PlatformVersionReleaseDate]]
resolutions: str
slug: str
sound: str
storage: str
summary: str
url: str


# https://api-docs.igdb.com/#screenshot
class Screenshot(IGDBEntity, total=False):
alpha_channel: bool
animated: bool
checksum: str # uuid
game: ExpandableField[Game]
height: int
image_id: str
url: str
width: int
Loading
Loading