mirror of
https://github.com/frappe/lms.git
synced 2026-05-02 13:39:31 +03:00
fix(scorm): save_progress no longer impended by race condition
(cherry picked from commit 89505eac7d)
This commit is contained in:
@@ -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")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user