Replace some usages of RxJava in reader
This commit is contained in:
parent
b0dc20e00c
commit
bb1e7816e1
@ -64,6 +64,11 @@ import kotlinx.coroutines.MainScope
|
|||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.awaitAll
|
import kotlinx.coroutines.awaitAll
|
||||||
import kotlinx.coroutines.cancel
|
import kotlinx.coroutines.cancel
|
||||||
|
import kotlinx.coroutines.channels.Channel
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
|
import kotlinx.coroutines.flow.receiveAsFlow
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import logcat.LogPriority
|
import logcat.LogPriority
|
||||||
import nucleus.presenter.RxPresenter
|
import nucleus.presenter.RxPresenter
|
||||||
@ -74,7 +79,6 @@ import rx.schedulers.Schedulers
|
|||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.concurrent.TimeUnit
|
|
||||||
import eu.kanade.domain.manga.model.Manga as DomainManga
|
import eu.kanade.domain.manga.model.Manga as DomainManga
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,9 +138,9 @@ class ReaderPresenter(
|
|||||||
private val viewerChaptersRelay = BehaviorRelay.create<ViewerChapters>()
|
private val viewerChaptersRelay = BehaviorRelay.create<ViewerChapters>()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Relay used when loading prev/next chapter needed to lock the UI (with a dialog).
|
* Used when loading prev/next chapter needed to lock the UI (with a dialog).
|
||||||
*/
|
*/
|
||||||
private val isLoadingAdjacentChapterRelay = BehaviorRelay.create<Boolean>()
|
private val isLoadingAdjacentChapterEvent = Channel<Boolean>()
|
||||||
|
|
||||||
private var chapterToDownload: Download? = null
|
private var chapterToDownload: Download? = null
|
||||||
|
|
||||||
@ -295,7 +299,11 @@ class ReaderPresenter(
|
|||||||
|
|
||||||
Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga)
|
Observable.just(manga).subscribeLatestCache(ReaderActivity::setManga)
|
||||||
viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters)
|
viewerChaptersRelay.subscribeLatestCache(ReaderActivity::setChapters)
|
||||||
isLoadingAdjacentChapterRelay.subscribeLatestCache(ReaderActivity::setProgressDialog)
|
coroutineScope.launch {
|
||||||
|
isLoadingAdjacentChapterEvent.receiveAsFlow().collectLatest {
|
||||||
|
view?.setProgressDialog(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Read chapterList from an io thread because it's retrieved lazily and would block main.
|
// Read chapterList from an io thread because it's retrieved lazily and would block main.
|
||||||
activeChapterSubscription?.unsubscribe()
|
activeChapterSubscription?.unsubscribe()
|
||||||
@ -377,8 +385,8 @@ class ReaderPresenter(
|
|||||||
|
|
||||||
activeChapterSubscription?.unsubscribe()
|
activeChapterSubscription?.unsubscribe()
|
||||||
activeChapterSubscription = getLoadObservable(loader, chapter)
|
activeChapterSubscription = getLoadObservable(loader, chapter)
|
||||||
.doOnSubscribe { isLoadingAdjacentChapterRelay.call(true) }
|
.doOnSubscribe { coroutineScope.launch { isLoadingAdjacentChapterEvent.send(true) } }
|
||||||
.doOnUnsubscribe { isLoadingAdjacentChapterRelay.call(false) }
|
.doOnUnsubscribe { coroutineScope.launch { isLoadingAdjacentChapterEvent.send(false) } }
|
||||||
.subscribeFirst(
|
.subscribeFirst(
|
||||||
{ view, _ ->
|
{ view, _ ->
|
||||||
view.moveToPageIndex(0)
|
view.moveToPageIndex(0)
|
||||||
@ -649,19 +657,21 @@ class ReaderPresenter(
|
|||||||
setMangaViewerFlags.awaitSetMangaReadingMode(manga.id!!.toLong(), readingModeType.toLong())
|
setMangaViewerFlags.awaitSetMangaReadingMode(manga.id!!.toLong(), readingModeType.toLong())
|
||||||
}
|
}
|
||||||
|
|
||||||
Observable.timer(250, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
|
coroutineScope.launchIO {
|
||||||
.subscribeFirst({ view, _ ->
|
delay(250)
|
||||||
val currChapters = viewerChaptersRelay.value
|
val currChapters = viewerChaptersRelay.value
|
||||||
if (currChapters != null) {
|
if (currChapters != null) {
|
||||||
// Save current page
|
// Save current page
|
||||||
val currChapter = currChapters.currChapter
|
val currChapter = currChapters.currChapter
|
||||||
currChapter.requestedPage = currChapter.chapter.last_page_read
|
currChapter.requestedPage = currChapter.chapter.last_page_read
|
||||||
|
|
||||||
|
withUIContext {
|
||||||
// Emit manga and chapters to the new viewer
|
// Emit manga and chapters to the new viewer
|
||||||
view.setManga(manga)
|
view?.setManga(manga)
|
||||||
view.setChapters(currChapters)
|
view?.setChapters(currChapters)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -688,13 +698,13 @@ class ReaderPresenter(
|
|||||||
|
|
||||||
logcat(LogPriority.INFO) { "Manga orientation is ${manga.orientationType}" }
|
logcat(LogPriority.INFO) { "Manga orientation is ${manga.orientationType}" }
|
||||||
|
|
||||||
Observable.timer(250, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread())
|
coroutineScope.launchIO {
|
||||||
.subscribeFirst({ view, _ ->
|
delay(250)
|
||||||
val currChapters = viewerChaptersRelay.value
|
val currChapters = viewerChaptersRelay.value
|
||||||
if (currChapters != null) {
|
if (currChapters != null) {
|
||||||
view.setOrientation(getMangaOrientationType())
|
withUIContext { view?.setOrientation(getMangaOrientationType()) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -740,12 +750,12 @@ class ReaderPresenter(
|
|||||||
)
|
)
|
||||||
withUIContext {
|
withUIContext {
|
||||||
notifier.onComplete(uri)
|
notifier.onComplete(uri)
|
||||||
view!!.onSaveImageResult(SaveImageResult.Success(uri))
|
view?.onSaveImageResult(SaveImageResult.Success(uri))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
notifier.onError(e.message)
|
notifier.onError(e.message)
|
||||||
view!!.onSaveImageResult(SaveImageResult.Error(e))
|
view?.onSaveImageResult(SaveImageResult.Error(e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -776,7 +786,7 @@ class ReaderPresenter(
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
withUIContext {
|
withUIContext {
|
||||||
view!!.onShareImageResult(uri, page)
|
view?.onShareImageResult(uri, page)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
|
Loading…
Reference in New Issue
Block a user