Merge pull request #1873 from saminitz/feature-update-screenshot-of-saves

Update screenshots of saves when saving
This commit is contained in:
Georges-Antoine Assi
2025-05-04 21:06:52 -04:00
committed by GitHub
5 changed files with 73 additions and 3 deletions

View File

@@ -95,9 +95,7 @@ async def add_save(
else:
scanned_screenshot.rom_id = rom.id
scanned_screenshot.user_id = request.user.id
db_screenshot = db_screenshot_handler.add_screenshot(
screenshot=scanned_screenshot
)
db_screenshot_handler.add_screenshot(screenshot=scanned_screenshot)
# Set the last played time for the current user
rom_user = db_rom_handler.get_rom_user(rom_id=rom.id, user_id=request.user.id)
@@ -155,6 +153,35 @@ async def update_save(request: Request, id: int) -> SaveSchema:
db_save.id, {"file_size_bytes": saveFile.size}
)
screenshotFile: UploadFile | None = data.get("screenshotFile", None) # type: ignore
if screenshotFile and screenshotFile.filename:
screenshots_path = fs_asset_handler.build_screenshots_file_path(
user=request.user, platform_fs_slug=db_save.rom.platform_slug
)
fs_asset_handler.write_file(file=screenshotFile, path=screenshots_path)
# Scan or update screenshot
scanned_screenshot = scan_screenshot(
file_name=screenshotFile.filename,
user=request.user,
platform_fs_slug=db_save.rom.platform_slug,
)
db_screenshot = db_screenshot_handler.get_screenshot_by_filename(
rom_id=db_save.rom.id,
user_id=request.user.id,
file_name=screenshotFile.filename,
)
if db_screenshot:
db_screenshot = db_screenshot_handler.update_screenshot(
db_screenshot.id,
{"file_size_bytes": scanned_screenshot.file_size_bytes},
)
else:
scanned_screenshot.rom_id = db_save.rom.id
scanned_screenshot.user_id = request.user.id
db_screenshot_handler.add_screenshot(screenshot=scanned_screenshot)
# Set the last played time for the current user
rom_user = db_rom_handler.get_rom_user(db_save.rom_id, request.user.id)
if not rom_user:

View File

@@ -155,6 +155,37 @@ async def update_state(request: Request, id: int) -> StateSchema:
db_state.id, {"file_size_bytes": stateFile.size}
)
screenshotFile: UploadFile | None = data.get("screenshotFile", None) # type: ignore
if screenshotFile and screenshotFile.filename:
screenshots_path = fs_asset_handler.build_screenshots_file_path(
user=request.user, platform_fs_slug=db_state.rom.platform_slug
)
fs_asset_handler.write_file(file=screenshotFile, path=screenshots_path)
# Scan or update screenshot
scanned_screenshot = scan_screenshot(
file_name=screenshotFile.filename,
user=request.user,
platform_fs_slug=db_state.rom.platform_slug,
)
db_screenshot = db_screenshot_handler.get_screenshot_by_filename(
rom_id=db_state.rom.id,
user_id=request.user.id,
file_name=screenshotFile.filename,
)
if db_screenshot:
db_screenshot = db_screenshot_handler.update_screenshot(
db_screenshot.id,
{"file_size_bytes": scanned_screenshot.file_size_bytes},
)
else:
scanned_screenshot.rom_id = db_state.rom.id
scanned_screenshot.user_id = request.user.id
db_screenshot = db_screenshot_handler.add_screenshot(
screenshot=scanned_screenshot
)
# Set the last played time for the current user
rom_user = db_rom_handler.get_rom_user(db_state.rom_id, request.user.id)
if not rom_user:

View File

@@ -44,12 +44,15 @@ async function uploadSaves({
async function updateSave({
save,
saveFile,
screenshotFile,
}: {
save: SaveSchema;
saveFile: File;
screenshotFile?: File;
}): Promise<{ data: SaveSchema }> {
const formData = new FormData();
formData.append("saveFile", saveFile);
if (screenshotFile) formData.append("screenshotFile", screenshotFile);
return api.put(`/saves/${save.id}`, formData);
}

View File

@@ -44,12 +44,15 @@ async function uploadStates({
async function updateState({
state,
stateFile,
screenshotFile,
}: {
state: StateSchema;
stateFile: File;
screenshotFile?: File;
}): Promise<{ data: StateSchema }> {
const formData = new FormData();
formData.append("stateFile", stateFile);
if (screenshotFile) formData.append("screenshotFile", screenshotFile);
return api.put(`/states/${state.id}`, formData);
}

View File

@@ -72,6 +72,12 @@ export async function saveSave({
saveFile: new File([saveFile], save.file_name, {
type: "application/octet-stream",
}),
screenshotFile:
screenshotFile && save.screenshot
? new File([screenshotFile], save.screenshot.file_name, {
type: "application/octet-stream",
})
: undefined,
});
// Update the save in the rom object