From 202e04a5541f506433822436c656aeeca47dfb7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Gremaud?= Date: Mon, 25 May 2026 02:39:51 +0200 Subject: [PATCH] feat(submissions): admin call to process ocr data --- polylan_submitter/src/Submissions.vue | 63 +++++++++++++++++++++----- polylan_submitter/src/api/index.ts | 4 +- polylan_submitter/src/api/sdk.gen.ts | 12 ++++- polylan_submitter/src/api/types.gen.ts | 50 ++++++++++++++++++++ polylan_submitter/submissions/api.py | 31 +++++++++++++ 5 files changed, 146 insertions(+), 14 deletions(-) diff --git a/polylan_submitter/src/Submissions.vue b/polylan_submitter/src/Submissions.vue index 6b12157..227ef8a 100644 --- a/polylan_submitter/src/Submissions.vue +++ b/polylan_submitter/src/Submissions.vue @@ -2,7 +2,7 @@ import { ref, onMounted } from "vue"; import { storeToRefs } from "pinia"; import { useUserStore } from "@/stores/user"; -import { submissionsApiCreateSubmission, submissionsApiListUserSubmissions, submissionsApiCreateImageCrop, submissionsApiDeleteImageCrop } from "@/api"; +import { submissionsApiCreateSubmission, submissionsApiListUserSubmissions, submissionsApiCreateImageCrop, submissionsApiDeleteImageCrop, submissionsApiProcessFileOcr, submissionsApiProcessCropOcr } from "@/api"; interface Props { gamePath?: string; @@ -285,6 +285,38 @@ const cancelCrop = () => { redrawCropCanvas(); }; +const processFileOcr = async () => { + if (!selectedSubmissionFile.value) return; + + try { + await submissionsApiProcessFileOcr({ + path: { file_id: selectedSubmissionFile.value.id }, + }); + selectedSubmissionFile.value.ocr_status = "processing"; + } catch (error) { + console.error("Error processing OCR:", error); + alert(`Error processing OCR: ${error instanceof Error ? error.message : "Please try again."}`); + } +}; + +const processCropOcr = async (cropId: string) => { + try { + await submissionsApiProcessCropOcr({ + path: { crop_id: cropId }, + }); + // Update the crop status in the list + if (selectedSubmissionFile.value?.crops) { + const crop = selectedSubmissionFile.value.crops.find((c: any) => c.id === cropId); + if (crop) { + crop.ocr_status = "processing"; + } + } + } catch (error) { + console.error("Error processing crop OCR:", error); + alert(`Error processing OCR: ${error instanceof Error ? error.message : "Please try again."}`); + } +}; + const getGameHeaderImage = () => { if (props.gameImage) { return props.gameImage; @@ -770,16 +802,15 @@ onMounted(() => {
-

OCR Data

+
+

OCR Data

+ + {{ selectedSubmissionFile?.ocr_status }} + +
-
-

Status:

- {{ - selectedSubmissionFile.ocr_status }} -
-

Extracted Text:

@@ -863,9 +894,15 @@ onMounted(() => { {{ crop.ocr_status }}

- +
+ + +
@@ -878,6 +915,10 @@ onMounted(() => {