MainPresenter.kt 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package com.sirekanian.acf
  2. import com.sirekanian.acf.data.Repository
  3. import com.sirekanian.acf.data.Tag
  4. import com.sirekanian.acf.data.Warmonger
  5. import kotlinx.coroutines.Dispatchers.IO
  6. import kotlinx.coroutines.flow.Flow
  7. import kotlinx.coroutines.flow.map
  8. import kotlinx.coroutines.withContext
  9. fun createPresenter(app: App, state: MainState): MainPresenter =
  10. MainPresenterImpl(app.repository, state)
  11. interface MainPresenter {
  12. fun observeData(): Flow<List<WarmongerModel>>
  13. suspend fun getTags(): List<TagModel>
  14. suspend fun updateData()
  15. }
  16. class MainPresenterImpl(
  17. private val repository: Repository,
  18. private val state: MainState,
  19. ) : MainPresenter {
  20. override fun observeData(): Flow<List<WarmongerModel>> =
  21. repository.observeByQuery(state.search.fullQuery).map { warmongers ->
  22. warmongers.map { warmonger ->
  23. Warmonger.toModel(warmonger, state.isCyrillic)
  24. }
  25. }
  26. override suspend fun getTags(): List<TagModel> =
  27. repository.getTags().map { Tag.toModel(it, state.isCyrillic) }
  28. @Suppress("unused") // TODO: 1202468796234411
  29. override suspend fun updateData() =
  30. withContext(IO) {
  31. repository.updateFromRemote(state.progress)
  32. }
  33. }