MangaDex: remove R18 setting in favor of following account setting
This commit is contained in:
parent
27616110a0
commit
2d8061a677
@ -5,7 +5,7 @@ ext {
|
|||||||
appName = 'Tachiyomi: MangaDex'
|
appName = 'Tachiyomi: MangaDex'
|
||||||
pkgNameSuffix = 'all.mangadex'
|
pkgNameSuffix = 'all.mangadex'
|
||||||
extClass = '.MangadexFactory'
|
extClass = '.MangadexFactory'
|
||||||
extVersionCode = 80
|
extVersionCode = 81
|
||||||
libVersion = '1.2'
|
libVersion = '1.2'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,10 +23,8 @@ import org.jsoup.parser.Parser
|
|||||||
import rx.Observable
|
import rx.Observable
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import java.net.URLEncoder
|
import java.util.Date
|
||||||
import java.util.*
|
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
import kotlin.collections.set
|
|
||||||
|
|
||||||
abstract class Mangadex(
|
abstract class Mangadex(
|
||||||
override val lang: String,
|
override val lang: String,
|
||||||
@ -49,39 +47,15 @@ abstract class Mangadex(
|
|||||||
private val rateLimitInterceptor = RateLimitInterceptor(4)
|
private val rateLimitInterceptor = RateLimitInterceptor(4)
|
||||||
|
|
||||||
override val client: OkHttpClient = network.client.newBuilder()
|
override val client: OkHttpClient = network.client.newBuilder()
|
||||||
|
.connectTimeout(10, TimeUnit.SECONDS)
|
||||||
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
.addNetworkInterceptor(rateLimitInterceptor)
|
.addNetworkInterceptor(rateLimitInterceptor)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
private fun clientBuilder(): OkHttpClient = clientBuilder(getShowR18())
|
|
||||||
|
|
||||||
private fun clientBuilder(r18Toggle: Int): OkHttpClient = client.newBuilder()
|
|
||||||
.connectTimeout(10, TimeUnit.SECONDS)
|
|
||||||
.readTimeout(30, TimeUnit.SECONDS)
|
|
||||||
.addNetworkInterceptor { chain ->
|
|
||||||
val originalCookies = chain.request().header("Cookie") ?: ""
|
|
||||||
val newReq = chain
|
|
||||||
.request()
|
|
||||||
.newBuilder()
|
|
||||||
.header("Cookie", "$originalCookies; ${cookiesHeader(r18Toggle, langCode)}")
|
|
||||||
.build()
|
|
||||||
chain.proceed(newReq)
|
|
||||||
}.build()!!
|
|
||||||
|
|
||||||
override fun headersBuilder() = Headers.Builder().apply {
|
override fun headersBuilder() = Headers.Builder().apply {
|
||||||
add("User-Agent", "Tachiyomi " + System.getProperty("http.agent"))
|
add("User-Agent", "Tachiyomi " + System.getProperty("http.agent"))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun cookiesHeader(r18Toggle: Int, langCode: Int): String {
|
|
||||||
val cookies = mutableMapOf<String, String>()
|
|
||||||
cookies["mangadex_h_toggle"] = r18Toggle.toString()
|
|
||||||
cookies["mangadex_filter_langs"] = langCode.toString()
|
|
||||||
return buildCookies(cookies)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun buildCookies(cookies: Map<String, String>) = cookies.entries.joinToString(separator = "; ", postfix = ";") {
|
|
||||||
"${URLEncoder.encode(it.key, "UTF-8")}=${URLEncoder.encode(it.value, "UTF-8")}"
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun popularMangaSelector() = "div.manga-entry"
|
override fun popularMangaSelector() = "div.manga-entry"
|
||||||
|
|
||||||
override fun latestUpdatesSelector() = "tr a.manga_title"
|
override fun latestUpdatesSelector() = "tr a.manga_title"
|
||||||
@ -136,22 +110,6 @@ abstract class Mangadex(
|
|||||||
|
|
||||||
override fun searchMangaNextPageSelector() = ".pagination li:not(.disabled) span[title*=last page]:not(disabled)"
|
override fun searchMangaNextPageSelector() = ".pagination li:not(.disabled) span[title*=last page]:not(disabled)"
|
||||||
|
|
||||||
override fun fetchPopularManga(page: Int): Observable<MangasPage> {
|
|
||||||
return clientBuilder().newCall(popularMangaRequest(page))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
popularMangaParse(response)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun fetchLatestUpdates(page: Int): Observable<MangasPage> {
|
|
||||||
return clientBuilder().newCall(latestUpdatesRequest(page))
|
|
||||||
.asObservableSuccess()
|
|
||||||
.map { response ->
|
|
||||||
latestUpdatesParse(response)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable<MangasPage> {
|
||||||
return if (query.startsWith(PREFIX_ID_SEARCH)) {
|
return if (query.startsWith(PREFIX_ID_SEARCH)) {
|
||||||
val realQuery = query.removePrefix(PREFIX_ID_SEARCH)
|
val realQuery = query.removePrefix(PREFIX_ID_SEARCH)
|
||||||
@ -163,7 +121,7 @@ abstract class Mangadex(
|
|||||||
MangasPage(listOf(details), false)
|
MangasPage(listOf(details), false)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
getSearchClient(filters).newCall(searchMangaRequest(page, query, filters))
|
client.newCall(searchMangaRequest(page, query, filters))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
.map { response ->
|
.map { response ->
|
||||||
searchMangaParse(response)
|
searchMangaParse(response)
|
||||||
@ -171,22 +129,6 @@ abstract class Mangadex(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSearchClient(filters: FilterList): OkHttpClient {
|
|
||||||
filters.forEach { filter ->
|
|
||||||
when (filter) {
|
|
||||||
is R18 -> {
|
|
||||||
return when (filter.state) {
|
|
||||||
1 -> clientBuilder(ALL)
|
|
||||||
2 -> clientBuilder(ONLY_R18)
|
|
||||||
3 -> clientBuilder(NO_R18)
|
|
||||||
else -> clientBuilder()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return clientBuilder()
|
|
||||||
}
|
|
||||||
|
|
||||||
private var groupSearch = ""
|
private var groupSearch = ""
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
@ -338,7 +280,7 @@ abstract class Mangadex(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
override fun fetchMangaDetails(manga: SManga): Observable<SManga> {
|
||||||
return clientBuilder().newCall(apiRequest(manga))
|
return client.newCall(apiRequest(manga))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
.map { response ->
|
.map { response ->
|
||||||
mangaDetailsParse(response).apply { initialized = true }
|
mangaDetailsParse(response).apply { initialized = true }
|
||||||
@ -410,7 +352,7 @@ abstract class Mangadex(
|
|||||||
override fun chapterListSelector() = ""
|
override fun chapterListSelector() = ""
|
||||||
|
|
||||||
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> {
|
||||||
return clientBuilder().newCall(apiRequest(manga))
|
return client.newCall(apiRequest(manga))
|
||||||
.asObservableSuccess()
|
.asObservableSuccess()
|
||||||
.map { response ->
|
.map { response ->
|
||||||
chapterListParse(response)
|
chapterListParse(response)
|
||||||
@ -580,21 +522,6 @@ abstract class Mangadex(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) {
|
||||||
val myPref = androidx.preference.ListPreference(screen.context).apply {
|
|
||||||
key = SHOW_R18_PREF_Title
|
|
||||||
title = SHOW_R18_PREF_Title
|
|
||||||
|
|
||||||
title = SHOW_R18_PREF_Title
|
|
||||||
entries = arrayOf("Show No R18+", "Show All", "Show Only R18+")
|
|
||||||
entryValues = arrayOf("0", "1", "2")
|
|
||||||
summary = "%s"
|
|
||||||
|
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
|
||||||
val selected = newValue as String
|
|
||||||
val index = this.findIndexOfValue(selected)
|
|
||||||
preferences.edit().putInt(SHOW_R18_PREF, index).commit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val thumbsPref = androidx.preference.ListPreference(screen.context).apply {
|
val thumbsPref = androidx.preference.ListPreference(screen.context).apply {
|
||||||
key = SHOW_THUMBNAIL_PREF_Title
|
key = SHOW_THUMBNAIL_PREF_Title
|
||||||
title = SHOW_THUMBNAIL_PREF_Title
|
title = SHOW_THUMBNAIL_PREF_Title
|
||||||
@ -623,27 +550,11 @@ abstract class Mangadex(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
screen.addPreference(myPref)
|
|
||||||
screen.addPreference(thumbsPref)
|
screen.addPreference(thumbsPref)
|
||||||
screen.addPreference(serverPref)
|
screen.addPreference(serverPref)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
val myPref = ListPreference(screen.context).apply {
|
|
||||||
key = SHOW_R18_PREF_Title
|
|
||||||
title = SHOW_R18_PREF_Title
|
|
||||||
|
|
||||||
title = SHOW_R18_PREF_Title
|
|
||||||
entries = arrayOf("Show No R18+", "Show All", "Show Only R18+")
|
|
||||||
entryValues = arrayOf("0", "1", "2")
|
|
||||||
summary = "%s"
|
|
||||||
|
|
||||||
setOnPreferenceChangeListener { _, newValue ->
|
|
||||||
val selected = newValue as String
|
|
||||||
val index = this.findIndexOfValue(selected)
|
|
||||||
preferences.edit().putInt(SHOW_R18_PREF, index).commit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val thumbsPref = ListPreference(screen.context).apply {
|
val thumbsPref = ListPreference(screen.context).apply {
|
||||||
key = SHOW_THUMBNAIL_PREF_Title
|
key = SHOW_THUMBNAIL_PREF_Title
|
||||||
title = SHOW_THUMBNAIL_PREF_Title
|
title = SHOW_THUMBNAIL_PREF_Title
|
||||||
@ -672,12 +583,10 @@ abstract class Mangadex(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
screen.addPreference(myPref)
|
|
||||||
screen.addPreference(thumbsPref)
|
screen.addPreference(thumbsPref)
|
||||||
screen.addPreference(serverPref)
|
screen.addPreference(serverPref)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getShowR18(): Int = preferences.getInt(SHOW_R18_PREF, 0)
|
|
||||||
private fun getShowThumbnail(): Int = preferences.getInt(SHOW_THUMBNAIL_PREF, 0)
|
private fun getShowThumbnail(): Int = preferences.getInt(SHOW_THUMBNAIL_PREF, 0)
|
||||||
private fun getServer(): String {
|
private fun getServer(): String {
|
||||||
val default = SERVER_PREF_ENTRY_VALUES.first()
|
val default = SERVER_PREF_ENTRY_VALUES.first()
|
||||||
@ -692,7 +601,6 @@ abstract class Mangadex(
|
|||||||
private class ContentList(contents: List<Tag>) : Filter.Group<Tag>("Content", contents)
|
private class ContentList(contents: List<Tag>) : Filter.Group<Tag>("Content", contents)
|
||||||
private class FormatList(formats: List<Tag>) : Filter.Group<Tag>("Format", formats)
|
private class FormatList(formats: List<Tag>) : Filter.Group<Tag>("Format", formats)
|
||||||
private class GenreList(genres: List<Tag>) : Filter.Group<Tag>("Genres", genres)
|
private class GenreList(genres: List<Tag>) : Filter.Group<Tag>("Genres", genres)
|
||||||
private class R18 : Filter.Select<String>("R18+", arrayOf("Default", "Show all", "Show only", "Show none"))
|
|
||||||
private class ScanGroup(name: String) : Filter.Text(name)
|
private class ScanGroup(name: String) : Filter.Text(name)
|
||||||
|
|
||||||
private fun getDemographic() = listOf(
|
private fun getDemographic() = listOf(
|
||||||
@ -723,7 +631,6 @@ abstract class Mangadex(
|
|||||||
override fun getFilterList() = FilterList(
|
override fun getFilterList() = FilterList(
|
||||||
TextField("Author", "author"),
|
TextField("Author", "author"),
|
||||||
TextField("Artist", "artist"),
|
TextField("Artist", "artist"),
|
||||||
R18(),
|
|
||||||
SortFilter(),
|
SortFilter(),
|
||||||
Demographic(getDemographic()),
|
Demographic(getDemographic()),
|
||||||
PublicationStatus(getPublicationStatus()),
|
PublicationStatus(getPublicationStatus()),
|
||||||
@ -834,14 +741,6 @@ abstract class Mangadex(
|
|||||||
companion object {
|
companion object {
|
||||||
private val WHITESPACE_REGEX = "\\s".toRegex()
|
private val WHITESPACE_REGEX = "\\s".toRegex()
|
||||||
|
|
||||||
// This number matches to the cookie
|
|
||||||
private const val NO_R18 = 0
|
|
||||||
private const val ALL = 1
|
|
||||||
private const val ONLY_R18 = 2
|
|
||||||
|
|
||||||
private const val SHOW_R18_PREF_Title = "Default R18 Setting"
|
|
||||||
private const val SHOW_R18_PREF = "showR18Default"
|
|
||||||
|
|
||||||
private const val LOW_QUALITY = 1
|
private const val LOW_QUALITY = 1
|
||||||
|
|
||||||
private const val SHOW_THUMBNAIL_PREF_Title = "Default thumbnail quality"
|
private const val SHOW_THUMBNAIL_PREF_Title = "Default thumbnail quality"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user