|
|
|
@ -9,22 +9,29 @@ import moxy.presenterScope
|
|
|
|
import org.koitharu.kotatsu.BuildConfig
|
|
|
|
import org.koitharu.kotatsu.BuildConfig
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaFilter
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaFilter
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaSource
|
|
|
|
import org.koitharu.kotatsu.core.model.MangaSource
|
|
|
|
import org.koitharu.kotatsu.domain.MangaProviderFactory
|
|
|
|
|
|
|
|
import org.koitharu.kotatsu.ui.base.BasePresenter
|
|
|
|
import org.koitharu.kotatsu.ui.base.BasePresenter
|
|
|
|
import org.koitharu.kotatsu.ui.list.MangaListView
|
|
|
|
import org.koitharu.kotatsu.ui.list.MangaListView
|
|
|
|
|
|
|
|
|
|
|
|
@InjectViewState
|
|
|
|
@InjectViewState
|
|
|
|
class RemoteListPresenter : BasePresenter<MangaListView<Unit>>() {
|
|
|
|
class RemoteListPresenter(source: MangaSource) : BasePresenter<MangaListView<Unit>>() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private val repository by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
|
|
|
|
|
|
|
source.repository
|
|
|
|
|
|
|
|
}
|
|
|
|
private var isFilterInitialized = false
|
|
|
|
private var isFilterInitialized = false
|
|
|
|
private var filter: MangaFilter? = null
|
|
|
|
private var filter: MangaFilter? = null
|
|
|
|
|
|
|
|
|
|
|
|
fun loadList(source: MangaSource, offset: Int) {
|
|
|
|
override fun onFirstViewAttach() {
|
|
|
|
|
|
|
|
super.onFirstViewAttach()
|
|
|
|
|
|
|
|
loadFilter()
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fun loadList(offset: Int) {
|
|
|
|
presenterScope.launch {
|
|
|
|
presenterScope.launch {
|
|
|
|
viewState.onLoadingStateChanged(true)
|
|
|
|
viewState.onLoadingStateChanged(true)
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
val list = withContext(Dispatchers.Default) {
|
|
|
|
val list = withContext(Dispatchers.Default) {
|
|
|
|
MangaProviderFactory.create(source).getList(
|
|
|
|
repository.getList(
|
|
|
|
offset = offset,
|
|
|
|
offset = offset,
|
|
|
|
sortOrder = filter?.sortOrder,
|
|
|
|
sortOrder = filter?.sortOrder,
|
|
|
|
tag = filter?.tag
|
|
|
|
tag = filter?.tag
|
|
|
|
@ -50,23 +57,23 @@ class RemoteListPresenter : BasePresenter<MangaListView<Unit>>() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!isFilterInitialized) {
|
|
|
|
if (!isFilterInitialized) {
|
|
|
|
loadFilter(source)
|
|
|
|
loadFilter()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun applyFilter(source: MangaSource, filter: MangaFilter) {
|
|
|
|
fun applyFilter(filter: MangaFilter) {
|
|
|
|
this.filter = filter
|
|
|
|
this.filter = filter
|
|
|
|
viewState.onListChanged(emptyList())
|
|
|
|
viewState.onListChanged(emptyList())
|
|
|
|
loadList(source, 0)
|
|
|
|
loadList(0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun loadFilter(source: MangaSource) {
|
|
|
|
private fun loadFilter() {
|
|
|
|
isFilterInitialized = true
|
|
|
|
isFilterInitialized = true
|
|
|
|
presenterScope.launch {
|
|
|
|
launchJob {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
val (sorts, tags) = withContext(Dispatchers.Default) {
|
|
|
|
val (sorts, tags) = withContext(Dispatchers.Default) {
|
|
|
|
val repo = MangaProviderFactory.create(source)
|
|
|
|
repository.sortOrders.sortedBy { it.ordinal } to repository.getTags()
|
|
|
|
repo.sortOrders.sortedBy { it.ordinal } to repo.getTags().sortedBy { it.title }
|
|
|
|
.sortedBy { it.title }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
viewState.onInitFilter(sorts, tags, filter)
|
|
|
|
viewState.onInitFilter(sorts, tags, filter)
|
|
|
|
} catch (e: Exception) {
|
|
|
|
} catch (e: Exception) {
|
|
|
|
|