[RU]LibGoup fix IOException 18+ & status 1.3 more smart (#12166)

This commit is contained in:
Ejan 2022-06-12 19:14:21 +05:00 committed by GitHub
parent 3f01076936
commit c5cd8463b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 30 deletions

View File

@ -1,22 +1,14 @@
package eu.kanade.tachiyomi.extension.ru.hentailib package eu.kanade.tachiyomi.extension.ru.hentailib
import android.app.Application import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
import android.content.SharedPreferences
import android.widget.Toast
import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import java.io.IOException
import okhttp3.Headers import okhttp3.Headers
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import java.io.IOException
class HentaiLib : LibGroup("HentaiLib", "https://hentailib.me", "ru") { class HentaiLib : LibGroup("HentaiLib", "https://hentailib.me", "ru") {

View File

@ -5,16 +5,17 @@ import android.content.SharedPreferences
import android.widget.Toast import android.widget.Toast
import androidx.preference.ListPreference import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup import eu.kanade.tachiyomi.multisrc.libgroup.LibGroup
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import okhttp3.Headers import okhttp3.Headers
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.io.IOException
class MangaLib : LibGroup("MangaLib", "https://mangalib.me", "ru") { class MangaLib : LibGroup("MangaLib", "https://mangalib.me", "ru") {
@ -26,6 +27,16 @@ class MangaLib : LibGroup("MangaLib", "https://mangalib.me", "ru") {
override val client: OkHttpClient = super.client.newBuilder() override val client: OkHttpClient = super.client.newBuilder()
.addInterceptor(::imageContentTypeIntercept) .addInterceptor(::imageContentTypeIntercept)
.addInterceptor { chain ->
val originalRequest = chain.request()
val response = chain.proceed(originalRequest)
if (originalRequest.url.toString().contains(baseUrl))
if (!network.cloudflareClient.newCall(GET(baseUrl, headers))
.execute().body!!.string().contains("m-menu__user-info") && response.code == 404
)
throw IOException("Для просмотра 18+ контента необходима авторизация через WebView")
return@addInterceptor response
}
.build() .build()
private var csrfToken: String = "" private var csrfToken: String = ""

View File

@ -9,7 +9,7 @@ class LibGenerator: ThemeSourceGenerator {
override val themeClass = "LibGroup" override val themeClass = "LibGroup"
override val baseVersionCode: Int = 2 override val baseVersionCode: Int = 3
override val sources = listOf( override val sources = listOf(
SingleLang("MangaLib", "https://mangalib.me", "ru", overrideVersionCode = 74), SingleLang("MangaLib", "https://mangalib.me", "ru", overrideVersionCode = 74),

View File

@ -46,6 +46,7 @@ import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
abstract class LibGroup( abstract class LibGroup(
override val name: String, override val name: String,
override val baseUrl: String, override val baseUrl: String,
@ -238,21 +239,28 @@ abstract class LibGroup(
manga.thumbnail_url = document.select(".media-header__cover").attr("src") manga.thumbnail_url = document.select(".media-header__cover").attr("src")
manga.author = body.select("div.media-info-list__title:contains(Автор) + div a").joinToString { it.text() } manga.author = body.select("div.media-info-list__title:contains(Автор) + div a").joinToString { it.text() }
manga.artist = body.select("div.media-info-list__title:contains(Художник) + div a").joinToString { it.text() } manga.artist = body.select("div.media-info-list__title:contains(Художник) + div a").joinToString { it.text() }
val StatusTranslate = body.select("div.media-info-list__title:contains(Статус перевода) + div").text().lowercase(Locale.ROOT)
val StatusTitle = body.select("div.media-info-list__title:contains(Статус тайтла) + div").text().lowercase(Locale.ROOT)
manga.status = if (document.html().contains("paper empty section") manga.status = if (document.html().contains("paper empty section")
) { ) {
SManga.LICENSED SManga.LICENSED
} else } else
when ( when {
body.select("div.media-info-list__title:contains(Статус тайтла) + div") StatusTranslate.contains("завершен" ) && StatusTitle.contains("приостановлен" ) || StatusTranslate.contains("заморожен" ) -> SManga.ON_HIATUS
.text() StatusTranslate.contains("завершен" ) && StatusTitle.contains("выпуск прекращён" ) -> SManga.CANCELLED
.lowercase(Locale.ROOT) StatusTranslate.contains("продолжается" ) -> SManga.ONGOING
) { StatusTranslate.contains("завершен" ) -> SManga.COMPLETED
else -> when (StatusTitle){
"онгоинг" -> SManga.ONGOING "онгоинг" -> SManga.ONGOING
"анонс" -> SManga.ONGOING
"завершён" -> SManga.COMPLETED "завершён" -> SManga.COMPLETED
"приостановлен" -> SManga.ON_HIATUS "приостановлен" -> SManga.ON_HIATUS
"выпуск прекращён" -> SManga.CANCELLED "выпуск прекращён" -> SManga.CANCELLED
else -> SManga.UNKNOWN else -> SManga.UNKNOWN
} }
}
manga.genre = category + ", " + rawAgeStop + ", " + genres.joinToString { it.trim() } manga.genre = category + ", " + rawAgeStop + ", " + genres.joinToString { it.trim() }
val altName = if (dataManga!!.jsonObject["altNames"]?.jsonArray.orEmpty().isNotEmpty()) val altName = if (dataManga!!.jsonObject["altNames"]?.jsonArray.orEmpty().isNotEmpty())
@ -384,13 +392,6 @@ abstract class LibGroup(
override fun pageListParse(response: Response): List<Page> { override fun pageListParse(response: Response): List<Page> {
val document = response.asJsoup() val document = response.asJsoup()
val redirect = document.html()
if (!redirect.contains("window.__info")) {
if (redirect.contains("hold-transition login-page")) {
throw Exception("Для просмотра 18+ контента необходима авторизация через WebView")
}
}
val chapInfo = document val chapInfo = document
.select("script:containsData(window.__info)") .select("script:containsData(window.__info)")
.first() .first()