Skip to content

Commit 385ee80

Browse files
authored
Merge pull request #1873 from saminitz/feature-update-screenshot-of-saves
Update screenshots of saves when saving
2 parents 240a1df + d087266 commit 385ee80

File tree

5 files changed

+73
-3
lines changed

5 files changed

+73
-3
lines changed

backend/endpoints/saves.py

+30-3
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,7 @@ async def add_save(
9595
else:
9696
scanned_screenshot.rom_id = rom.id
9797
scanned_screenshot.user_id = request.user.id
98-
db_screenshot = db_screenshot_handler.add_screenshot(
99-
screenshot=scanned_screenshot
100-
)
98+
db_screenshot_handler.add_screenshot(screenshot=scanned_screenshot)
10199

102100
# Set the last played time for the current user
103101
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:
155153
db_save.id, {"file_size_bytes": saveFile.size}
156154
)
157155

156+
screenshotFile: UploadFile | None = data.get("screenshotFile", None) # type: ignore
157+
if screenshotFile and screenshotFile.filename:
158+
screenshots_path = fs_asset_handler.build_screenshots_file_path(
159+
user=request.user, platform_fs_slug=db_save.rom.platform_slug
160+
)
161+
162+
fs_asset_handler.write_file(file=screenshotFile, path=screenshots_path)
163+
164+
# Scan or update screenshot
165+
scanned_screenshot = scan_screenshot(
166+
file_name=screenshotFile.filename,
167+
user=request.user,
168+
platform_fs_slug=db_save.rom.platform_slug,
169+
)
170+
db_screenshot = db_screenshot_handler.get_screenshot_by_filename(
171+
rom_id=db_save.rom.id,
172+
user_id=request.user.id,
173+
file_name=screenshotFile.filename,
174+
)
175+
if db_screenshot:
176+
db_screenshot = db_screenshot_handler.update_screenshot(
177+
db_screenshot.id,
178+
{"file_size_bytes": scanned_screenshot.file_size_bytes},
179+
)
180+
else:
181+
scanned_screenshot.rom_id = db_save.rom.id
182+
scanned_screenshot.user_id = request.user.id
183+
db_screenshot_handler.add_screenshot(screenshot=scanned_screenshot)
184+
158185
# Set the last played time for the current user
159186
rom_user = db_rom_handler.get_rom_user(db_save.rom_id, request.user.id)
160187
if not rom_user:

backend/endpoints/states.py

+31
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,37 @@ async def update_state(request: Request, id: int) -> StateSchema:
155155
db_state.id, {"file_size_bytes": stateFile.size}
156156
)
157157

158+
screenshotFile: UploadFile | None = data.get("screenshotFile", None) # type: ignore
159+
if screenshotFile and screenshotFile.filename:
160+
screenshots_path = fs_asset_handler.build_screenshots_file_path(
161+
user=request.user, platform_fs_slug=db_state.rom.platform_slug
162+
)
163+
164+
fs_asset_handler.write_file(file=screenshotFile, path=screenshots_path)
165+
166+
# Scan or update screenshot
167+
scanned_screenshot = scan_screenshot(
168+
file_name=screenshotFile.filename,
169+
user=request.user,
170+
platform_fs_slug=db_state.rom.platform_slug,
171+
)
172+
db_screenshot = db_screenshot_handler.get_screenshot_by_filename(
173+
rom_id=db_state.rom.id,
174+
user_id=request.user.id,
175+
file_name=screenshotFile.filename,
176+
)
177+
if db_screenshot:
178+
db_screenshot = db_screenshot_handler.update_screenshot(
179+
db_screenshot.id,
180+
{"file_size_bytes": scanned_screenshot.file_size_bytes},
181+
)
182+
else:
183+
scanned_screenshot.rom_id = db_state.rom.id
184+
scanned_screenshot.user_id = request.user.id
185+
db_screenshot = db_screenshot_handler.add_screenshot(
186+
screenshot=scanned_screenshot
187+
)
188+
158189
# Set the last played time for the current user
159190
rom_user = db_rom_handler.get_rom_user(db_state.rom_id, request.user.id)
160191
if not rom_user:

frontend/src/services/api/save.ts

+3
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ async function uploadSaves({
4444
async function updateSave({
4545
save,
4646
saveFile,
47+
screenshotFile,
4748
}: {
4849
save: SaveSchema;
4950
saveFile: File;
51+
screenshotFile?: File;
5052
}): Promise<{ data: SaveSchema }> {
5153
const formData = new FormData();
5254
formData.append("saveFile", saveFile);
55+
if (screenshotFile) formData.append("screenshotFile", screenshotFile);
5356

5457
return api.put(`/saves/${save.id}`, formData);
5558
}

frontend/src/services/api/state.ts

+3
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,15 @@ async function uploadStates({
4444
async function updateState({
4545
state,
4646
stateFile,
47+
screenshotFile,
4748
}: {
4849
state: StateSchema;
4950
stateFile: File;
51+
screenshotFile?: File;
5052
}): Promise<{ data: StateSchema }> {
5153
const formData = new FormData();
5254
formData.append("stateFile", stateFile);
55+
if (screenshotFile) formData.append("screenshotFile", screenshotFile);
5356

5457
return api.put(`/states/${state.id}`, formData);
5558
}

frontend/src/views/Player/EmulatorJS/utils.ts

+6
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ export async function saveSave({
7272
saveFile: new File([saveFile], save.file_name, {
7373
type: "application/octet-stream",
7474
}),
75+
screenshotFile:
76+
screenshotFile && save.screenshot
77+
? new File([screenshotFile], save.screenshot.file_name, {
78+
type: "application/octet-stream",
79+
})
80+
: undefined,
7581
});
7682

7783
// Update the save in the rom object

0 commit comments

Comments
 (0)