Handle getImage for delegate sources

This commit is contained in:
Jobobby04 2023-02-09 17:44:21 -05:00
parent 83e23dedae
commit a51c25bdcf
6 changed files with 31 additions and 13 deletions

View File

@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.mdlist.MdList import eu.kanade.tachiyomi.data.track.mdlist.MdList
import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.network.awaitSuccess
import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.MetadataMangasPage import eu.kanade.tachiyomi.source.model.MetadataMangasPage
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
@ -194,9 +195,13 @@ class MangaDex(delegate: HttpSource, val context: Context) :
} }
override fun fetchImage(page: Page): Observable<Response> { override fun fetchImage(page: Page): Observable<Response> {
return pageHandler.fetchImage(page) { val call = pageHandler.getImageCall(page)
super.fetchImage(it) return call?.asObservableSuccess() ?: super.fetchImage(page)
} }
override suspend fun getImage(page: Page): Response {
val call = pageHandler.getImageCall(page)
return call?.awaitSuccess() ?: super.getImage(page)
} }
override fun fetchImageUrl(page: Page): Observable<String> { override fun fetchImageUrl(page: Page): Observable<String> {

View File

@ -62,6 +62,7 @@ class MergedSource : HttpSource() {
override fun fetchChapterList(manga: SManga) = throw UnsupportedOperationException() override fun fetchChapterList(manga: SManga) = throw UnsupportedOperationException()
override suspend fun getChapterList(manga: SManga) = throw UnsupportedOperationException() override suspend fun getChapterList(manga: SManga) = throw UnsupportedOperationException()
override fun fetchImage(page: Page) = throw UnsupportedOperationException() override fun fetchImage(page: Page) = throw UnsupportedOperationException()
override suspend fun getImage(page: Page): Response = throw UnsupportedOperationException()
override fun fetchImageUrl(page: Page) = throw UnsupportedOperationException() override fun fetchImageUrl(page: Page) = throw UnsupportedOperationException()
@Deprecated("Use the 1.x API instead", replaceWith = ReplaceWith("getPageList")) @Deprecated("Use the 1.x API instead", replaceWith = ReplaceWith("getPageList"))

View File

@ -3,7 +3,6 @@ package exh.md.handlers
import eu.kanade.domain.track.service.TrackPreferences import eu.kanade.domain.track.service.TrackPreferences
import eu.kanade.tachiyomi.data.track.mdlist.MdList import eu.kanade.tachiyomi.data.track.mdlist.MdList
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
@ -13,8 +12,8 @@ import exh.md.dto.AtHomeDto
import exh.md.service.MangaDexService import exh.md.service.MangaDexService
import exh.md.utils.MdApi import exh.md.utils.MdApi
import exh.md.utils.MdUtil import exh.md.utils.MdUtil
import okhttp3.Call
import okhttp3.Headers import okhttp3.Headers
import okhttp3.Response
import rx.Observable import rx.Observable
import kotlin.reflect.full.superclasses import kotlin.reflect.full.superclasses
import kotlin.reflect.jvm.isAccessible import kotlin.reflect.jvm.isAccessible
@ -103,30 +102,25 @@ class PageHandler(
} }
} }
fun fetchImage(page: Page, superMethod: (Page) -> Observable<Response>): Observable<Response> { fun getImageCall(page: Page): Call? {
xLogD(page.imageUrl) xLogD(page.imageUrl)
return when { return when {
page.imageUrl?.contains("mangaplus", true) == true -> { page.imageUrl?.contains("mangaplus", true) == true -> {
mangaPlusHandler.client.newCall(GET(page.imageUrl!!, headers)) mangaPlusHandler.client.newCall(GET(page.imageUrl!!, headers))
.asObservableSuccess()
} }
page.imageUrl?.contains("comikey", true) == true -> { page.imageUrl?.contains("comikey", true) == true -> {
comikeyHandler.client.newCall(GET(page.imageUrl!!, comikeyHandler.headers)) comikeyHandler.client.newCall(GET(page.imageUrl!!, comikeyHandler.headers))
.asObservableSuccess()
} }
page.imageUrl?.contains("/bfs/comic/", true) == true -> { page.imageUrl?.contains("/bfs/comic/", true) == true -> {
bilibiliHandler.client.newCall(GET(page.imageUrl!!, bilibiliHandler.headers)) bilibiliHandler.client.newCall(GET(page.imageUrl!!, bilibiliHandler.headers))
.asObservableSuccess()
} }
page.imageUrl?.contains("azuki", true) == true -> { page.imageUrl?.contains("azuki", true) == true -> {
azukiHandler.client.newCall(GET(page.imageUrl!!, azukiHandler.headers)) azukiHandler.client.newCall(GET(page.imageUrl!!, azukiHandler.headers))
.asObservableSuccess()
} }
page.imageUrl?.contains("mangahot", true) == true -> { page.imageUrl?.contains("mangahot", true) == true -> {
mangaHotHandler.client.newCall(GET(page.imageUrl!!, mangaHotHandler.headers)) mangaHotHandler.client.newCall(GET(page.imageUrl!!, mangaHotHandler.headers))
.asObservableSuccess()
} }
else -> superMethod(page) else -> null
} }
} }

View File

@ -343,7 +343,8 @@ abstract class HttpSource : CatalogueSource {
* *
* @param page the page whose source image has to be downloaded. * @param page the page whose source image has to be downloaded.
*/ */
suspend fun getImage(page: Page): Response { /* SY --> */
open /* SY <-- */ suspend fun getImage(page: Page): Response {
// images will be cached or saved manually, so don't take up network cache // images will be cached or saved manually, so don't take up network cache
return client.newCachelessCallWithProgress(imageRequest(page), page) return client.newCachelessCallWithProgress(imageRequest(page), page)
.awaitSuccess() .awaitSuccess()

View File

@ -266,6 +266,16 @@ abstract class DelegatedHttpSource(val delegate: HttpSource) : HttpSource() {
return delegate.fetchImage(page) return delegate.fetchImage(page)
} }
/**
* Returns the response of the source image.
*
* @param page the page whose source image has to be downloaded.
*/
override suspend fun getImage(page: Page): Response {
ensureDelegateCompatible()
return delegate.getImage(page)
}
/** /**
* Called before inserting a new chapter into database. Use it if you need to override chapter * Called before inserting a new chapter into database. Use it if you need to override chapter
* fields, like the title or the chapter number. Do not change anything to [manga]. * fields, like the title or the chapter number. Do not change anything to [manga].

View File

@ -233,6 +233,13 @@ class EnhancedHttpSource(
*/ */
override fun fetchImage(page: Page) = source().fetchImage(page) override fun fetchImage(page: Page) = source().fetchImage(page)
/**
* Returns the response of the source image.
*
* @param page the page whose source image has to be downloaded.
*/
override suspend fun getImage(page: Page) = source().getImage(page)
/** /**
* Called before inserting a new chapter into database. Use it if you need to override chapter * Called before inserting a new chapter into database. Use it if you need to override chapter
* fields, like the title or the chapter number. Do not change anything to [manga]. * fields, like the title or the chapter number. Do not change anything to [manga].