Bato.to: update mirrors, pick one at random, deprecated mirror migration (#7317)
* Bato.to: update mirrors, pick one at random * add 'auto' mirror option * Do not use a deprecated mirror, even if explicitly set
This commit is contained in:
parent
7722a6e458
commit
a0e3441507
|
@ -14,8 +14,12 @@
|
||||||
|
|
||||||
<data android:host="*.bato.to" />
|
<data android:host="*.bato.to" />
|
||||||
<data android:host="bato.to" />
|
<data android:host="bato.to" />
|
||||||
<data android:host="*.batocc.com" />
|
<data android:host="*.batocomic.com" />
|
||||||
<data android:host="batocc.com" />
|
<data android:host="batocomic.com" />
|
||||||
|
<data android:host="*.batocomic.net" />
|
||||||
|
<data android:host="batocomic.net" />
|
||||||
|
<data android:host="*.batocomic.org" />
|
||||||
|
<data android:host="batocomic.org" />
|
||||||
<data android:host="*.batotoo.com" />
|
<data android:host="*.batotoo.com" />
|
||||||
<data android:host="batotoo.com" />
|
<data android:host="batotoo.com" />
|
||||||
<data android:host="*.batotwo.com" />
|
<data android:host="*.batotwo.com" />
|
||||||
|
@ -24,18 +28,40 @@
|
||||||
<data android:host="battwo.com" />
|
<data android:host="battwo.com" />
|
||||||
<data android:host="*.comiko.net" />
|
<data android:host="*.comiko.net" />
|
||||||
<data android:host="comiko.net" />
|
<data android:host="comiko.net" />
|
||||||
|
<data android:host="*.comiko.org" />
|
||||||
|
<data android:host="comiko.org" />
|
||||||
<data android:host="*.mangatoto.com" />
|
<data android:host="*.mangatoto.com" />
|
||||||
<data android:host="mangatoto.com" />
|
<data android:host="mangatoto.com" />
|
||||||
<data android:host="*.mangatoto.net" />
|
<data android:host="*.mangatoto.net" />
|
||||||
<data android:host="mangatoto.net" />
|
<data android:host="mangatoto.net" />
|
||||||
<data android:host="*.mangatoto.org" />
|
<data android:host="*.mangatoto.org" />
|
||||||
<data android:host="mangatoto.org" />
|
<data android:host="mangatoto.org" />
|
||||||
<data android:host="*.mycordant.co.uk" />
|
<data android:host="*.readtoto.com" />
|
||||||
<data android:host="mycordant.co.uk" />
|
<data android:host="readtoto.com" />
|
||||||
|
<data android:host="*.readtoto.net" />
|
||||||
|
<data android:host="readtoto.net" />
|
||||||
|
<data android:host="*.readtoto.org" />
|
||||||
|
<data android:host="readtoto.org" />
|
||||||
|
<data android:host="*.xbato.com" />
|
||||||
|
<data android:host="xbato.com" />
|
||||||
|
<data android:host="*.xbato.net" />
|
||||||
|
<data android:host="xbato.net" />
|
||||||
|
<data android:host="*.xbato.org" />
|
||||||
|
<data android:host="xbato.org" />
|
||||||
|
<data android:host="*.zbato.com" />
|
||||||
|
<data android:host="zbato.com" />
|
||||||
|
<data android:host="*.zbato.net" />
|
||||||
|
<data android:host="zbato.net" />
|
||||||
|
<data android:host="*.zbato.org" />
|
||||||
|
<data android:host="zbato.org" />
|
||||||
<data android:host="*.dto.to" />
|
<data android:host="*.dto.to" />
|
||||||
<data android:host="dto.to" />
|
<data android:host="dto.to" />
|
||||||
|
<data android:host="*.fto.to" />
|
||||||
|
<data android:host="fto.to" />
|
||||||
<data android:host="*.hto.to" />
|
<data android:host="*.hto.to" />
|
||||||
<data android:host="hto.to" />
|
<data android:host="hto.to" />
|
||||||
|
<data android:host="*.jto.to" />
|
||||||
|
<data android:host="jto.to" />
|
||||||
<data android:host="*.mto.to" />
|
<data android:host="*.mto.to" />
|
||||||
<data android:host="mto.to" />
|
<data android:host="mto.to" />
|
||||||
<data android:host="*.wto.to" />
|
<data android:host="*.wto.to" />
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
ext {
|
ext {
|
||||||
extName = 'Bato.to'
|
extName = 'Bato.to'
|
||||||
extClass = '.BatoToFactory'
|
extClass = '.BatoToFactory'
|
||||||
extVersionCode = 47
|
extVersionCode = 48
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.content.SharedPreferences
|
||||||
import androidx.preference.CheckBoxPreference
|
import androidx.preference.CheckBoxPreference
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
|
import eu.kanade.tachiyomi.extension.BuildConfig
|
||||||
import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES
|
import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES
|
||||||
import eu.kanade.tachiyomi.lib.cryptoaes.Deobfuscator
|
import eu.kanade.tachiyomi.lib.cryptoaes.Deobfuscator
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
|
@ -100,11 +101,25 @@ open class BatoTo(
|
||||||
if (current.isNotEmpty()) {
|
if (current.isNotEmpty()) {
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
field = getMirrorPref()!!
|
field = getMirrorPref()
|
||||||
return field
|
return field
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getMirrorPref(): String? = preferences.getString("${MIRROR_PREF_KEY}_$lang", MIRROR_PREF_DEFAULT_VALUE)
|
private fun getMirrorPref(): String {
|
||||||
|
return preferences.getString("${MIRROR_PREF_KEY}_$lang", MIRROR_PREF_DEFAULT_VALUE)
|
||||||
|
?.takeUnless { it == MIRROR_PREF_DEFAULT_VALUE }
|
||||||
|
?: let {
|
||||||
|
val seed = runCatching {
|
||||||
|
val pm = Injekt.get<Application>().packageManager
|
||||||
|
pm.getPackageInfo(BuildConfig.APPLICATION_ID, 0).lastUpdateTime
|
||||||
|
}.getOrElse {
|
||||||
|
BuildConfig.VERSION_NAME.hashCode().toLong()
|
||||||
|
}
|
||||||
|
|
||||||
|
MIRROR_PREF_ENTRY_VALUES[1 + (seed % (MIRROR_PREF_ENTRIES.size - 1)).toInt()]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun getAltChapterListPref(): Boolean = preferences.getBoolean("${ALT_CHAPTER_LIST_PREF_KEY}_$lang", ALT_CHAPTER_LIST_PREF_DEFAULT_VALUE)
|
private fun getAltChapterListPref(): Boolean = preferences.getBoolean("${ALT_CHAPTER_LIST_PREF_KEY}_$lang", ALT_CHAPTER_LIST_PREF_DEFAULT_VALUE)
|
||||||
private fun isRemoveTitleVersion(): Boolean {
|
private fun isRemoveTitleVersion(): Boolean {
|
||||||
return preferences.getBoolean("${REMOVE_TITLE_VERSION_PREF}_$lang", false)
|
return preferences.getBoolean("${REMOVE_TITLE_VERSION_PREF}_$lang", false)
|
||||||
|
@ -327,6 +342,12 @@ open class BatoTo(
|
||||||
|
|
||||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||||
if (manga.url.startsWith("http")) {
|
if (manga.url.startsWith("http")) {
|
||||||
|
// Check if trying to use a deprecated mirror, force current mirror
|
||||||
|
val httpUrl = manga.url.toHttpUrl()
|
||||||
|
if ("https://${httpUrl.host}" in DEPRECATED_MIRRORS) {
|
||||||
|
val newHttpUrl = httpUrl.newBuilder().host(getMirrorPref().toHttpUrl().host)
|
||||||
|
return GET(newHttpUrl.build(), headers)
|
||||||
|
}
|
||||||
return GET(manga.url, headers)
|
return GET(manga.url, headers)
|
||||||
}
|
}
|
||||||
return super.mangaDetailsRequest(manga)
|
return super.mangaDetailsRequest(manga)
|
||||||
|
@ -414,6 +435,12 @@ open class BatoTo(
|
||||||
|
|
||||||
GET("$baseUrl/rss/series/$id.xml", headers)
|
GET("$baseUrl/rss/series/$id.xml", headers)
|
||||||
} else if (manga.url.startsWith("http")) {
|
} else if (manga.url.startsWith("http")) {
|
||||||
|
// Check if trying to use a deprecated mirror, force current mirror
|
||||||
|
val httpUrl = manga.url.toHttpUrl()
|
||||||
|
if ("https://${httpUrl.host}" in DEPRECATED_MIRRORS) {
|
||||||
|
val newHttpUrl = httpUrl.newBuilder().host(getMirrorPref().toHttpUrl().host)
|
||||||
|
return GET(newHttpUrl.build(), headers)
|
||||||
|
}
|
||||||
GET(manga.url, headers)
|
GET(manga.url, headers)
|
||||||
} else {
|
} else {
|
||||||
super.chapterListRequest(manga)
|
super.chapterListRequest(manga)
|
||||||
|
@ -510,6 +537,12 @@ open class BatoTo(
|
||||||
|
|
||||||
override fun pageListRequest(chapter: SChapter): Request {
|
override fun pageListRequest(chapter: SChapter): Request {
|
||||||
if (chapter.url.startsWith("http")) {
|
if (chapter.url.startsWith("http")) {
|
||||||
|
// Check if trying to use a deprecated mirror, force current mirror
|
||||||
|
val httpUrl = chapter.url.toHttpUrl()
|
||||||
|
if ("https://${httpUrl.host}" in DEPRECATED_MIRRORS) {
|
||||||
|
val newHttpUrl = httpUrl.newBuilder().host(getMirrorPref().toHttpUrl().host)
|
||||||
|
return GET(newHttpUrl.build(), headers)
|
||||||
|
}
|
||||||
return GET(chapter.url, headers)
|
return GET(chapter.url, headers)
|
||||||
}
|
}
|
||||||
return super.pageListRequest(chapter)
|
return super.pageListRequest(chapter)
|
||||||
|
@ -1004,7 +1037,7 @@ open class BatoTo(
|
||||||
private const val MIRROR_PREF_TITLE = "Mirror"
|
private const val MIRROR_PREF_TITLE = "Mirror"
|
||||||
private const val REMOVE_TITLE_VERSION_PREF = "REMOVE_TITLE_VERSION"
|
private const val REMOVE_TITLE_VERSION_PREF = "REMOVE_TITLE_VERSION"
|
||||||
private val MIRROR_PREF_ENTRIES = arrayOf(
|
private val MIRROR_PREF_ENTRIES = arrayOf(
|
||||||
"zbato.org",
|
"Auto",
|
||||||
"batocomic.com",
|
"batocomic.com",
|
||||||
"batocomic.net",
|
"batocomic.net",
|
||||||
"batocomic.org",
|
"batocomic.org",
|
||||||
|
@ -1016,23 +1049,25 @@ open class BatoTo(
|
||||||
"readtoto.com",
|
"readtoto.com",
|
||||||
"readtoto.net",
|
"readtoto.net",
|
||||||
"readtoto.org",
|
"readtoto.org",
|
||||||
"dto.to",
|
|
||||||
"fto.to",
|
|
||||||
"jto.to",
|
|
||||||
"hto.to",
|
|
||||||
"mto.to",
|
|
||||||
"wto.to",
|
|
||||||
"xbato.com",
|
"xbato.com",
|
||||||
"xbato.net",
|
"xbato.net",
|
||||||
"xbato.org",
|
"xbato.org",
|
||||||
"zbato.com",
|
"zbato.com",
|
||||||
"zbato.net",
|
"zbato.net",
|
||||||
|
"zbato.org",
|
||||||
|
"dto.to",
|
||||||
|
"fto.to",
|
||||||
|
"hto.to",
|
||||||
|
"jto.to",
|
||||||
|
"mto.to",
|
||||||
|
"wto.to",
|
||||||
)
|
)
|
||||||
private val MIRROR_PREF_ENTRY_VALUES = MIRROR_PREF_ENTRIES.map { "https://$it" }.toTypedArray()
|
private val MIRROR_PREF_ENTRY_VALUES = MIRROR_PREF_ENTRIES.map { "https://$it" }.toTypedArray()
|
||||||
private val MIRROR_PREF_DEFAULT_VALUE = MIRROR_PREF_ENTRY_VALUES[0]
|
private val MIRROR_PREF_DEFAULT_VALUE = MIRROR_PREF_ENTRY_VALUES[0]
|
||||||
|
|
||||||
private val DEPRECATED_MIRRORS = listOf(
|
private val DEPRECATED_MIRRORS = listOf(
|
||||||
"https://bato.to",
|
"https://bato.to",
|
||||||
|
"https://batocc.com", // parked
|
||||||
"https://mangatoto.com",
|
"https://mangatoto.com",
|
||||||
"https://mangatoto.net",
|
"https://mangatoto.net",
|
||||||
"https://mangatoto.org",
|
"https://mangatoto.org",
|
||||||
|
|
Loading…
Reference in New Issue