loosen rules around fetch matching screenshots

This commit is contained in:
Georges-Antoine Assi
2026-02-19 10:18:56 -05:00
parent d80ac3ea77
commit 6461078721
7 changed files with 42 additions and 40 deletions

View File

@@ -265,7 +265,7 @@ async def add_save(
rom_id=rom.id,
)
db_screenshot = db_screenshot_handler.get_screenshot(
filename=screenshotFile.filename,
file_name=screenshotFile.filename,
rom_id=rom.id,
user_id=request.user.id,
)
@@ -481,7 +481,7 @@ async def update_save(request: Request, id: int) -> SaveSchema:
rom_id=db_save.rom.id,
)
db_screenshot = db_screenshot_handler.get_screenshot(
filename=screenshotFile.filename,
file_name=screenshotFile.filename,
rom_id=db_save.rom.id,
user_id=request.user.id,
)

View File

@@ -67,7 +67,7 @@ async def add_screenshot(
rom_id=rom.id,
)
db_screenshot = db_screenshot_handler.get_screenshot(
filename=screenshotFile.filename,
file_name=screenshotFile.filename,
rom_id=rom.id,
user_id=current_user.id,
)

View File

@@ -111,7 +111,7 @@ async def add_state(
rom_id=rom.id,
)
db_screenshot = db_screenshot_handler.get_screenshot(
filename=screenshotFile.filename,
file_name=screenshotFile.filename,
rom_id=rom.id,
user_id=request.user.id,
)
@@ -221,7 +221,7 @@ async def update_state(request: Request, id: int) -> StateSchema:
rom_id=db_state.rom.id,
)
db_screenshot = db_screenshot_handler.get_screenshot(
filename=screenshotFile.filename,
file_name=screenshotFile.filename,
rom_id=db_state.rom.id,
user_id=request.user.id,
)

View File

@@ -1,7 +1,8 @@
from collections.abc import Sequence
from functools import partial
from sqlalchemy import delete, select, update
import pydash
from sqlalchemy import delete, or_, select, update
from sqlalchemy.orm import Session
from sqlalchemy.sql import Delete, Select, Update
@@ -16,27 +17,32 @@ class DBScreenshotsHandler(DBBaseHandler):
self,
query: QueryT,
*,
rom_id: int,
user_id: int,
filenames: Sequence[str] = (),
filenames_no_ext: Sequence[str] = (),
rom_ids: Sequence[int] = (),
user_ids: Sequence[int] = (),
exclude_filenames: Sequence[str] = (),
exclude_filenames_no_ext: Sequence[str] = (),
) -> QueryT:
query = query.filter(
Screenshot.rom_id == rom_id,
Screenshot.user_id == user_id,
)
if filenames:
query = query.filter(Screenshot.file_name.in_(filenames))
if filenames_no_ext:
query = query.filter(Screenshot.file_name_no_ext.in_(filenames_no_ext))
if rom_ids:
query = query.filter(Screenshot.rom_id.in_(rom_ids))
if user_ids:
query = query.filter(Screenshot.user_id.in_(user_ids))
if exclude_filenames:
query = query.filter(Screenshot.file_name.not_in(exclude_filenames))
if exclude_filenames_no_ext:
query = query.filter(
Screenshot.file_name_no_ext.not_in(exclude_filenames_no_ext)
or_(
Screenshot.file_name.in_(filenames),
Screenshot.file_name_no_ext.in_(filenames),
)
)
if exclude_filenames:
query = query.filter(
or_(
Screenshot.file_name.not_in(filenames),
Screenshot.file_name_no_ext.not_in(filenames),
)
)
return query
@begin_session
@@ -51,18 +57,17 @@ class DBScreenshotsHandler(DBBaseHandler):
def get_screenshot(
self,
*,
filename: str | None = None,
filename_no_ext: str | None = None,
rom_id: int | None = None,
user_id: int | None = None,
rom_id: int,
user_id: int,
file_name: str,
file_name_no_ext: str | None = None,
session: Session = None, # type: ignore
) -> Screenshot | None:
query = self.filter(
select(Screenshot),
filenames=[filename] if filename is not None else (),
filenames_no_ext=[filename_no_ext] if filename_no_ext is not None else (),
rom_ids=[rom_id] if rom_id is not None else (),
user_ids=[user_id] if user_id is not None else (),
rom_id=rom_id,
user_id=user_id,
filenames=pydash.compact([file_name, file_name_no_ext]),
)
return session.scalars(query.limit(1)).first()
@@ -111,8 +116,8 @@ class DBScreenshotsHandler(DBBaseHandler):
) -> Sequence[Screenshot]:
query_fn = partial(
self.filter,
rom_ids=[rom_id],
user_ids=[user_id],
rom_id=rom_id,
user_id=user_id,
exclude_filenames=screenshots_to_keep,
)

View File

@@ -79,9 +79,10 @@ class Save(RomAsset):
from handler.database import db_screenshot_handler
return db_screenshot_handler.get_screenshot(
filename_no_ext=self.file_name, # Match state filename against screenshot filename stem
rom_id=self.rom_id,
user_id=self.user_id,
file_name=self.file_name, # Match state filename against screenshot filename stem
file_name_no_ext=self.file_name_no_ext,
)
@@ -99,7 +100,8 @@ class State(RomAsset):
from handler.database import db_screenshot_handler
return db_screenshot_handler.get_screenshot(
filename_no_ext=self.file_name, # Match state filename against screenshot filename stem
rom_id=self.rom_id,
user_id=self.user_id,
file_name=self.file_name, # Match state filename against screenshot filename stem
file_name_no_ext=self.file_name_no_ext,
)

View File

@@ -84,12 +84,7 @@ function handleDelete(event: Event) {
@click="handleClick"
>
<v-card-text class="pa-2">
<!-- Screenshot for states -->
<v-row
v-if="type === 'state' && isState(asset)"
no-gutters
class="bg-surface"
>
<v-row v-if="asset.screenshot" no-gutters class="bg-surface">
<v-col cols="12">
<v-img
rounded

View File

@@ -36,7 +36,7 @@ onMounted(async () => {
romId.value = response.data.id;
})
.catch((error) => {
console.error("Error fetching ROM by metadata provider:", error);
console.warn("Error fetching ROM by metadata provider:", error);
// Keep romId.value as null to fall back to IGDB link
});
});