From 138b75c69850ad2d7afec83eca70059fc37ba167 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 26 Apr 2024 08:53:31 -0400 Subject: [PATCH 01/50] handle gunicorn socket creation manually --- docker/init_scripts/init | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/docker/init_scripts/init b/docker/init_scripts/init index ff0a3be14..7233826cc 100755 --- a/docker/init_scripts/init +++ b/docker/init_scripts/init @@ -37,7 +37,12 @@ error_log () { start_bin_gunicorn () { # cleanup potentially leftover socket rm /tmp/gunicorn.sock -f - # Commands to start our main application and store its PID to check for crashes + + # recreate the socket file and ensure it has correct permissions + touch /tmp/gunicorn.sock + chmod 777 /tmp/gunicorn.sock + + # commands to start our main application and store its PID to check for crashes info_log "starting gunicorn" gunicorn \ --access-logfile - \ @@ -106,6 +111,14 @@ watchdog_process_pid () { fi } +wait_for_gunicorn_socket () { + info_log "waiting for gunicorn socket file..." + while [ ! -S /tmp/gunicorn.sock ]; do + sleep 1 + done + info_log "gunicorn socket file found" +} + # switch to backend directory cd /backend || { error_log "/backend directory doesn't seem to exist"; } @@ -135,11 +148,12 @@ while true; do debug_log "database schema already upgraded during current container lifecycle" fi - # Start nginx if we dont have a corresponding PID file - watchdog_process_pid bin nginx - # Start uvicorn if we dont have a corresponding PID file watchdog_process_pid bin gunicorn + wait_for_gunicorn_socket + + # Start nginx if we dont have a corresponding PID file + watchdog_process_pid bin nginx # only start the watcher.py if we actually want to use the rescan on fs change feature if [[ ${ENABLE_RESCAN_ON_FILESYSTEM_CHANGE} == "true" ]]; then From f98bbf183ea27a05972cee630565fb36ba121656 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 26 Apr 2024 13:05:51 +0000 Subject: [PATCH 02/50] dont create the file manually --- docker/init_scripts/init | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docker/init_scripts/init b/docker/init_scripts/init index 7233826cc..4130a3977 100755 --- a/docker/init_scripts/init +++ b/docker/init_scripts/init @@ -37,10 +37,6 @@ error_log () { start_bin_gunicorn () { # cleanup potentially leftover socket rm /tmp/gunicorn.sock -f - - # recreate the socket file and ensure it has correct permissions - touch /tmp/gunicorn.sock - chmod 777 /tmp/gunicorn.sock # commands to start our main application and store its PID to check for crashes info_log "starting gunicorn" From 2407e83e1a2bbc612411f44c9b89a09fb86b5e9f Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 26 Apr 2024 13:09:23 +0000 Subject: [PATCH 03/50] only wait when creating nginx --- docker/init_scripts/init | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docker/init_scripts/init b/docker/init_scripts/init index 4130a3977..16053c429 100755 --- a/docker/init_scripts/init +++ b/docker/init_scripts/init @@ -33,6 +33,14 @@ error_log () { exit 1 } +wait_for_gunicorn_socket () { + info_log "waiting for gunicorn socket file..." + while [ ! -S /tmp/gunicorn.sock ]; do + sleep 1 + done + info_log "gunicorn socket file found" +} + # function that runs or main process and creates a corresponding PID file, start_bin_gunicorn () { # cleanup potentially leftover socket @@ -53,6 +61,8 @@ start_bin_gunicorn () { # Commands to start nginx (handling PID creation internally) start_bin_nginx () { + wait_for_gunicorn_socket + info_log "starting nginx" if [ "$EUID" -ne 0 ]; then nginx @@ -64,7 +74,6 @@ start_bin_nginx () { start_bin_redis-server () { info_log "starting redis-server" - # Check if /usr/local/etc/redis/redis.conf exists and use it if so if [ -f /usr/local/etc/redis/redis.conf ]; then redis-server /usr/local/etc/redis/redis.conf & @@ -107,14 +116,6 @@ watchdog_process_pid () { fi } -wait_for_gunicorn_socket () { - info_log "waiting for gunicorn socket file..." - while [ ! -S /tmp/gunicorn.sock ]; do - sleep 1 - done - info_log "gunicorn socket file found" -} - # switch to backend directory cd /backend || { error_log "/backend directory doesn't seem to exist"; } @@ -146,8 +147,7 @@ while true; do # Start uvicorn if we dont have a corresponding PID file watchdog_process_pid bin gunicorn - wait_for_gunicorn_socket - + # Start nginx if we dont have a corresponding PID file watchdog_process_pid bin nginx From a2b369b64abbfba853cbe40f59ef04937af6fc45 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sat, 27 Apr 2024 08:28:02 -0400 Subject: [PATCH 04/50] Comment out the entire romm configuration file --- examples/config.example.yml | 98 +++++++++++++++++++------------------ 1 file changed, 51 insertions(+), 47 deletions(-) diff --git a/examples/config.example.yml b/examples/config.example.yml index e3dcf85d3..426d332c7 100644 --- a/examples/config.example.yml +++ b/examples/config.example.yml @@ -1,52 +1,56 @@ -exclude: - # Exclude platforms to be scanned - platforms: - - 'romm' +# This is an example of a RomM configuration file +# You can copy this file to a folder, rename it to 'config.yml', and mount it as per the example docker-compose.yml +# Uncomment the lines you want to use and modify the values to your needs - # Exclude roms or parts of roms to be scanned - roms: +# exclude: +# # Exclude platforms to be scanned +# platforms: +# - 'romm' - ## Single file games section. - # Will not apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.) - single_file: - # Exclude all files with certain extensions to be scanned - extensions: - - 'xml' - # Exclude matched file names to be scanned - names: - - 'info.txt' - - '._*' # Supports unix filename pattern matching - - '*.nfo' # Can also exclude files by extension +# # Exclude roms or parts of roms to be scanned +# roms: - ## Multi files games section - # Will apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.) - multi_file: - # Exclude matched 'folder' names to be scanned (RomM identifies folders as multi file games) - names: - - 'my_multi_file_game' - - 'DLC' - # Exclude files within sub-folders. - parts: - # Exclude matched file names to be scanned from multi file roms - # Keep in mind that RomM doesn't scan folders inside multi files games, - # so there is no need to exclude folders from inside of multi files games. - names: - - 'data.xml' - - '._*' # Supports unix filename pattern matching - # Exclude all files with certain extensions to be scanned from multi file roms - extensions: - - 'txt' +# ## Single file games section. +# # Will not apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.) +# single_file: +# # Exclude all files with certain extensions to be scanned +# extensions: +# - 'xml' +# # Exclude matched file names to be scanned +# names: +# - 'info.txt' +# - '._*' # Supports unix filename pattern matching +# - '*.nfo' # Can also exclude files by extension -system: - # Asociate different platform names to your current file system platform names - platforms: - # [your custom platform folder name]: [RomM platform name] - gc: 'ngc' # In this example if you have a 'gc' folder, RomM will treat it like the 'ngc' folder - psx: 'ps' # In this example if you have a 'psx' folder, RomM will treat it like the 'ps' folder - # Asociate one platform to it's main version - versions: - naomi: 'arcade' +# ## Multi files games section +# # Will apply to files that are in sub-folders (multi-disc roms, games with updates, DLC, patches, etc.) +# multi_file: +# # Exclude matched 'folder' names to be scanned (RomM identifies folders as multi file games) +# names: +# - 'my_multi_file_game' +# - 'DLC' +# # Exclude files within sub-folders. +# parts: +# # Exclude matched file names to be scanned from multi file roms +# # Keep in mind that RomM doesn't scan folders inside multi files games, +# # so there is no need to exclude folders from inside of multi files games. +# names: +# - 'data.xml' +# - '._*' # Supports unix filename pattern matching +# # Exclude all files with certain extensions to be scanned from multi file roms +# extensions: +# - 'txt' -filesystem: - # The folder name where your roms are located - roms_folder: 'roms' # For example if your folder structure is /home/user/library/roms_folder +# system: +# # Asociate different platform names to your current file system platform names +# platforms: +# # [your custom platform folder name]: [RomM platform name] +# gc: 'ngc' # In this example if you have a 'gc' folder, RomM will treat it like the 'ngc' folder +# psx: 'ps' # In this example if you have a 'psx' folder, RomM will treat it like the 'ps' folder +# # Asociate one platform to it's main version +# versions: +# naomi: 'arcade' + +# filesystem: +# # The folder name where your roms are located +# roms_folder: 'roms' # For example if your folder structure is /home/user/library/roms_folder From f2f2b3b0cdb891f030c205d2cfa4d00e2777cc3b Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sun, 28 Apr 2024 09:10:10 -0400 Subject: [PATCH 05/50] clear leftover pid files --- docker/init_scripts/init | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/init_scripts/init b/docker/init_scripts/init index 4130a3977..2786a8821 100755 --- a/docker/init_scripts/init +++ b/docker/init_scripts/init @@ -120,6 +120,9 @@ cd /backend || { error_log "/backend directory doesn't seem to exist"; } info_log "Starting up, please wait..." +# clear any leftover PID files +rm /tmp/*.pid -f + # function definition done, lets start our main loop while true; do # check for died processes every 5 seconds From 07dc02aa6adf8d732328ca0f132110a9cea2c2cf Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sun, 28 Apr 2024 13:27:00 +0000 Subject: [PATCH 06/50] typo --- docker/init_scripts/init | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/init_scripts/init b/docker/init_scripts/init index cd64d7f79..c30b5d5f2 100755 --- a/docker/init_scripts/init +++ b/docker/init_scripts/init @@ -148,7 +148,7 @@ while true; do debug_log "database schema already upgraded during current container lifecycle" fi - # Start uvicorn if we dont have a corresponding PID file + # Start gunicorn if we dont have a corresponding PID file watchdog_process_pid bin gunicorn # Start nginx if we dont have a corresponding PID file From e176ba27da86a454056537f82a3fdd425c11a13e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 May 2024 10:07:01 +0000 Subject: [PATCH 07/50] Bump ejs from 3.1.9 to 3.1.10 in /frontend Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10. - [Release notes](https://github.com/mde/ejs/releases) - [Commits](https://github.com/mde/ejs/compare/v3.1.9...v3.1.10) --- updated-dependencies: - dependency-name: ejs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- frontend/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e335482fd..0ba008e36 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -3535,9 +3535,9 @@ } }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" From 797fde83ebfd90a5a984f912be3262e00c8c08fc Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Fri, 3 May 2024 17:50:46 -0400 Subject: [PATCH 08/50] Fix serach by ID for mobygames --- backend/handler/metadata_handler/igdb_handler.py | 3 ++- backend/handler/metadata_handler/moby_handler.py | 7 ++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/backend/handler/metadata_handler/igdb_handler.py b/backend/handler/metadata_handler/igdb_handler.py index 917323664..e9d9c940d 100644 --- a/backend/handler/metadata_handler/igdb_handler.py +++ b/backend/handler/metadata_handler/igdb_handler.py @@ -416,7 +416,8 @@ class IGDBHandler(MetadataHandler): if not IGDB_API_ENABLED: return [] - return [self.get_rom_by_id(igdb_id)] + rom = self.get_rom_by_id(igdb_id) + return [rom] if rom["igdb_id"] else [] @check_twitch_token def get_matched_roms_by_name( diff --git a/backend/handler/metadata_handler/moby_handler.py b/backend/handler/metadata_handler/moby_handler.py index bdac7234f..c2cdd3a9d 100644 --- a/backend/handler/metadata_handler/moby_handler.py +++ b/backend/handler/metadata_handler/moby_handler.py @@ -253,14 +253,14 @@ class MobyGamesHandler(MetadataHandler): def get_rom_by_id(self, moby_id: int) -> MobyGamesRom: if not MOBY_API_ENABLED: - return MobyGamesRom(moby_id=moby_id) + return MobyGamesRom(moby_id=None) url = yarl.URL(self.games_url).with_query(id=moby_id) roms = self._request(str(url)).get("games", []) res = pydash.get(roms, "[0]", None) if not res: - return MobyGamesRom(moby_id=moby_id) + return MobyGamesRom(moby_id=None) rom = { "moby_id": res["game_id"], @@ -278,7 +278,8 @@ class MobyGamesHandler(MetadataHandler): if not MOBY_API_ENABLED: return [] - return [self.get_rom_by_id(moby_id)] + rom = self.get_rom_by_id(moby_id) + return [rom] if rom["moby_id"] else [] def get_matched_roms_by_name( self, search_term: str, platform_moby_id: int From 71d387864dbf8b76a06dc70d520dc0c2d65c383d Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sat, 11 May 2024 19:48:11 -0400 Subject: [PATCH 09/50] [ROMM-842] Fix textareas in emujs --- frontend/src/views/Play/Player.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/views/Play/Player.vue b/frontend/src/views/Play/Player.vue index ef520f3a4..d8b86752c 100644 --- a/frontend/src/views/Play/Player.vue +++ b/frontend/src/views/Play/Player.vue @@ -395,6 +395,12 @@ window.EJS_onGameStart = async () => { } + + From ee28b7ee8da56ac85b0ce587c43827e5aa47c493 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 May 2024 05:33:54 +0000 Subject: [PATCH 10/50] --- updated-dependencies: - dependency-name: requests dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- poetry.lock | 10 +++++----- pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index f9238a92e..cfa7b6389 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1807,13 +1807,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "requests" -version = "2.31.0" +version = "2.32.0" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"}, + {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"}, ] [package.dependencies] @@ -2606,4 +2606,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "bebaa2b63ce34b4ff16cb4b66a3dcd5d8fbfb8b04ffbb1059e861f4cfd3a6b0a" +content-hash = "9268652e2fd72f80666fda83cbce9c2478d8618c7f7919b2caedd3f855380505" diff --git a/pyproject.toml b/pyproject.toml index 78a0b3221..304c7ecda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ authors = [ [tool.poetry.dependencies] python = "^3.11" -requests = "2.31.0" +requests = "2.32.0" fastapi = "0.110.0" uvicorn = "0.29.0" gunicorn = "22.0.0" From d1fb294bc81be68e25dd403a8f5adb070a767857 Mon Sep 17 00:00:00 2001 From: zurdi Date: Sat, 25 May 2024 01:40:55 +0200 Subject: [PATCH 11/50] whats new link fixed --- frontend/src/components/Drawer/Footer.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Drawer/Footer.vue b/frontend/src/components/Drawer/Footer.vue index 4f76def5c..ea869c672 100644 --- a/frontend/src/components/Drawer/Footer.vue +++ b/frontend/src/components/Drawer/Footer.vue @@ -119,7 +119,7 @@ async function logout() { >See what's new! From 63e58d3e15218be9ab72138bd6a5839e0dec8718 Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sat, 25 May 2024 18:07:05 -0400 Subject: [PATCH 12/50] [ROMM-867] Only scan platform when selected --- backend/endpoints/sockets/scan.py | 4 +++- backend/handler/scan_handler.py | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/backend/endpoints/sockets/scan.py b/backend/endpoints/sockets/scan.py index 6da90d363..473dd1b4a 100644 --- a/backend/endpoints/sockets/scan.py +++ b/backend/endpoints/sockets/scan.py @@ -99,7 +99,9 @@ async def scan_platforms( if platform and scan_type == ScanType.NEW_PLATFORMS: continue - scanned_platform = scan_platform(platform_slug, fs_platforms) + scanned_platform = scan_platform( + platform_slug, fs_platforms, metadata_sources=metadata_sources + ) if platform: scanned_platform.id = platform.id # Keep the existing ids if they exist on the platform diff --git a/backend/handler/scan_handler.py b/backend/handler/scan_handler.py index a1d058400..0a6eceb40 100644 --- a/backend/handler/scan_handler.py +++ b/backend/handler/scan_handler.py @@ -10,6 +10,8 @@ from handler.filesystem import ( fs_rom_handler, ) from handler.metadata import meta_igdb_handler, meta_moby_handler +from handler.metadata.igdb_handler import IGDBPlatform +from handler.metadata.moby_handler import MobyGamesPlatform from logger.logger import log from models.assets import Save, Screenshot, State from models.platform import Platform @@ -48,6 +50,7 @@ def _get_main_platform_igdb_id(platform: Platform): def scan_platform( fs_slug: str, fs_platforms: list[str], + metadata_sources: list[str] = ["igdb", "moby"], ) -> Platform: """Get platform details @@ -83,8 +86,16 @@ def scan_platform( except (KeyError, TypeError, AttributeError): platform_attrs["slug"] = fs_slug - igdb_platform = meta_igdb_handler.get_platform(platform_attrs["slug"]) - moby_platform = meta_moby_handler.get_platform(platform_attrs["slug"]) + igdb_platform = ( + meta_igdb_handler.get_platform(platform_attrs["slug"]) + if "igdb" in metadata_sources + else IGDBPlatform(igdb_id=None, slug=platform_attrs["slug"]) + ) + moby_platform = ( + meta_moby_handler.get_platform(platform_attrs["slug"]) + if "moby" in metadata_sources + else MobyGamesPlatform(moby_id=None, slug=platform_attrs["slug"]) + ) platform_attrs["name"] = platform_attrs["slug"].replace("-", " ").title() platform_attrs.update({**moby_platform, **igdb_platform}) # Reverse order From 2d21cd2b50c8c3e219a65826ccca88a2a292919f Mon Sep 17 00:00:00 2001 From: Georges-Antoine Assi Date: Sat, 25 May 2024 19:47:36 -0400 Subject: [PATCH 13/50] Improve speeds of rom fetch from DB --- backend/endpoints/responses/assets.py | 1 - backend/endpoints/responses/rom.py | 19 +++--- backend/endpoints/responses/search.py | 1 - backend/endpoints/rom.py | 13 ++-- backend/endpoints/screenshots.py | 1 - backend/endpoints/search.py | 4 +- backend/endpoints/tests/test_rom.py | 7 --- backend/models/rom.py | 15 ++++- frontend/src/__generated__/index.ts | 1 + .../models/AddFirmwareResponse.ts | 1 + .../__generated__/models/AddRomsResponse.ts | 1 + .../models/Body_add_firmware_firmware_post.ts | 1 + .../models/Body_add_roms_roms_post.ts | 1 + .../models/Body_add_saves_saves_post.ts | 1 + .../Body_add_screenshots_screenshots_post.ts | 1 + .../models/Body_add_states_states_post.ts | 1 + .../models/Body_token_token_post.ts | 1 + .../models/Body_update_rom_roms__id__put.ts | 1 + .../models/Body_update_user_users__id__put.ts | 1 + .../__generated__/models/ConfigResponse.ts | 1 + .../models/CursorPage_RomSchema_.ts | 1 + .../__generated__/models/FirmwareSchema.ts | 1 + .../models/HTTPValidationError.ts | 1 + .../__generated__/models/HeartbeatResponse.ts | 1 + .../src/__generated__/models/IGDBPlatform.ts | 1 + .../__generated__/models/IGDBRelatedGame.ts | 1 + .../__generated__/models/MessageResponse.ts | 1 + .../models/MetadataSourcesDict.ts | 1 + .../__generated__/models/MobyGamesPlatform.ts | 1 + .../__generated__/models/PlatformSchema.ts | 5 +- .../__generated__/models/RomIGDBMetadata.ts | 1 + .../__generated__/models/RomMobyMetadata.ts | 1 + .../src/__generated__/models/RomNoteSchema.ts | 3 +- .../src/__generated__/models/RomSchema.ts | 12 +--- .../src/__generated__/models/SaveSchema.ts | 1 + .../src/__generated__/models/SchedulerDict.ts | 1 + .../__generated__/models/ScreenshotSchema.ts | 1 + .../__generated__/models/SearchRomSchema.ts | 2 +- .../src/__generated__/models/StateSchema.ts | 1 + .../src/__generated__/models/StatsReturn.ts | 1 + frontend/src/__generated__/models/TaskDict.ts | 1 + .../__generated__/models/TinfoilFeedSchema.ts | 1 + .../src/__generated__/models/TokenResponse.ts | 1 + .../models/UploadedSavesResponse.ts | 1 + .../models/UploadedScreenshotsResponse.ts | 2 +- .../models/UploadedStatesResponse.ts | 1 + .../src/__generated__/models/UserRomSchema.ts | 59 +++++++++++++++++++ .../src/__generated__/models/UserSchema.ts | 1 + .../__generated__/models/ValidationError.ts | 1 + .../src/__generated__/models/WatcherDict.ts | 1 + .../models/WebrcadeFeedSchema.ts | 1 + frontend/src/components/Details/ActionBar.vue | 6 +- .../components/Details/AdditionalContent.vue | 4 +- .../components/Details/BackgroundHeader.vue | 4 +- frontend/src/components/Details/Dlcs.vue | 4 +- frontend/src/components/Details/Emulation.vue | 4 +- .../src/components/Details/ExpandedGames.vue | 4 +- .../src/components/Details/Expansions.vue | 4 +- frontend/src/components/Details/Info/Base.vue | 4 +- .../src/components/Details/Info/FileInfo.vue | 4 +- .../src/components/Details/Info/GameInfo.vue | 4 +- frontend/src/components/Details/Notes.vue | 4 +- .../src/components/Details/RelatedGames.vue | 4 +- frontend/src/components/Details/Remakes.vue | 4 +- frontend/src/components/Details/Remasters.vue | 4 +- frontend/src/components/Details/Saves.vue | 4 +- .../src/components/Details/Screenshots.vue | 4 +- .../src/components/Details/SourceTable.vue | 4 +- frontend/src/components/Details/States.vue | 4 +- frontend/src/components/Details/Title.vue | 5 +- .../components/Details/VersionSwitcher.vue | 6 +- .../components/Dialog/Asset/DeleteAssets.vue | 4 +- .../src/components/Gallery/AppBar/ScanBtn.vue | 1 - frontend/src/services/api/rom.ts | 9 ++- frontend/src/services/api/save.ts | 4 +- frontend/src/services/api/screenshot.ts | 4 +- frontend/src/services/api/state.ts | 4 +- frontend/src/stores/roms.ts | 8 ++- frontend/src/types/emitter.d.ts | 6 +- frontend/src/views/Details/Base.vue | 4 +- frontend/src/views/Play/Base.vue | 4 +- frontend/src/views/Play/Player.vue | 8 +-- 82 files changed, 203 insertions(+), 119 deletions(-) create mode 100644 frontend/src/__generated__/models/UserRomSchema.ts diff --git a/backend/endpoints/responses/assets.py b/backend/endpoints/responses/assets.py index 10d3796aa..12abc6374 100644 --- a/backend/endpoints/responses/assets.py +++ b/backend/endpoints/responses/assets.py @@ -31,7 +31,6 @@ class ScreenshotSchema(BaseAsset): class UploadedScreenshotsResponse(TypedDict): uploaded: int screenshots: list[ScreenshotSchema] - url_screenshots: list[str] merged_screenshots: list[str] diff --git a/backend/endpoints/responses/rom.py b/backend/endpoints/responses/rom.py index 85c5e64d0..b88c563bf 100644 --- a/backend/endpoints/responses/rom.py +++ b/backend/endpoints/responses/rom.py @@ -93,16 +93,8 @@ class RomSchema(BaseModel): multi: bool files: list[str] - url_screenshots: list[str] - merged_screenshots: list[str] full_path: str - sibling_roms: list["RomSchema"] = Field(default_factory=list) - user_saves: list[SaveSchema] = Field(default_factory=list) - user_states: list[StateSchema] = Field(default_factory=list) - user_screenshots: list[ScreenshotSchema] = Field(default_factory=list) - user_notes: list[RomNoteSchema] = Field(default_factory=list) - class Config: from_attributes = True @@ -119,8 +111,17 @@ class RomSchema(BaseModel): .lower() ) + +class UserRomSchema(RomSchema): + merged_screenshots: list[str] + sibling_roms: list["RomSchema"] = Field(default_factory=list) + user_saves: list[SaveSchema] = Field(default_factory=list) + user_states: list[StateSchema] = Field(default_factory=list) + user_screenshots: list[ScreenshotSchema] = Field(default_factory=list) + user_notes: list[RomNoteSchema] = Field(default_factory=list) + @classmethod - def from_orm_with_request(cls, db_rom: Rom, request: Request) -> "RomSchema": + def from_orm_with_request(cls, db_rom: Rom, request: Request) -> "UserRomSchema": rom = cls.model_validate(db_rom) user_id = request.user.id diff --git a/backend/endpoints/responses/search.py b/backend/endpoints/responses/search.py index fa8c14bb2..4219410da 100644 --- a/backend/endpoints/responses/search.py +++ b/backend/endpoints/responses/search.py @@ -9,4 +9,3 @@ class SearchRomSchema(BaseModel): summary: str igdb_url_cover: str = "" moby_url_cover: str = "" - url_screenshots: list[str] diff --git a/backend/endpoints/rom.py b/backend/endpoints/rom.py index 0438fa503..fbebd83c4 100644 --- a/backend/endpoints/rom.py +++ b/backend/endpoints/rom.py @@ -10,6 +10,7 @@ from endpoints.responses.rom import ( AddRomsResponse, CustomStreamingResponse, RomSchema, + UserRomSchema, RomNoteSchema, ) from exceptions.fs_exceptions import RomAlreadyExistsException @@ -119,7 +120,7 @@ def get_roms( "/roms/{id}", [] if DISABLE_DOWNLOAD_ENDPOINT_AUTH else ["roms.read"], ) -def get_rom(request: Request, id: int) -> RomSchema: +def get_rom(request: Request, id: int) -> UserRomSchema: """Get rom endpoint Args: @@ -127,9 +128,9 @@ def get_rom(request: Request, id: int) -> RomSchema: id (int): Rom internal id Returns: - RomSchema: Rom stored in the database + UserRomSchema: Rom stored in the database """ - return RomSchema.from_orm_with_request(db_rom_handler.get_roms(id), request) + return UserRomSchema.from_orm_with_request(db_rom_handler.get_roms(id), request) @protected_route( @@ -248,7 +249,7 @@ async def update_rom( rename_as_igdb: bool = False, remove_cover: bool = False, artwork: Optional[UploadFile] = File(None), -) -> RomSchema: +) -> UserRomSchema: """Update rom endpoint Args: @@ -261,7 +262,7 @@ async def update_rom( HTTPException: If a rom already have that name when enabling the rename_as_igdb flag Returns: - RomSchema: Rom stored in the database + UserRomSchema: Rom stored in the database """ data = await request.form() @@ -375,7 +376,7 @@ async def update_rom( db_rom_handler.update_rom(id, cleaned_data) - return db_rom_handler.get_roms(id) + return UserRomSchema.from_orm_with_request(db_rom_handler.get_roms(id), request) @protected_route(router.post, "/roms/delete", ["roms.write"]) diff --git a/backend/endpoints/screenshots.py b/backend/endpoints/screenshots.py index 48b8ec110..7c664b272 100644 --- a/backend/endpoints/screenshots.py +++ b/backend/endpoints/screenshots.py @@ -55,6 +55,5 @@ def add_screenshots( return { "uploaded": len(screenshots), "screenshots": [s for s in rom.screenshots if s.user_id == current_user.id], - "url_screenshots": rom.url_screenshots, "merged_screenshots": rom.merged_screenshots, } diff --git a/backend/endpoints/search.py b/backend/endpoints/search.py index e84da4d46..0cf1820d2 100644 --- a/backend/endpoints/search.py +++ b/backend/endpoints/search.py @@ -96,9 +96,7 @@ async def search_rom( "name": "", "summary": "", "igdb_url_cover": "", - "moby_url_cover": "", - "url_screenshots": [], - }, + "moby_url_cover": "", }, **item, } for item in list(merged_dict.values()) diff --git a/backend/endpoints/tests/test_rom.py b/backend/endpoints/tests/test_rom.py index a435d2a9e..afdec9fb7 100644 --- a/backend/endpoints/tests/test_rom.py +++ b/backend/endpoints/tests/test_rom.py @@ -1,4 +1,3 @@ -import json from fastapi.testclient import TestClient from unittest.mock import patch @@ -45,12 +44,6 @@ def test_update_rom(rename_file_mock, get_rom_by_id_mock, access_token, rom): "file_name": "Metroid Prime Remastered.zip", "summary": "summary test", "url_cover": "https://images.igdb.com/igdb/image/upload/t_cover_big/co2l7z.jpg", - "url_screenshots": json.dumps( - [ - "https://images.igdb.com/igdb/image/upload/t_original/qhiqlmwvvuaqxxn4cxlr.jpg", - "https://images.igdb.com/igdb/image/upload/t_original/kqkixazzsokqgoxmuish.jpg", - ] - ), "genres": '[{"id": 5, "name": "Shooter"}, {"id": 8, "name": "Platform"}, {"id": 31, "name": "Adventure"}]', "franchises": '[{"id": 756, "name": "Metroid"}]', "collections": '[{"id": 243, "name": "Metroid"}, {"id": 6240, "name": "Metroid Prime"}]', diff --git a/backend/models/rom.py b/backend/models/rom.py index 987fe94be..76c849446 100644 --- a/backend/models/rom.py +++ b/backend/models/rom.py @@ -17,6 +17,9 @@ from sqlalchemy import ( DateTime, func, UniqueConstraint, + select, + and_, + or_, ) from sqlalchemy.orm import Mapped, relationship @@ -113,9 +116,15 @@ class Rom(BaseModel): with db_rom_handler.session.begin() as session: return session.scalars( - db_rom_handler.get_roms(platform_id=self.platform_id).filter( - Rom.id != self.id, - Rom.igdb_id == self.igdb_id, + select(Rom).where( + and_( + Rom.platform_id == self.platform_id, + Rom.id != self.id, + or_( + and_(Rom.igdb_id == self.igdb_id, Rom.igdb_id != None), # noqa + and_(Rom.moby_id == self.moby_id, Rom.moby_id != None), # noqa + ), + ) ) ).all() diff --git a/frontend/src/__generated__/index.ts b/frontend/src/__generated__/index.ts index e626a56ef..e6bccca7a 100644 --- a/frontend/src/__generated__/index.ts +++ b/frontend/src/__generated__/index.ts @@ -41,6 +41,7 @@ export type { TokenResponse } from './models/TokenResponse'; export type { UploadedSavesResponse } from './models/UploadedSavesResponse'; export type { UploadedScreenshotsResponse } from './models/UploadedScreenshotsResponse'; export type { UploadedStatesResponse } from './models/UploadedStatesResponse'; +export type { UserRomSchema } from './models/UserRomSchema'; export type { UserSchema } from './models/UserSchema'; export type { ValidationError } from './models/ValidationError'; export type { WatcherDict } from './models/WatcherDict'; diff --git a/frontend/src/__generated__/models/AddFirmwareResponse.ts b/frontend/src/__generated__/models/AddFirmwareResponse.ts index e317582e9..e90e01575 100644 --- a/frontend/src/__generated__/models/AddFirmwareResponse.ts +++ b/frontend/src/__generated__/models/AddFirmwareResponse.ts @@ -9,3 +9,4 @@ export type AddFirmwareResponse = { uploaded: number; firmware: Array; }; + diff --git a/frontend/src/__generated__/models/AddRomsResponse.ts b/frontend/src/__generated__/models/AddRomsResponse.ts index 57b273be6..4c26473e1 100644 --- a/frontend/src/__generated__/models/AddRomsResponse.ts +++ b/frontend/src/__generated__/models/AddRomsResponse.ts @@ -7,3 +7,4 @@ export type AddRomsResponse = { uploaded_roms: Array; skipped_roms: Array; }; + diff --git a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts index 45e7fe1bc..4af6a8ffa 100644 --- a/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts +++ b/frontend/src/__generated__/models/Body_add_firmware_firmware_post.ts @@ -6,3 +6,4 @@ export type Body_add_firmware_firmware_post = { files: Array; }; + diff --git a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts index 16bf202bb..6a13ed898 100644 --- a/frontend/src/__generated__/models/Body_add_roms_roms_post.ts +++ b/frontend/src/__generated__/models/Body_add_roms_roms_post.ts @@ -6,3 +6,4 @@ export type Body_add_roms_roms_post = { roms: Array; }; + diff --git a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts index 3ebf79627..0c7c014dc 100644 --- a/frontend/src/__generated__/models/Body_add_saves_saves_post.ts +++ b/frontend/src/__generated__/models/Body_add_saves_saves_post.ts @@ -6,3 +6,4 @@ export type Body_add_saves_saves_post = { saves: Array; }; + diff --git a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts index 33ee34110..b9e7f716b 100644 --- a/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts +++ b/frontend/src/__generated__/models/Body_add_screenshots_screenshots_post.ts @@ -6,3 +6,4 @@ export type Body_add_screenshots_screenshots_post = { screenshots: Array; }; + diff --git a/frontend/src/__generated__/models/Body_add_states_states_post.ts b/frontend/src/__generated__/models/Body_add_states_states_post.ts index 87e93dc84..8744695bf 100644 --- a/frontend/src/__generated__/models/Body_add_states_states_post.ts +++ b/frontend/src/__generated__/models/Body_add_states_states_post.ts @@ -6,3 +6,4 @@ export type Body_add_states_states_post = { states: Array; }; + diff --git a/frontend/src/__generated__/models/Body_token_token_post.ts b/frontend/src/__generated__/models/Body_token_token_post.ts index 77d999eb1..8577ca82e 100644 --- a/frontend/src/__generated__/models/Body_token_token_post.ts +++ b/frontend/src/__generated__/models/Body_token_token_post.ts @@ -12,3 +12,4 @@ export type Body_token_token_post = { client_secret?: (string | null); refresh_token?: (string | null); }; + diff --git a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts index 5a6024ae0..7e599f198 100644 --- a/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_rom_roms__id__put.ts @@ -6,3 +6,4 @@ export type Body_update_rom_roms__id__put = { artwork?: (Blob | null); }; + diff --git a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts index dacef0b67..c3bef3f22 100644 --- a/frontend/src/__generated__/models/Body_update_user_users__id__put.ts +++ b/frontend/src/__generated__/models/Body_update_user_users__id__put.ts @@ -6,3 +6,4 @@ export type Body_update_user_users__id__put = { avatar?: (Blob | null); }; + diff --git a/frontend/src/__generated__/models/ConfigResponse.ts b/frontend/src/__generated__/models/ConfigResponse.ts index 26e7cac33..71f01543b 100644 --- a/frontend/src/__generated__/models/ConfigResponse.ts +++ b/frontend/src/__generated__/models/ConfigResponse.ts @@ -16,3 +16,4 @@ export type ConfigResponse = { FIRMWARE_FOLDER_NAME: string; HIGH_PRIO_STRUCTURE_PATH: string; }; + diff --git a/frontend/src/__generated__/models/CursorPage_RomSchema_.ts b/frontend/src/__generated__/models/CursorPage_RomSchema_.ts index cb7cd8a6f..3a95eeb11 100644 --- a/frontend/src/__generated__/models/CursorPage_RomSchema_.ts +++ b/frontend/src/__generated__/models/CursorPage_RomSchema_.ts @@ -28,3 +28,4 @@ export type CursorPage_RomSchema_ = { */ next_page?: (string | null); }; + diff --git a/frontend/src/__generated__/models/FirmwareSchema.ts b/frontend/src/__generated__/models/FirmwareSchema.ts index 69d499224..0ba2f0ec1 100644 --- a/frontend/src/__generated__/models/FirmwareSchema.ts +++ b/frontend/src/__generated__/models/FirmwareSchema.ts @@ -17,3 +17,4 @@ export type FirmwareSchema = { md5_hash: string; sha1_hash: string; }; + diff --git a/frontend/src/__generated__/models/HTTPValidationError.ts b/frontend/src/__generated__/models/HTTPValidationError.ts index e218a9f34..c0bcc87cf 100644 --- a/frontend/src/__generated__/models/HTTPValidationError.ts +++ b/frontend/src/__generated__/models/HTTPValidationError.ts @@ -8,3 +8,4 @@ import type { ValidationError } from './ValidationError'; export type HTTPValidationError = { detail?: Array; }; + diff --git a/frontend/src/__generated__/models/HeartbeatResponse.ts b/frontend/src/__generated__/models/HeartbeatResponse.ts index a7b4a8e65..2c3296db2 100644 --- a/frontend/src/__generated__/models/HeartbeatResponse.ts +++ b/frontend/src/__generated__/models/HeartbeatResponse.ts @@ -14,3 +14,4 @@ export type HeartbeatResponse = { ANY_SOURCE_ENABLED: boolean; METADATA_SOURCES: MetadataSourcesDict; }; + diff --git a/frontend/src/__generated__/models/IGDBPlatform.ts b/frontend/src/__generated__/models/IGDBPlatform.ts index 91c995e63..ffcb57898 100644 --- a/frontend/src/__generated__/models/IGDBPlatform.ts +++ b/frontend/src/__generated__/models/IGDBPlatform.ts @@ -7,3 +7,4 @@ export type IGDBPlatform = { igdb_id: number; name?: string; }; + diff --git a/frontend/src/__generated__/models/IGDBRelatedGame.ts b/frontend/src/__generated__/models/IGDBRelatedGame.ts index 4196ff4d3..279c4048d 100644 --- a/frontend/src/__generated__/models/IGDBRelatedGame.ts +++ b/frontend/src/__generated__/models/IGDBRelatedGame.ts @@ -10,3 +10,4 @@ export type IGDBRelatedGame = { type: string; cover_url: string; }; + diff --git a/frontend/src/__generated__/models/MessageResponse.ts b/frontend/src/__generated__/models/MessageResponse.ts index 6e578c999..27036a4a1 100644 --- a/frontend/src/__generated__/models/MessageResponse.ts +++ b/frontend/src/__generated__/models/MessageResponse.ts @@ -6,3 +6,4 @@ export type MessageResponse = { msg: string; }; + diff --git a/frontend/src/__generated__/models/MetadataSourcesDict.ts b/frontend/src/__generated__/models/MetadataSourcesDict.ts index 94791d9f6..14c11e26c 100644 --- a/frontend/src/__generated__/models/MetadataSourcesDict.ts +++ b/frontend/src/__generated__/models/MetadataSourcesDict.ts @@ -7,3 +7,4 @@ export type MetadataSourcesDict = { IGDB_API_ENABLED: boolean; MOBY_API_ENABLED: boolean; }; + diff --git a/frontend/src/__generated__/models/MobyGamesPlatform.ts b/frontend/src/__generated__/models/MobyGamesPlatform.ts index 9d3e57763..3a9e84b99 100644 --- a/frontend/src/__generated__/models/MobyGamesPlatform.ts +++ b/frontend/src/__generated__/models/MobyGamesPlatform.ts @@ -7,3 +7,4 @@ export type MobyGamesPlatform = { moby_id: number; name?: string; }; + diff --git a/frontend/src/__generated__/models/PlatformSchema.ts b/frontend/src/__generated__/models/PlatformSchema.ts index 89098c2aa..a2cff2132 100644 --- a/frontend/src/__generated__/models/PlatformSchema.ts +++ b/frontend/src/__generated__/models/PlatformSchema.ts @@ -9,11 +9,12 @@ export type PlatformSchema = { id: number; slug: string; fs_slug: string; + name: string; + rom_count: number; igdb_id?: (number | null); sgdb_id?: (number | null); moby_id?: (number | null); - name: string; logo_path?: (string | null); - rom_count: number; firmware?: Array; }; + diff --git a/frontend/src/__generated__/models/RomIGDBMetadata.ts b/frontend/src/__generated__/models/RomIGDBMetadata.ts index 06123aa5f..09321f978 100644 --- a/frontend/src/__generated__/models/RomIGDBMetadata.ts +++ b/frontend/src/__generated__/models/RomIGDBMetadata.ts @@ -25,3 +25,4 @@ export type RomIGDBMetadata = { ports?: Array; similar_games?: Array; }; + diff --git a/frontend/src/__generated__/models/RomMobyMetadata.ts b/frontend/src/__generated__/models/RomMobyMetadata.ts index a5c735ac6..9f868b6cf 100644 --- a/frontend/src/__generated__/models/RomMobyMetadata.ts +++ b/frontend/src/__generated__/models/RomMobyMetadata.ts @@ -11,3 +11,4 @@ export type RomMobyMetadata = { alternate_titles?: Array; platforms?: Array; }; + diff --git a/frontend/src/__generated__/models/RomNoteSchema.ts b/frontend/src/__generated__/models/RomNoteSchema.ts index a923195c2..e78f896f5 100644 --- a/frontend/src/__generated__/models/RomNoteSchema.ts +++ b/frontend/src/__generated__/models/RomNoteSchema.ts @@ -10,5 +10,6 @@ export type RomNoteSchema = { last_edited_at: string; raw_markdown: string; is_public: boolean; - readonly user__username: string; + user__username: string; }; + diff --git a/frontend/src/__generated__/models/RomSchema.ts b/frontend/src/__generated__/models/RomSchema.ts index 94b781dc7..3974e2215 100644 --- a/frontend/src/__generated__/models/RomSchema.ts +++ b/frontend/src/__generated__/models/RomSchema.ts @@ -5,10 +5,6 @@ import type { RomIGDBMetadata } from './RomIGDBMetadata'; import type { RomMobyMetadata } from './RomMobyMetadata'; -import type { RomNoteSchema } from './RomNoteSchema'; -import type { SaveSchema } from './SaveSchema'; -import type { ScreenshotSchema } from './ScreenshotSchema'; -import type { StateSchema } from './StateSchema'; export type RomSchema = { id: number; @@ -46,13 +42,7 @@ export type RomSchema = { tags: Array; multi: boolean; files: Array; - url_screenshots: Array; - merged_screenshots: Array; full_path: string; - sibling_roms?: Array; - user_saves?: Array; - user_states?: Array; - user_screenshots?: Array; - user_notes?: Array; readonly sort_comparator: string; }; + diff --git a/frontend/src/__generated__/models/SaveSchema.ts b/frontend/src/__generated__/models/SaveSchema.ts index 93cdd68cd..b58539d94 100644 --- a/frontend/src/__generated__/models/SaveSchema.ts +++ b/frontend/src/__generated__/models/SaveSchema.ts @@ -22,3 +22,4 @@ export type SaveSchema = { emulator: (string | null); screenshot: (ScreenshotSchema | null); }; + diff --git a/frontend/src/__generated__/models/SchedulerDict.ts b/frontend/src/__generated__/models/SchedulerDict.ts index 10402e79b..d48121734 100644 --- a/frontend/src/__generated__/models/SchedulerDict.ts +++ b/frontend/src/__generated__/models/SchedulerDict.ts @@ -9,3 +9,4 @@ export type SchedulerDict = { RESCAN: TaskDict; SWITCH_TITLEDB: TaskDict; }; + diff --git a/frontend/src/__generated__/models/ScreenshotSchema.ts b/frontend/src/__generated__/models/ScreenshotSchema.ts index 87efd1d5c..3b22e2cbe 100644 --- a/frontend/src/__generated__/models/ScreenshotSchema.ts +++ b/frontend/src/__generated__/models/ScreenshotSchema.ts @@ -18,3 +18,4 @@ export type ScreenshotSchema = { created_at: string; updated_at: string; }; + diff --git a/frontend/src/__generated__/models/SearchRomSchema.ts b/frontend/src/__generated__/models/SearchRomSchema.ts index 46abe8a06..8b5a102a3 100644 --- a/frontend/src/__generated__/models/SearchRomSchema.ts +++ b/frontend/src/__generated__/models/SearchRomSchema.ts @@ -11,5 +11,5 @@ export type SearchRomSchema = { summary: string; igdb_url_cover?: string; moby_url_cover?: string; - url_screenshots: Array; }; + diff --git a/frontend/src/__generated__/models/StateSchema.ts b/frontend/src/__generated__/models/StateSchema.ts index db6c8d4d7..f26ad095c 100644 --- a/frontend/src/__generated__/models/StateSchema.ts +++ b/frontend/src/__generated__/models/StateSchema.ts @@ -22,3 +22,4 @@ export type StateSchema = { emulator: (string | null); screenshot: (ScreenshotSchema | null); }; + diff --git a/frontend/src/__generated__/models/StatsReturn.ts b/frontend/src/__generated__/models/StatsReturn.ts index db57fa774..5ef1e66b5 100644 --- a/frontend/src/__generated__/models/StatsReturn.ts +++ b/frontend/src/__generated__/models/StatsReturn.ts @@ -11,3 +11,4 @@ export type StatsReturn = { SCREENSHOTS: number; FILESIZE: number; }; + diff --git a/frontend/src/__generated__/models/TaskDict.ts b/frontend/src/__generated__/models/TaskDict.ts index a41fd96b9..6e5815bc2 100644 --- a/frontend/src/__generated__/models/TaskDict.ts +++ b/frontend/src/__generated__/models/TaskDict.ts @@ -9,3 +9,4 @@ export type TaskDict = { MESSAGE: string; CRON: string; }; + diff --git a/frontend/src/__generated__/models/TinfoilFeedSchema.ts b/frontend/src/__generated__/models/TinfoilFeedSchema.ts index 8767c55d2..905a6cc0f 100644 --- a/frontend/src/__generated__/models/TinfoilFeedSchema.ts +++ b/frontend/src/__generated__/models/TinfoilFeedSchema.ts @@ -8,3 +8,4 @@ export type TinfoilFeedSchema = { directories: Array; success: string; }; + diff --git a/frontend/src/__generated__/models/TokenResponse.ts b/frontend/src/__generated__/models/TokenResponse.ts index 0d1ff5cfd..d77287bf8 100644 --- a/frontend/src/__generated__/models/TokenResponse.ts +++ b/frontend/src/__generated__/models/TokenResponse.ts @@ -9,3 +9,4 @@ export type TokenResponse = { token_type: string; expires: number; }; + diff --git a/frontend/src/__generated__/models/UploadedSavesResponse.ts b/frontend/src/__generated__/models/UploadedSavesResponse.ts index 4b11ce5cd..c445bc061 100644 --- a/frontend/src/__generated__/models/UploadedSavesResponse.ts +++ b/frontend/src/__generated__/models/UploadedSavesResponse.ts @@ -9,3 +9,4 @@ export type UploadedSavesResponse = { uploaded: number; saves: Array; }; + diff --git a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts index ba5c9df32..2f23d0992 100644 --- a/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts +++ b/frontend/src/__generated__/models/UploadedScreenshotsResponse.ts @@ -8,6 +8,6 @@ import type { ScreenshotSchema } from './ScreenshotSchema'; export type UploadedScreenshotsResponse = { uploaded: number; screenshots: Array; - url_screenshots: Array; merged_screenshots: Array; }; + diff --git a/frontend/src/__generated__/models/UploadedStatesResponse.ts b/frontend/src/__generated__/models/UploadedStatesResponse.ts index 21855e274..135d82c7c 100644 --- a/frontend/src/__generated__/models/UploadedStatesResponse.ts +++ b/frontend/src/__generated__/models/UploadedStatesResponse.ts @@ -9,3 +9,4 @@ export type UploadedStatesResponse = { uploaded: number; states: Array; }; + diff --git a/frontend/src/__generated__/models/UserRomSchema.ts b/frontend/src/__generated__/models/UserRomSchema.ts new file mode 100644 index 000000000..b56cb5d86 --- /dev/null +++ b/frontend/src/__generated__/models/UserRomSchema.ts @@ -0,0 +1,59 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ + +import type { RomIGDBMetadata } from './RomIGDBMetadata'; +import type { RomMobyMetadata } from './RomMobyMetadata'; +import type { RomNoteSchema } from './RomNoteSchema'; +import type { RomSchema } from './RomSchema'; +import type { SaveSchema } from './SaveSchema'; +import type { ScreenshotSchema } from './ScreenshotSchema'; +import type { StateSchema } from './StateSchema'; + +export type UserRomSchema = { + id: number; + igdb_id: (number | null); + sgdb_id: (number | null); + moby_id: (number | null); + platform_id: number; + platform_slug: string; + platform_name: string; + file_name: string; + file_name_no_tags: string; + file_name_no_ext: string; + file_extension: string; + file_path: string; + file_size_bytes: number; + name: (string | null); + slug: (string | null); + summary: (string | null); + first_release_date: (number | null); + alternative_names: Array; + genres: Array; + franchises: Array; + collections: Array; + companies: Array; + game_modes: Array; + igdb_metadata: (RomIGDBMetadata | null); + moby_metadata: (RomMobyMetadata | null); + path_cover_s: (string | null); + path_cover_l: (string | null); + has_cover: boolean; + url_cover: (string | null); + revision: (string | null); + regions: Array; + languages: Array; + tags: Array; + multi: boolean; + files: Array; + full_path: string; + merged_screenshots: Array; + sibling_roms?: Array; + user_saves?: Array; + user_states?: Array; + user_screenshots?: Array; + user_notes?: Array; + readonly sort_comparator: string; +}; + diff --git a/frontend/src/__generated__/models/UserSchema.ts b/frontend/src/__generated__/models/UserSchema.ts index c719c6d7e..8542f19f5 100644 --- a/frontend/src/__generated__/models/UserSchema.ts +++ b/frontend/src/__generated__/models/UserSchema.ts @@ -15,3 +15,4 @@ export type UserSchema = { last_login: (string | null); last_active: (string | null); }; + diff --git a/frontend/src/__generated__/models/ValidationError.ts b/frontend/src/__generated__/models/ValidationError.ts index 0a3e90e98..18997ec72 100644 --- a/frontend/src/__generated__/models/ValidationError.ts +++ b/frontend/src/__generated__/models/ValidationError.ts @@ -8,3 +8,4 @@ export type ValidationError = { msg: string; type: string; }; + diff --git a/frontend/src/__generated__/models/WatcherDict.ts b/frontend/src/__generated__/models/WatcherDict.ts index 77393ee8e..30faf38a1 100644 --- a/frontend/src/__generated__/models/WatcherDict.ts +++ b/frontend/src/__generated__/models/WatcherDict.ts @@ -8,3 +8,4 @@ export type WatcherDict = { TITLE: string; MESSAGE: string; }; + diff --git a/frontend/src/__generated__/models/WebrcadeFeedSchema.ts b/frontend/src/__generated__/models/WebrcadeFeedSchema.ts index 051d0d573..517390f55 100644 --- a/frontend/src/__generated__/models/WebrcadeFeedSchema.ts +++ b/frontend/src/__generated__/models/WebrcadeFeedSchema.ts @@ -11,3 +11,4 @@ export type WebrcadeFeedSchema = { background: string; categories: Array>; }; + diff --git a/frontend/src/components/Details/ActionBar.vue b/frontend/src/components/Details/ActionBar.vue index 161f72f75..317c1eb3b 100644 --- a/frontend/src/components/Details/ActionBar.vue +++ b/frontend/src/components/Details/ActionBar.vue @@ -3,13 +3,13 @@ import AdminMenu from "@/components/Game/AdminMenu/Base.vue"; import romApi from "@/services/api/rom"; import storeAuth from "@/stores/auth"; import storeDownload from "@/stores/download"; -import type { Rom } from "@/stores/roms"; +import type { UserRom } from "@/stores/roms"; import type { Events } from "@/types/emitter"; import { getDownloadLink, platformSlugEJSCoreMap } from "@/utils"; import type { Emitter } from "mitt"; import { inject, ref } from "vue"; -const props = defineProps<{ rom: Rom }>(); +const props = defineProps<{ rom: UserRom }>(); const downloadStore = storeDownload(); const emitter = inject>("emitter"); const auth = storeAuth(); @@ -24,7 +24,7 @@ function toggleEmulation() { emitter?.emit("showEmulation", null); } -async function copyDownloadLink(rom: Rom) { +async function copyDownloadLink(rom: UserRom) { const downloadLink = location.protocol + "//" + diff --git a/frontend/src/components/Details/AdditionalContent.vue b/frontend/src/components/Details/AdditionalContent.vue index 249529a83..ebc7c6459 100644 --- a/frontend/src/components/Details/AdditionalContent.vue +++ b/frontend/src/components/Details/AdditionalContent.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/components/Details/BackgroundHeader.vue b/frontend/src/components/Details/BackgroundHeader.vue index 03da20de6..9589af620 100644 --- a/frontend/src/components/Details/BackgroundHeader.vue +++ b/frontend/src/components/Details/BackgroundHeader.vue @@ -1,9 +1,9 @@