MangaDex: remove R18 setting in favor of following account setting

This commit is contained in:
arkon 2020-02-17 10:10:59 -05:00
parent 27616110a0
commit 2d8061a677
2 changed files with 7 additions and 108 deletions

View File

@ -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'
} }

View File

@ -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"