Advertisement
Guest User

Untitled

a guest
Sep 12th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 8.38 KB | None | 0 0
  1. package ru.nvtech.sedkp.documents
  2.  
  3. import android.arch.persistence.room.EmptyResultSetException
  4. import android.util.Base64
  5. import com.androidnetworking.error.ANError
  6. import com.crashlytics.android.Crashlytics
  7. import io.reactivex.Observable
  8. import io.reactivex.SingleSource
  9. import io.reactivex.android.schedulers.AndroidSchedulers
  10. import io.reactivex.schedulers.Schedulers
  11. import ru.nvtech.sedkp.base.BasePresenter
  12. import ru.nvtech.sedkp.domain.model.CachedRequest
  13. import ru.nvtech.sedkp.domain.model.Filter
  14. import ru.nvtech.sedkp.domain.model.FilterNameType
  15. import ru.nvtech.sedkp.domain.model.FilterType
  16. import ru.nvtech.sedkp.domain.model.network.DocumentsInfoList
  17. import ru.nvtech.sedkp.domain.repository.AuthProvider
  18. import ru.nvtech.sedkp.domain.usecases.*
  19. import ru.nvtech.sedkp.extentions.timberError
  20. import timber.log.Timber
  21. import java.net.ConnectException
  22. import java.net.SocketTimeoutException
  23. import java.net.UnknownHostException
  24. import javax.inject.Inject
  25.  
  26. class DocumentsPresenter @Inject constructor(private val documentsUseCase: DocumentsUseCase,
  27.                                              private val filterUseCase: FilterUseCase,
  28.                                              private val settingsUseCase: SettingsUseCase,
  29.                                              private val authUseCase: AuthUseCase,
  30.                                              private val authProvider: AuthProvider,
  31.                                              private val docInfoUseCase: DocInfoUseCase,
  32.                                              private val cachedRequestUseCase: CachedRequestUseCase)
  33.     : BasePresenter<DocumentsContract.View>(), DocumentsContract.Presenter {
  34.  
  35.     private lateinit var filter: Filter
  36.     var isSettingComplete: Boolean = false
  37.     lateinit var documentsInfoList: DocumentsInfoList
  38.     private var docInfoList: MutableList<DocumentsInfoList.DocInfo> = mutableListOf()
  39.  
  40.  
  41.     override fun authProcess() {
  42.         viewMVP?.showProgressBar(true)
  43.         disposables.add(settingsUseCase.getSettings()
  44.                 .subscribeOn(Schedulers.io())
  45.                 .observeOn(AndroidSchedulers.mainThread())
  46.                 .subscribe({
  47.                     getFilterFromBD()
  48.                     if (it.login.isNotBlank() and it.password.isNotBlank() and (it.localEndpoint.isNotBlank() or it.remoteEndpoint.isNotBlank())) {
  49.                         authProvider.putCredentials("Basic ${Base64.encodeToString("${it.login}:${it.password}".toByteArray(), Base64.NO_WRAP)}")
  50.                         authorisation(it.remoteEndpoint, it.localEndpoint)
  51.                         isSettingComplete = true
  52.                     } else {
  53.                         viewMVP?.showProgressBar(false)
  54.                         viewMVP?.showAlertSettingsDialog()
  55.                         isSettingComplete = false
  56.                     }
  57.                 }, {
  58.                     viewMVP?.showProgressBar(false)
  59.  
  60.                     if (it::class.java == EmptyResultSetException::class.java) {
  61.                         viewMVP?.openSettings()
  62.                         isSettingComplete = false
  63.                     } else {
  64.                         viewMVP?.onLoadError("Ошибка загрузки документов")
  65.                         timberError(it)
  66.                     }
  67.  
  68.                 }))
  69.     }
  70.  
  71.     private fun authorisation(remoteEndpoint: String, localEndpoint: String) {
  72.         disposables.add(authUseCase.authorisation(remoteEndpoint)
  73.                 .onErrorResumeNext {
  74.                     val err = it
  75.                     //TODO("добавить логику обработки ошибок тут/ либо в репозитории")
  76.                     if (it.cause != null) {
  77.                         when (it.cause!!::class.java) {
  78.                             ConnectException::class.java,
  79.                             SocketTimeoutException::class.java,
  80.                             UnknownHostException::class.java ->
  81.                                 return@onErrorResumeNext authUseCase.authorisation(localEndpoint)
  82.                             else -> {
  83.                                 return@onErrorResumeNext SingleSource { observer -> observer.onError(err) }
  84.                             }
  85.                         }
  86.                     } else {
  87.  
  88.                         return@onErrorResumeNext SingleSource { observer -> observer.onError(err) }
  89.                     }
  90.  
  91.                 }
  92.                 .subscribeOn(Schedulers.io())
  93.                 .observeOn(AndroidSchedulers.mainThread())
  94.                 .subscribe({
  95.                     authProvider.putUserId(it.userId)
  96.                     loadDocuments()
  97.                 }, {
  98.                     authProvider.setEmpty()
  99.                     viewMVP?.showProgressBar(false)
  100.                     timberError(it)
  101.                     Crashlytics.logException(it)
  102.                     if (it.cause != null) {
  103.                         when (it.cause!!::class.java) {
  104.                             ConnectException::class.java,
  105.                             SocketTimeoutException::class.java,
  106.                             UnknownHostException::class.java -> {
  107.                                 viewMVP?.onLoadError("Ошибка подключения к серверу")
  108.                             }
  109.                             else -> {
  110.                                 viewMVP?.onLoadError("Ошибка авторизации")
  111.                             }
  112.                         }
  113.                     } else {
  114.                         viewMVP?.onLoadError("Ошибка авторизации")
  115.  
  116.                     }
  117.  
  118.                 }))
  119.     }
  120.  
  121.  
  122.     override fun loadDocuments(offset: Int) {
  123.         viewMVP?.setTitle(filter)
  124.         if (offset == 0) docInfoList.clear()
  125.  
  126.         if (filter.filterMap.containsKey(FilterType.CATEGORY).and(filter.filterMap[FilterType.CATEGORY] == FilterNameType.LAST_SEEN)) {
  127.             viewMVP?.showProgressBar(true)
  128.             disposables.add(docInfoUseCase.getDocInfoList()
  129.                     .subscribeOn(Schedulers.io())
  130.                     .observeOn(AndroidSchedulers.mainThread())
  131.                     .subscribe(
  132.                             {
  133.                                 val doc = DocumentsInfoList(docs = it.toMutableList(), offset = offset, portion = 0, count = it.size)
  134.  
  135.                                 docInfoList.clear()
  136.                                 documentsInfoList = doc.copy()
  137.                                 docInfoList.addAll(doc.docs)
  138.                                 documentsInfoList.docs = docInfoList
  139.                                 viewMVP?.onLoadDocumentsSuccess(documentsInfoList)
  140.                                 restoreCacheRequest()
  141.                             },
  142.                             {
  143.                                 viewMVP?.showProgressBar(false)
  144.                                 viewMVP?.onLoadError("Ошибка загрузки документов")
  145.  
  146.                                 timberError(it)
  147.                             })
  148.             )
  149.             return
  150.         }
  151.  
  152.         if (authProvider.getUserId() == null) {
  153.             authProcess()
  154.         } else {
  155.             viewMVP?.showProgressBar(true)
  156.             disposables.add(documentsUseCase.getDocs(filter, offset)
  157.                     .onErrorResumeNext {
  158.                         //                        authProvider.setEmpty()
  159.                         authProcess()
  160.                         return@onErrorResumeNext SingleSource { observer -> observer.onError(it) }
  161.                     }
  162.                     .subscribeOn(Schedulers.io())
  163.                     .observeOn(AndroidSchedulers.mainThread())
  164.                     .subscribe(
  165.                             {
  166.                                 documentsInfoList = it.copy()
  167.                                 docInfoList.addAll(it.docs)
  168.                                 documentsInfoList.docs = docInfoList
  169.                                 viewMVP?.onLoadDocumentsSuccess(documentsInfoList)
  170.                                 restoreCacheRequest()
  171.                                 //TODO("FOR TESTING")
  172.                                 //checkGson(it.docs)
  173.                             },
  174.                             {
  175.                                 viewMVP?.onLoadError("Ошибка загрузки документов")
  176.                                 timberError(it)
  177.                             })
  178.             )
  179.         }
  180.     }
  181.  
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement