mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	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:
		@@ -200,7 +200,7 @@ class HttpPageLoader(
 | 
			
		||||
 | 
			
		||||
            if (!chapterCache.isImageInCache(imageUrl)) {
 | 
			
		||||
                page.status = Page.State.DOWNLOAD_IMAGE
 | 
			
		||||
                val imageResponse = source.fetchImage(page).awaitSingle()
 | 
			
		||||
                val imageResponse = source.getImage(page)
 | 
			
		||||
                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.NetworkHelper
 | 
			
		||||
import eu.kanade.tachiyomi.network.asObservableSuccess
 | 
			
		||||
import eu.kanade.tachiyomi.network.awaitSuccess
 | 
			
		||||
import eu.kanade.tachiyomi.network.newCachelessCallWithProgress
 | 
			
		||||
import eu.kanade.tachiyomi.source.CatalogueSource
 | 
			
		||||
import eu.kanade.tachiyomi.source.model.FilterList
 | 
			
		||||
@@ -305,6 +306,17 @@ abstract class HttpSource : CatalogueSource {
 | 
			
		||||
            .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
 | 
			
		||||
     * the url, send different headers or request method like POST.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user