|
@@ -44,7 +44,7 @@ class HttpPageLoader(
|
|
|
|
|
|
init {
|
|
|
subscriptions += Observable.defer { Observable.just(queue.take().page) }
|
|
|
- .filter { it.status == Page.QUEUE }
|
|
|
+ .filter { it.status == Page.State.QUEUE }
|
|
|
.concatMap { source.fetchImageFromCacheThenNet(it) }
|
|
|
.repeat()
|
|
|
.subscribeOn(Schedulers.io())
|
|
@@ -101,25 +101,25 @@ class HttpPageLoader(
|
|
|
* Returns an observable that loads a page through the queue and listens to its result to
|
|
|
* emit new states. It handles re-enqueueing pages if they were evicted from the cache.
|
|
|
*/
|
|
|
- override fun getPage(page: ReaderPage): Observable<Int> {
|
|
|
+ override fun getPage(page: ReaderPage): Observable<Page.State> {
|
|
|
return Observable.defer {
|
|
|
val imageUrl = page.imageUrl
|
|
|
|
|
|
// Check if the image has been deleted
|
|
|
- if (page.status == Page.READY && imageUrl != null && !chapterCache.isImageInCache(imageUrl)) {
|
|
|
- page.status = Page.QUEUE
|
|
|
+ if (page.status == Page.State.READY && imageUrl != null && !chapterCache.isImageInCache(imageUrl)) {
|
|
|
+ page.status = Page.State.QUEUE
|
|
|
}
|
|
|
|
|
|
// Automatically retry failed pages when subscribed to this page
|
|
|
- if (page.status == Page.ERROR) {
|
|
|
- page.status = Page.QUEUE
|
|
|
+ if (page.status == Page.State.ERROR) {
|
|
|
+ page.status = Page.State.QUEUE
|
|
|
}
|
|
|
|
|
|
- val statusSubject = SerializedSubject(PublishSubject.create<Int>())
|
|
|
- page.setStatusSubject(statusSubject)
|
|
|
+ val statusSubject = SerializedSubject(PublishSubject.create<Page.State>())
|
|
|
+ page.statusSubject = statusSubject
|
|
|
|
|
|
val queuedPages = mutableListOf<PriorityPage>()
|
|
|
- if (page.status == Page.QUEUE) {
|
|
|
+ if (page.status == Page.State.QUEUE) {
|
|
|
queuedPages += PriorityPage(page, 1).also { queue.offer(it) }
|
|
|
}
|
|
|
queuedPages += preloadNextPages(page, preloadSize)
|
|
@@ -127,7 +127,7 @@ class HttpPageLoader(
|
|
|
statusSubject.startWith(page.status)
|
|
|
.doOnUnsubscribe {
|
|
|
queuedPages.forEach {
|
|
|
- if (it.page.status == Page.QUEUE) {
|
|
|
+ if (it.page.status == Page.State.QUEUE) {
|
|
|
queue.remove(it)
|
|
|
}
|
|
|
}
|
|
@@ -149,7 +149,7 @@ class HttpPageLoader(
|
|
|
return pages
|
|
|
.subList(pageIndex + 1, min(pageIndex + 1 + amount, pages.size))
|
|
|
.mapNotNull {
|
|
|
- if (it.status == Page.QUEUE) {
|
|
|
+ if (it.status == Page.State.QUEUE) {
|
|
|
PriorityPage(it, 0).apply { queue.offer(this) }
|
|
|
} else {
|
|
|
null
|
|
@@ -161,8 +161,8 @@ class HttpPageLoader(
|
|
|
* Retries a page. This method is only called from user interaction on the viewer.
|
|
|
*/
|
|
|
override fun retryPage(page: ReaderPage) {
|
|
|
- if (page.status == Page.ERROR) {
|
|
|
- page.status = Page.QUEUE
|
|
|
+ if (page.status == Page.State.ERROR) {
|
|
|
+ page.status = Page.State.QUEUE
|
|
|
}
|
|
|
queue.offer(PriorityPage(page, 2))
|
|
|
}
|
|
@@ -200,9 +200,9 @@ class HttpPageLoader(
|
|
|
}
|
|
|
|
|
|
private fun HttpSource.getImageUrl(page: ReaderPage): Observable<ReaderPage> {
|
|
|
- page.status = Page.LOAD_PAGE
|
|
|
+ page.status = Page.State.LOAD_PAGE
|
|
|
return fetchImageUrl(page)
|
|
|
- .doOnError { page.status = Page.ERROR }
|
|
|
+ .doOnError { page.status = Page.State.ERROR }
|
|
|
.onErrorReturn { null }
|
|
|
.doOnNext { page.imageUrl = it }
|
|
|
.map { page }
|
|
@@ -227,9 +227,9 @@ class HttpPageLoader(
|
|
|
}
|
|
|
.doOnNext {
|
|
|
page.stream = { chapterCache.getImageFile(imageUrl).inputStream() }
|
|
|
- page.status = Page.READY
|
|
|
+ page.status = Page.State.READY
|
|
|
}
|
|
|
- .doOnError { page.status = Page.ERROR }
|
|
|
+ .doOnError { page.status = Page.State.ERROR }
|
|
|
.onErrorReturn { page }
|
|
|
}
|
|
|
|
|
@@ -239,7 +239,7 @@ class HttpPageLoader(
|
|
|
* @param page the page.
|
|
|
*/
|
|
|
private fun HttpSource.cacheImage(page: ReaderPage): Observable<ReaderPage> {
|
|
|
- page.status = Page.DOWNLOAD_IMAGE
|
|
|
+ page.status = Page.State.DOWNLOAD_IMAGE
|
|
|
return fetchImage(page)
|
|
|
.doOnNext { chapterCache.putImageToCache(page.imageUrl!!, it) }
|
|
|
.map { page }
|