diff --git a/multisrc/overrides/madtheme/mangabuddy/src/MangaBuddy.kt b/multisrc/overrides/madtheme/mangabuddy/src/MangaBuddy.kt index 17a9eb9be..a2bb923a4 100644 --- a/multisrc/overrides/madtheme/mangabuddy/src/MangaBuddy.kt +++ b/multisrc/overrides/madtheme/mangabuddy/src/MangaBuddy.kt @@ -5,10 +5,7 @@ import android.content.SharedPreferences import androidx.preference.ListPreference import androidx.preference.PreferenceScreen import eu.kanade.tachiyomi.multisrc.madtheme.MadTheme -import eu.kanade.tachiyomi.network.interceptor.rateLimitHost import eu.kanade.tachiyomi.source.ConfigurableSource -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get @@ -19,10 +16,6 @@ class MangaBuddy : "en" ), ConfigurableSource { - override val client: OkHttpClient = super.client.newBuilder() - .rateLimitHost(baseUrl.toHttpUrl(), 1, 1) - .build() - private val preferences: SharedPreferences by lazy { Injekt.get().getSharedPreferences("source_$id", 0x0000) } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt index 54d190787..270ad9e15 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadTheme.kt @@ -1,6 +1,8 @@ package eu.kanade.tachiyomi.multisrc.madtheme import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.asObservable +import eu.kanade.tachiyomi.network.interceptor.rateLimit import eu.kanade.tachiyomi.network.interceptor.rateLimitHost import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.FilterList @@ -12,6 +14,8 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource import eu.kanade.tachiyomi.util.asJsoup import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive import okhttp3.Headers import okhttp3.HttpUrl.Companion.toHttpUrl import okhttp3.OkHttpClient @@ -19,6 +23,7 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import rx.Observable import uy.kohesive.injekt.injectLazy import java.text.ParseException import java.text.SimpleDateFormat @@ -42,6 +47,12 @@ abstract class MadTheme( .rateLimitHost("https://s1.mbcdnv5.xyz".toHttpUrl(), 1, 1) .build() + // TODO: better cookie sharing + // TODO: don't count cached responses against rate limit + private val chapterClient: OkHttpClient = network.cloudflareClient.newBuilder() + .rateLimit(1, 12) + .build() + override fun headersBuilder() = Headers.Builder().apply { add("Referer", "$baseUrl/") } @@ -150,6 +161,35 @@ abstract class MadTheme( } // Chapters + override fun fetchChapterList(manga: SManga): Observable> { + // API is heavily rate limited. Use custom client + return if (manga.status != SManga.LICENSED) { + chapterClient.newCall(chapterListRequest(manga)) + .asObservable() + .map { response -> + chapterListParse(response) + } + } else { + Observable.error(Exception("Licensed - No chapters to show")) + } + } + + override fun chapterListParse(response: Response): List { + if (response.code in 200..299) { + return super.chapterListParse(response) + } + + // Try to use message from site + response.body?.let { body -> + json.decodeFromString(body.string())["message"] + ?.jsonPrimitive + ?.content + ?.let { throw Exception(it) } + } + + throw Exception("HTTP error ${response.code}") + } + override fun chapterListRequest(manga: SManga): Request = GET("$baseUrl/api/manga${manga.url}/chapters?source=detail", headers) diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt index 16f587620..0c875639b 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madtheme/MadThemeGenerator.kt @@ -9,7 +9,7 @@ class MadThemeGenerator : ThemeSourceGenerator { override val themeClass = "MadTheme" - override val baseVersionCode: Int = 8 + override val baseVersionCode: Int = 9 override val sources = listOf( SingleLang("BeeHentai", "https://beehentai.com", "en", isNsfw = true),