fix(scorm): save_progress no longer impended by race condition

(cherry picked from commit 89505eac7d)
This commit is contained in:
raizasafeel
2026-03-24 15:23:43 +05:30
committed by Mergify
parent 61bd858a69
commit dcbf91990a
2 changed files with 5 additions and 2 deletions
+3 -1
View File
@@ -109,9 +109,10 @@ const getDataFromLMS = (key) => {
let saveTimeout = null let saveTimeout = null
const debouncedSaveProgress = (scormDetails) => { const debouncedSaveProgress = (scormDetails) => {
if (isSuccessfullyCompleted.value) return
clearTimeout(saveTimeout) clearTimeout(saveTimeout)
saveTimeout = setTimeout(() => { saveTimeout = setTimeout(() => {
saveProgress(scormDetails) if (!isSuccessfullyCompleted.value) saveProgress(scormDetails)
}, 300) }, 300)
} }
@@ -124,6 +125,7 @@ const saveDataToLMS = (key, value) => {
(key === 'cmi.completion_status' && value === 'incomplete') (key === 'cmi.completion_status' && value === 'incomplete')
if (isLessonStatus || isCompletionStatus) { if (isLessonStatus || isCompletionStatus) {
if (isSuccessfullyCompleted.value) return
isSuccessfullyCompleted.value = true isSuccessfullyCompleted.value = true
} }
@@ -78,7 +78,7 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None):
if not membership: if not membership:
return 0 return 0
frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson) frappe.db.set_value("LMS Enrollment", membership, "current_lesson", lesson, update_modified=False)
progress_already_exists = frappe.db.exists( progress_already_exists = frappe.db.exists(
"LMS Course Progress", {"lesson": lesson, "member": frappe.session.user} "LMS Course Progress", {"lesson": lesson, "member": frappe.session.user}
) )
@@ -133,6 +133,7 @@ def save_progress(lesson: str, course: str, scorm_details: dict = None):
# Had to get doc, as on_change doesn't trigger when you use set_value. The trigger is necessary for badge to get assigned. # Had to get doc, as on_change doesn't trigger when you use set_value. The trigger is necessary for badge to get assigned.
enrollment = frappe.get_doc("LMS Enrollment", membership) enrollment = frappe.get_doc("LMS Enrollment", membership)
enrollment.progress = progress enrollment.progress = progress
enrollment.flags.ignore_version = True
enrollment.save() enrollment.save()
enrollment.run_method("on_change") enrollment.run_method("on_change")