Fixup HttpPageLoader _loadPage (#8984)
Fixup for e4bc8990
(#8955)
HttpSource.fetchImage() uses Call.asObservableSuccess(), which
cancels the call on unsubscribe. This causes the call to be cancelled
before it is used, leading to a "java.net.SocketException: Socket is
closed" when trying to use the response in putImageToCache().
To fix this, use Call.awaitSuccess() via a new HttpSource.getImage()
suspending function. This addition to source-api is only intended for
app use, so it will not be added to the extensions-api stubs.
This commit is contained in:
parent
448702e5be
commit
b4b3a4d286
2 changed files with 13 additions and 1 deletions
|
@ -200,7 +200,7 @@ class HttpPageLoader(
|
||||||
|
|
||||||
if (!chapterCache.isImageInCache(imageUrl)) {
|
if (!chapterCache.isImageInCache(imageUrl)) {
|
||||||
page.status = Page.State.DOWNLOAD_IMAGE
|
page.status = Page.State.DOWNLOAD_IMAGE
|
||||||
val imageResponse = source.fetchImage(page).awaitSingle()
|
val imageResponse = source.getImage(page)
|
||||||
chapterCache.putImageToCache(imageUrl, imageResponse)
|
chapterCache.putImageToCache(imageUrl, imageResponse)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.source.online
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||||
import eu.kanade.tachiyomi.network.asObservableSuccess
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
||||||
|
import eu.kanade.tachiyomi.network.awaitSuccess
|
||||||
import eu.kanade.tachiyomi.network.newCachelessCallWithProgress
|
import eu.kanade.tachiyomi.network.newCachelessCallWithProgress
|
||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
|
@ -305,6 +306,17 @@ abstract class HttpSource : CatalogueSource {
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the response of the source image.
|
||||||
|
*
|
||||||
|
* @param page the page whose source image has to be downloaded.
|
||||||
|
*/
|
||||||
|
suspend fun getImage(page: Page): Response {
|
||||||
|
// images will be cached or saved manually, so don't take up network cache
|
||||||
|
return client.newCachelessCallWithProgress(imageRequest(page), page)
|
||||||
|
.awaitSuccess()
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the request for getting the source image. Override only if it's needed to override
|
* Returns the request for getting the source image. Override only if it's needed to override
|
||||||
* the url, send different headers or request method like POST.
|
* the url, send different headers or request method like POST.
|
||||||
|
|
Reference in a new issue