@@ -6,8 +6,8 @@ import android.util.Log
66import androidx.lifecycle.LiveData
77import com.google.gson.Gson
88import com.google.gson.reflect.TypeToken
9+ import io.reactivex.*
910import io.reactivex.Observable
10- import io.reactivex.Single
1111import io.reactivex.android.schedulers.AndroidSchedulers
1212import io.reactivex.functions.BiFunction
1313import io.reactivex.schedulers.Schedulers
@@ -17,6 +17,8 @@ import okhttp3.RequestBody.Companion.asRequestBody
1717import okhttp3.ResponseBody
1818import org.koin.core.KoinComponent
1919import org.koin.core.inject
20+ import retrofit2.HttpException
21+ import retrofit2.Response
2022import retrofit2.Retrofit
2123import ro.code4.monitorizarevot.data.AppDatabase
2224import ro.code4.monitorizarevot.data.model.*
@@ -29,6 +31,8 @@ import ro.code4.monitorizarevot.data.model.response.VersionResponse
2931import ro.code4.monitorizarevot.data.pojo.*
3032import ro.code4.monitorizarevot.helper.Constants
3133import ro.code4.monitorizarevot.helper.createMultipart
34+ import ro.code4.monitorizarevot.helper.logD
35+ import ro.code4.monitorizarevot.helper.logE
3236import ro.code4.monitorizarevot.services.ApiInterface
3337import ro.code4.monitorizarevot.services.LoginInterface
3438import java.io.File
@@ -228,11 +232,14 @@ class Repository : KoinComponent {
228232
229233 @SuppressLint(" CheckResult" )
230234 fun saveAnsweredQuestion (answeredQuestion : AnsweredQuestion , answers : List <SelectedAnswer >) {
231- Observable .create< Unit > {
235+ Observable .fromCallable< Boolean > {
232236 db.formDetailsDao().insertAnsweredQuestion(answeredQuestion, answers)
237+ true
233238 }.subscribeOn(Schedulers .io())
234- .observeOn(AndroidSchedulers .mainThread()).subscribe({}, {
235- Log .i(TAG , it.message.orEmpty())
239+ .observeOn(AndroidSchedulers .mainThread()).subscribe({
240+ logD(" Saving answered question: $answeredQuestion (answers: $answers )" , TAG )
241+ }, {
242+ logE(it.message.orEmpty(), TAG )
236243 })
237244 }
238245
@@ -244,25 +251,47 @@ class Repository : KoinComponent {
244251 })
245252 }
246253
247-
248254 @SuppressLint(" CheckResult" )
249255 fun syncAnswers (countyCode : String , pollingStationNumber : Int , formId : Int ) {
250- db.formDetailsDao().getNotSyncedQuestionsForForm(countyCode, pollingStationNumber, formId)
256+ db.formDetailsDao()
257+ .getNotSyncedQuestionsForForm(countyCode, pollingStationNumber, formId)
251258 .toObservable()
252- .subscribeOn(Schedulers .io()).flatMap {
253- syncAnswers(it)
254- }.observeOn(AndroidSchedulers .mainThread()).subscribe({
255- Observable .create<Unit > {
256- db.formDetailsDao()
257- .updateAnsweredQuestions(countyCode, pollingStationNumber, formId)
258- }.subscribeOn(Schedulers .io()).observeOn(AndroidSchedulers .mainThread())
259- .subscribe()
259+ .subscribeOn(Schedulers .io())
260+ .flatMap { answers ->
261+ syncAnswers(answers)
262+ .flatMap {
263+ Completable .fromAction {
264+ if (answers.isNotEmpty()) {
265+ logD(" Updated number of answers:" + answers.size)
266+ logD(" Updated answered questions for:$pollingStationNumber " , TAG )
267+ db.formDetailsDao()
268+ .updateAnsweredQuestions(
269+ countyCode,
270+ pollingStationNumber,
271+ formId
272+ )
273+ } else {
274+ logD(" empty list." )
275+ }
276+ }.andThen(Observable .just(it))
277+ }
278+ }
279+ .map {
280+ if (! it.isSuccessful) {
281+ throw HttpException (it)
282+ }
283+ return @map it.code()
284+ }
285+ .observeOn(AndroidSchedulers .mainThread())
286+ .subscribe({
287+ logD(" Success in syncing data." , Repository .TAG )
260288 }, {
261- Log .i(TAG , it.message ? : " Error on synchronizing data" )
289+ val errorMessage = it.message ? : " Error on synchronizing data"
290+ logE(errorMessage, it, Repository .TAG )
262291 })
263292 }
264293
265- private fun syncAnswers (list : List <AnsweredQuestionPOJO >): Observable <ResponseBody > {
294+ private fun syncAnswers (list : List <AnsweredQuestionPOJO >): Observable <Response < Void > > {
266295 val responseAnswerContainer = ResponseAnswerContainer ()
267296 responseAnswerContainer.answers = list.map {
268297 it.answeredQuestion.options = it.selectedAnswers
@@ -419,7 +448,7 @@ class Repository : KoinComponent {
419448 db.pollingStationDao().deleteAll()
420449 }
421450 }
422-
451+
423452 fun getVisitedStations () = db.pollingStationDao().getVisitedPollingStations()
424453}
425454
0 commit comments