@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment
1111import androidx.lifecycle.lifecycleScope
1212import java.util.Date
1313import java.util.UUID
14+ import kotlinx.coroutines.Job
1415import kotlinx.coroutines.launch
1516import org.ole.planet.myplanet.MainApplication
1617import org.ole.planet.myplanet.R
@@ -39,6 +40,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
3940 private lateinit var stepSurvey: List <RealmStepExam >
4041 var user: RealmUserModel ? = null
4142 private var stepNumber = 0
43+ private var saveInProgress: Job ? = null
4244 override fun onCreate (savedInstanceState : Bundle ? ) {
4345 super .onCreate(savedInstanceState)
4446 if (arguments != null ) {
@@ -55,12 +57,11 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
5557 return fragmentCourseStepBinding.root
5658 }
5759
58- private fun saveCourseProgress () {
59- databaseService.withRealm { realm ->
60- if (! realm.isInTransaction) realm.beginTransaction()
60+ private suspend fun saveCourseProgress (userId : String? , planetCode : String? , parentCode : String? ) {
61+ databaseService.executeTransactionAsync { realm ->
6162 var courseProgress = realm.where(RealmCourseProgress ::class .java)
6263 .equalTo(" courseId" , step.courseId)
63- .equalTo(" userId" , user?.id )
64+ .equalTo(" userId" , userId )
6465 .equalTo(" stepNum" , stepNumber)
6566 .findFirst()
6667 if (courseProgress == null ) {
@@ -72,12 +73,22 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
7273 if (stepExams.isEmpty()) {
7374 courseProgress?.passed = true
7475 }
75- courseProgress?.createdOn = user?. planetCode
76+ courseProgress?.createdOn = planetCode
7677 courseProgress?.updatedDate = Date ().time
77- courseProgress?.parentCode = user?.parentCode
78- courseProgress?.userId = user?.id
79- realm.commitTransaction()
78+ courseProgress?.parentCode = parentCode
79+ courseProgress?.userId = userId
80+ }
81+ }
82+
83+ private fun launchSaveCourseProgress () {
84+ if (saveInProgress?.isActive == true ) return
85+ val userId = user?.id
86+ val planetCode = user?.planetCode
87+ val parentCode = user?.parentCode
88+ saveInProgress = lifecycleScope.launch {
89+ saveCourseProgress(userId, planetCode, parentCode)
8090 }
91+ saveInProgress?.invokeOnCompletion { saveInProgress = null }
8192 }
8293 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
8394 super .onViewCreated(view, savedInstanceState)
@@ -132,7 +143,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
132143 }
133144 }
134145 if (isVisible && userHasCourse) {
135- saveCourseProgress ()
146+ launchSaveCourseProgress ()
136147 }
137148 }
138149
@@ -171,7 +182,7 @@ class CourseStepFragment : BaseContainerFragment(), ImageCaptureCallback {
171182 isMyCourse(user?.id, step.courseId, realm)
172183 }
173184 if (userHasCourse) {
174- saveCourseProgress ()
185+ launchSaveCourseProgress ()
175186 }
176187 }
177188 } catch (e: Exception ) {
0 commit comments