Clean up some code to follow best practices (#178)
* toHttpUrlOrNull()!! -> toHttpUrl() * Jsoup.parse(response.body.string()) -> response.asJsoup() * Some useless HttpUrl.newBuilder() calls * extlib v1.4 GET(HttpUrl)
This commit is contained in:
parent
2b9b92ceaa
commit
f612bc1c3f
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
@ -46,15 +45,13 @@ class AllHentai : GroupLe("AllHentai", "https://z.allhen.online", "ru") {
|
||||
is OrderBy -> {
|
||||
if (filter.state > 0) {
|
||||
val ord = arrayOf("not", "year", "rate", "popularity", "votes", "created", "updated")[filter.state]
|
||||
val ordUrl = "$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(ordUrl.toString(), headers)
|
||||
return GET("$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
is Tags -> {
|
||||
if (filter.state > 0) {
|
||||
val tagName = getTagsList()[filter.state].url
|
||||
val tagUrl = "$baseUrl/list/tag/$tagName?offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(tagUrl.toString(), headers)
|
||||
return GET("$baseUrl/list/tag/$tagName?offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
@ -57,8 +56,7 @@ class MintManga : GroupLe("MintManga", "https://mintmanga.com", "ru") {
|
||||
url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state])
|
||||
} else {
|
||||
val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state]
|
||||
val ordUrl = "$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(ordUrl.toString(), headers)
|
||||
return GET("$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
@ -57,8 +56,7 @@ class ReadManga : GroupLe("ReadManga", "https://readmanga.live", "ru") {
|
||||
url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state])
|
||||
} else {
|
||||
val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state]
|
||||
val ordUrl = "$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(ordUrl.toString(), headers)
|
||||
return GET("$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
@ -31,8 +30,7 @@ class RuMIX : GroupLe("RuMIX", "https://rumix.me", "ru") {
|
||||
url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state])
|
||||
} else {
|
||||
val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state]
|
||||
val ordUrl = "$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(ordUrl.toString(), headers)
|
||||
return GET("$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
else -> return@forEach
|
||||
|
@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.multisrc.grouple.GroupLe
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import uy.kohesive.injekt.Injekt
|
||||
import uy.kohesive.injekt.api.get
|
||||
@ -43,8 +42,7 @@ class SelfManga : GroupLe("SelfManga", "https://selfmanga.live", "ru") {
|
||||
url.addQueryParameter("sortType", arrayOf("RATING", "POPULARITY", "YEAR", "NAME", "DATE_CREATE", "DATE_UPDATE")[filter.state])
|
||||
} else {
|
||||
val ord = arrayOf("rate", "popularity", "year", "name", "created", "updated", "votes")[filter.state]
|
||||
val ordUrl = "$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(ordUrl.toString(), headers)
|
||||
return GET("$baseUrl/list?sortType=$ord&offset=${70 * (page - 1)}", headers)
|
||||
}
|
||||
}
|
||||
else -> return@forEach
|
||||
|
@ -52,7 +52,7 @@ class DoujinHentai : Madara(
|
||||
}
|
||||
}
|
||||
}
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = "div.c-tabs-item__content > div.c-tabs-item__content, ${popularMangaSelector()}"
|
||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import java.text.SimpleDateFormat
|
||||
@ -23,7 +23,7 @@ class PojokManga : Madara("Pojok Manga", "https://pojokmanga.net", "id", SimpleD
|
||||
override val mangaSubString = "komik"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrl/${searchPage(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = "$baseUrl/${searchPage(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
url.addQueryParameter("post_type", "wp-manga")
|
||||
filters.forEach { filter ->
|
||||
@ -70,13 +70,13 @@ class PojokManga : Madara("Pojok Manga", "https://pojokmanga.net", "id", SimpleD
|
||||
}
|
||||
is ProjectFilter -> {
|
||||
if (filter.toUriPart() == "project-filter-on") {
|
||||
url = "$baseUrl/project/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl/project/page/$page".toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = "div.c-tabs-item__content, div.page-item-detail"
|
||||
|
@ -3,7 +3,7 @@ package eu.kanade.tachiyomi.extension.en.toonily
|
||||
import eu.kanade.tachiyomi.multisrc.madara.Madara
|
||||
import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import java.text.SimpleDateFormat
|
||||
@ -51,7 +51,7 @@ class Toonily : Madara(
|
||||
val queries = request.url.queryParameterNames
|
||||
.filterNot { it == "s" }
|
||||
|
||||
val newUrl = "$baseUrl/${searchPage(page, query)}".toHttpUrlOrNull()!!.newBuilder().apply {
|
||||
val newUrl = "$baseUrl/${searchPage(page, query)}".toHttpUrl().newBuilder().apply {
|
||||
queries.map { q ->
|
||||
request.url.queryParameterValues(q).map {
|
||||
this.addQueryParameter(q, it)
|
||||
|
@ -38,7 +38,7 @@ class CosmicScansID : MangaThemesia("CosmicScans.id", "https://cosmicscans.id",
|
||||
else -> { /* Do Nothing */ }
|
||||
}
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = ".bixbox:not(.hothome):has(.hpage) .utao .uta .imgu, .bixbox:not(.hothome) .listupd .bs .bsx"
|
||||
|
@ -201,7 +201,7 @@ class KomikCast : MangaThemesia("Komik Cast", "https://komikcast.lol", "id", "/d
|
||||
else -> { /* Do Nothing */ }
|
||||
}
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
private class StatusFilter : SelectFilter(
|
||||
|
@ -55,7 +55,7 @@ class Ngomik : MangaThemesia("Ngomik", "https://ngomik.net", "id", "/manga") {
|
||||
else -> { /* Do Nothing */ }
|
||||
}
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = Headers.Builder()
|
||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Element
|
||||
import java.text.SimpleDateFormat
|
||||
@ -38,7 +38,7 @@ class Komikita : ZManga(
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
@ -51,13 +51,13 @@ class Komikita : ZManga(
|
||||
is ProjectFilter -> {
|
||||
if (filter.toUriPart() == "project-filter-on") {
|
||||
url =
|
||||
"$baseUrl$projectPageString/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
"$baseUrl$projectPageString/page/$page".toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun getFilterList(): FilterList {
|
||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.network.GET
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Element
|
||||
import java.text.SimpleDateFormat
|
||||
@ -32,20 +32,20 @@ class KomikPlay : ZManga("KomikPlay", "https://komikplay.com", "id", SimpleDateF
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
// if site has project page, default value "hasProjectPage" = false
|
||||
is ProjectFilter -> {
|
||||
if (filter.toUriPart() == "project-filter-on") {
|
||||
url = "$baseUrl$projectPageString/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl$projectPageString/page/$page".toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun getFilterList() = FilterList(
|
||||
|
@ -6,7 +6,7 @@ import eu.kanade.tachiyomi.network.interceptor.rateLimit
|
||||
import eu.kanade.tachiyomi.source.model.Filter
|
||||
import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Element
|
||||
@ -58,20 +58,20 @@ class SekteKomik : ZManga("Sekte Komik", "https://sektekomik.com", "id") {
|
||||
|
||||
// search
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = "$baseUrl/${pagePathSegment(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
// if site has project page, default value "hasProjectPage" = false
|
||||
is ProjectFilter -> {
|
||||
if (filter.toUriPart() == "project-filter-on") {
|
||||
url = "$baseUrl$projectPageString/${pagePathSegment(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl$projectPageString/${pagePathSegment(page)}".toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = "div.flexbox2-item"
|
||||
|
@ -42,7 +42,7 @@ abstract class BakaManga(
|
||||
return if (query.isNotEmpty()) {
|
||||
val url = "$baseUrl/page/$page".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("s", query)
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
} else {
|
||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||
val genreFilter = filterList.find { it is GenreFilter } as GenreFilter
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -59,7 +59,7 @@ open class EroMuse(override val name: String, override val baseUrl: String) : Ht
|
||||
if (url.contains(pageQueryRegex)) {
|
||||
url.replace(pageQueryRegex, "page=$int")
|
||||
} else {
|
||||
val httpUrl = url.toHttpUrlOrNull()!!
|
||||
val httpUrl = url.toHttpUrl()
|
||||
val builder = if (httpUrl.pathSegments.last().toIntOrNull() is Int) {
|
||||
httpUrl.newBuilder().removePathSegment(httpUrl.pathSegments.lastIndex)
|
||||
} else {
|
||||
@ -165,7 +165,7 @@ open class EroMuse(override val name: String, override val baseUrl: String) : Ht
|
||||
protected fun stackRequest(): Request {
|
||||
stackItem = pageStack.removeLast()
|
||||
val url = if (stackItem.pageType == AUTHOR && currentSortingMode.isNotEmpty() && !stackItem.url.contains("sort")) {
|
||||
stackItem.url.toHttpUrlOrNull()!!.newBuilder().addQueryParameter("sort", currentSortingMode).toString()
|
||||
stackItem.url.toHttpUrl().newBuilder().addQueryParameter("sort", currentSortingMode).toString()
|
||||
} else {
|
||||
stackItem.url
|
||||
}
|
||||
@ -208,14 +208,14 @@ open class EroMuse(override val name: String, override val baseUrl: String) : Ht
|
||||
currentSortingMode = filterList.filterIsInstance<SortFilter>().first().toQueryValue()
|
||||
|
||||
if (query.isNotBlank()) {
|
||||
val url = "$baseUrl/search?q=$query".toHttpUrlOrNull()!!.newBuilder().apply {
|
||||
val url = "$baseUrl/search?q=$query".toHttpUrl().newBuilder().apply {
|
||||
if (currentSortingMode.isNotEmpty()) addQueryParameter("sort", currentSortingMode)
|
||||
addQueryParameter("page", "1")
|
||||
}
|
||||
pageStack.addLast(StackItem(url.toString(), SEARCH_RESULTS_OR_BASE))
|
||||
} else {
|
||||
val albumFilter = filterList.filterIsInstance<AlbumFilter>().first().selection()
|
||||
val url = "$baseUrl/comics/${albumFilter.pathSegments}".toHttpUrlOrNull()!!.newBuilder().apply {
|
||||
val url = "$baseUrl/comics/${albumFilter.pathSegments}".toHttpUrl().newBuilder().apply {
|
||||
if (currentSortingMode.isNotEmpty()) addQueryParameter("sort", currentSortingMode)
|
||||
if (albumFilter.pageType != AUTHOR) addQueryParameter("page", "1")
|
||||
}
|
||||
|
@ -122,7 +122,7 @@ abstract class FansubsCat(
|
||||
if (query.isNotBlank()) {
|
||||
builder.addQueryParameter("query", query)
|
||||
}
|
||||
return GET(builder.toString(), headers)
|
||||
return GET(builder.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage = parseMangaFromJson(response)
|
||||
|
@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -65,7 +65,7 @@ abstract class FMReader(
|
||||
GET("$baseUrl/$requestPath?listType=pagination&page=$page&$popularSort&sort_type=DESC", headers)
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/$requestPath?".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/$requestPath?".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("name", query)
|
||||
.addQueryParameter("page", page.toString())
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
@ -101,7 +101,7 @@ abstract class FMReader(
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request =
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -58,7 +58,7 @@ abstract class Gattsu(
|
||||
override fun latestUpdatesNextPageSelector(): String = "ul.paginacao li.next > a"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val searchUrl = "$baseUrl/page/$page/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val searchUrl = "$baseUrl/page/$page/".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("s", query)
|
||||
.addQueryParameter("post_type", "post")
|
||||
.toString()
|
||||
|
@ -21,6 +21,7 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Call
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
@ -92,10 +93,10 @@ abstract class GigaViewer(
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
if (query.isNotEmpty()) {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("q", query)
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
val collectionSelected = (filters[0] as CollectionFilter).selected
|
||||
@ -138,7 +139,7 @@ abstract class GigaViewer(
|
||||
val document = response.asJsoup()
|
||||
val readableProductList = document.selectFirst("div.js-readable-product-list")!!
|
||||
val firstListEndpoint = readableProductList.attr("data-first-list-endpoint")
|
||||
.toHttpUrlOrNull()!!
|
||||
.toHttpUrl()
|
||||
val latestListEndpoint = readableProductList.attr("data-latest-list-endpoint")
|
||||
.toHttpUrlOrNull() ?: firstListEndpoint
|
||||
val numberSince = latestListEndpoint.queryParameter("number_since")!!.toFloat()
|
||||
@ -214,7 +215,7 @@ abstract class GigaViewer(
|
||||
return episode.readableProduct.pageStructure.pages
|
||||
.filter { it.type == "main" }
|
||||
.mapIndexed { i, page ->
|
||||
val imageUrl = page.src.toHttpUrlOrNull()!!.newBuilder()
|
||||
val imageUrl = page.src.toHttpUrl().newBuilder()
|
||||
.addQueryParameter("width", page.width.toString())
|
||||
.addQueryParameter("height", page.height.toString())
|
||||
.toString()
|
||||
|
@ -15,7 +15,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -101,7 +101,7 @@ abstract class GroupLe(
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url =
|
||||
"$baseUrl/search/advancedResults?offset=${50 * (page - 1)}".toHttpUrlOrNull()!!
|
||||
"$baseUrl/search/advancedResults?offset=${50 * (page - 1)}".toHttpUrl()
|
||||
.newBuilder()
|
||||
if (query.isNotEmpty()) {
|
||||
url.addQueryParameter("q", query)
|
||||
|
@ -24,7 +24,7 @@ import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlinx.serialization.json.put
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.Request
|
||||
@ -79,7 +79,7 @@ abstract class HentaiHand(
|
||||
}
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
val url = "$baseUrl/api/comics".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/api/comics".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("page", page.toString())
|
||||
.addQueryParameter("sort", "popularity")
|
||||
.addQueryParameter("order", "desc")
|
||||
@ -88,7 +88,7 @@ abstract class HentaiHand(
|
||||
url.addQueryParameter("languages[${-index - 1}]", it.toString())
|
||||
}
|
||||
// if (altLangId != null) url.addQueryParameter("languages", altLangId.toString())
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
// Latest
|
||||
@ -96,7 +96,7 @@ abstract class HentaiHand(
|
||||
override fun latestUpdatesParse(response: Response): MangasPage = popularMangaParse(response)
|
||||
|
||||
override fun latestUpdatesRequest(page: Int): Request {
|
||||
val url = "$baseUrl/api/comics".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/api/comics".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("page", page.toString())
|
||||
.addQueryParameter("sort", "uploaded_at")
|
||||
.addQueryParameter("order", "desc")
|
||||
@ -104,7 +104,7 @@ abstract class HentaiHand(
|
||||
hhLangId.forEachIndexed { index, it ->
|
||||
url.addQueryParameter("languages[${-index - 1}]", it.toString())
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
// Search
|
||||
@ -130,7 +130,7 @@ abstract class HentaiHand(
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/api/comics".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/api/comics".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("page", page.toString())
|
||||
.addQueryParameter("q", query)
|
||||
|
||||
@ -162,7 +162,7 @@ abstract class HentaiHand(
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
// Details
|
||||
|
@ -31,7 +31,7 @@ import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaType
|
||||
import okhttp3.OkHttpClient
|
||||
@ -544,7 +544,7 @@ abstract class LibGroup(
|
||||
val resBody = tokenResponse.body.string()
|
||||
csrfToken = "_token\" content=\"(.*)\"".toRegex().find(resBody)!!.groups[1]!!.value
|
||||
}
|
||||
val url = "$baseUrl/filterlist?page=$page&chapters[min]=1".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/filterlist?page=$page&chapters[min]=1".toHttpUrl().newBuilder()
|
||||
if (query.isNotEmpty()) {
|
||||
url.addQueryParameter("name", query)
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -209,7 +209,7 @@ abstract class Madara(
|
||||
protected open fun searchPage(page: Int): String = "page/$page/"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/${searchPage(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/${searchPage(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
url.addQueryParameter("post_type", "wp-manga")
|
||||
filters.forEach { filter ->
|
||||
@ -257,7 +257,7 @@ abstract class Madara(
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
protected open val authorFilterTitle: String = when (lang) {
|
||||
|
@ -114,7 +114,7 @@ abstract class MadTheme(
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector(): String = ".book-detailed-item"
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -80,7 +80,7 @@ abstract class MangaBox(
|
||||
return if (query.isNotBlank() && getAdvancedGenreFilters().isEmpty()) {
|
||||
GET("$baseUrl/$simpleQueryPath${normalizeSearchQuery(query)}?page=$page", headers)
|
||||
} else {
|
||||
val url = baseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = baseUrl.toHttpUrl().newBuilder()
|
||||
if (getAdvancedGenreFilters().isNotEmpty()) {
|
||||
url.addPathSegment("advanced_search")
|
||||
url.addQueryParameter("page", page.toString())
|
||||
@ -113,7 +113,7 @@ abstract class MangaBox(
|
||||
}
|
||||
}
|
||||
}
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
@ -210,7 +210,7 @@ abstract class MangaBox(
|
||||
url = it.attr("abs:href").substringAfter(baseUrl) // intentionally not using setUrlWithoutDomain
|
||||
name = it.text()
|
||||
scanlator =
|
||||
it.attr("abs:href").toHttpUrlOrNull()!!.host // show where chapters are actually from
|
||||
it.attr("abs:href").toHttpUrl().host // show where chapters are actually from
|
||||
}
|
||||
date_upload = parseChapterDate(element.selectDateFromElement().text(), scanlator!!) ?: 0
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ abstract class MangaHub(
|
||||
|
||||
// search
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search/page/$page".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("q", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
@ -178,7 +178,7 @@ abstract class MangaHub(
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -78,7 +78,7 @@ abstract class MangaWorld(
|
||||
override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response)
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/archive?page=$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/archive?page=$page".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("keyword", query)
|
||||
|
||||
filters.forEach { filter ->
|
||||
@ -100,7 +100,7 @@ abstract class MangaWorld(
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(document: Document): SManga {
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -67,7 +67,7 @@ abstract class Paprika(
|
||||
return if (query.isNotBlank()) {
|
||||
GET("$baseUrl/search?q=$query&page=$page")
|
||||
} else {
|
||||
val url = "$baseUrl/mangas/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/mangas/".toHttpUrl().newBuilder()
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
is GenreFilter -> url.addPathSegment(filter.toUriPart())
|
||||
@ -76,7 +76,7 @@ abstract class Paprika(
|
||||
}
|
||||
}
|
||||
url.addQueryParameter("page", page.toString())
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ import eu.kanade.tachiyomi.source.model.FilterList
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -36,7 +36,7 @@ abstract class PaprikaAlt(
|
||||
return if (query.isNotBlank()) {
|
||||
GET("$baseUrl/search?s=$query&post_type=manga&page=$page")
|
||||
} else {
|
||||
val url = "$baseUrl/genres/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/genres/".toHttpUrl().newBuilder()
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
is GenreFilter -> url.addPathSegment(filter.toUriPart())
|
||||
@ -45,7 +45,7 @@ abstract class PaprikaAlt(
|
||||
}
|
||||
}
|
||||
url.addQueryParameter("page", page.toString())
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@ import okhttp3.Cookie
|
||||
import okhttp3.CookieJar
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
@ -178,13 +179,13 @@ open class Webtoons(
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/$langCode/search?keyword=$query".toHttpUrlOrNull()?.newBuilder()!!
|
||||
val url = "$baseUrl/$langCode/search?keyword=$query".toHttpUrl().newBuilder()
|
||||
val uriPart = (filters.find { it is SearchType } as? SearchType)?.toUriPart() ?: ""
|
||||
|
||||
url.addQueryParameter("searchType", uriPart)
|
||||
if (uriPart != "WEBTOON" && page > 1) url.addQueryParameter("page", page.toString())
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = "#content > div.card_wrap.search ul:not(#filterLayer) li a"
|
||||
|
@ -17,7 +17,7 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlinx.serialization.json.long
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -34,8 +34,8 @@ open class WebtoonsTranslate(
|
||||
// popularMangaRequest already returns manga sorted by latest update
|
||||
override val supportsLatest = false
|
||||
|
||||
private val apiBaseUrl = "https://global.apis.naver.com".toHttpUrlOrNull()!!
|
||||
private val mobileBaseUrl = "https://m.webtoons.com".toHttpUrlOrNull()!!
|
||||
private val apiBaseUrl = "https://global.apis.naver.com".toHttpUrl()
|
||||
private val mobileBaseUrl = "https://m.webtoons.com".toHttpUrl()
|
||||
private val thumbnailBaseUrl = "https://mwebtoon-phinf.pstatic.net"
|
||||
|
||||
private val pageSize = 24
|
||||
@ -53,7 +53,7 @@ open class WebtoonsTranslate(
|
||||
.addQueryParameter("size", "$requeztSize")
|
||||
.addQueryParameter("languageCode", translateLangCode)
|
||||
.build()
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
||||
// Webtoons translations doesn't really have a "popular" sort; just "UPDATE", "TITLE_ASC",
|
||||
@ -161,7 +161,7 @@ open class WebtoonsTranslate(
|
||||
override fun pageListParse(document: Document): List<Page> = throw Exception("Not used")
|
||||
|
||||
override fun chapterListRequest(manga: SManga): Request {
|
||||
val mangaUrl = manga.url.toHttpUrlOrNull()!!
|
||||
val mangaUrl = manga.url.toHttpUrl()
|
||||
val titleNo = mangaUrl.queryParameter("titleNo")
|
||||
val teamVersion = mangaUrl.queryParameter("teamVersion")
|
||||
val chapterListUrl = apiBaseUrl
|
||||
@ -210,7 +210,7 @@ open class WebtoonsTranslate(
|
||||
}
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request {
|
||||
return GET(apiBaseUrl.resolve(chapter.url).toString(), headers)
|
||||
return GET(apiBaseUrl.resolve(chapter.url)!!, headers)
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -78,7 +78,7 @@ abstract class WPComics(
|
||||
return if (filterList.isEmpty()) {
|
||||
GET("$baseUrl/?s=$query&post_type=comics&page=$page")
|
||||
} else {
|
||||
val url = "$baseUrl/$searchPath".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/$searchPath".toHttpUrl().newBuilder()
|
||||
|
||||
filterList.forEach { filter ->
|
||||
when (filter) {
|
||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -58,7 +58,7 @@ abstract class ZManga(
|
||||
|
||||
// search
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrl/advanced-search/${pagePathSegment(page)}".toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = "$baseUrl/advanced-search/${pagePathSegment(page)}".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("title", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
@ -90,13 +90,13 @@ abstract class ZManga(
|
||||
// if site has project page, default value "hasProjectPage" = false
|
||||
is ProjectFilter -> {
|
||||
if (filter.toUriPart() == "project-filter-on") {
|
||||
url = "$baseUrl$projectPageString/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl$projectPageString/page/$page".toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
open val projectPageString = "/project-list"
|
||||
|
@ -27,7 +27,6 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -160,13 +159,13 @@ open class BatoTo(
|
||||
else -> { /* Do Nothing */ }
|
||||
}
|
||||
}
|
||||
client.newCall(GET(url.build().toString(), headers)).asObservableSuccess()
|
||||
client.newCall(GET(url.build(), headers)).asObservableSuccess()
|
||||
.map { response ->
|
||||
queryParse(response)
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
val url = "$baseUrl/browse".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/browse".toHttpUrl().newBuilder()
|
||||
var min = ""
|
||||
var max = ""
|
||||
filters.forEach { filter ->
|
||||
@ -232,7 +231,7 @@ open class BatoTo(
|
||||
url.addQueryParameter("chapters", "$min-$max")
|
||||
}
|
||||
|
||||
client.newCall(GET(url.build().toString(), headers)).asObservableSuccess()
|
||||
client.newCall(GET(url.build(), headers)).asObservableSuccess()
|
||||
.map { response ->
|
||||
queryParse(response)
|
||||
}
|
||||
|
@ -109,7 +109,7 @@ class Hennojin(override val lang: String, suffix: String) : ParsedHttpSource() {
|
||||
|
||||
private inline fun HttpUrl.request(
|
||||
block: HttpUrl.Builder.() -> HttpUrl.Builder,
|
||||
) = GET(newBuilder().block().toString(), headers)
|
||||
) = GET(newBuilder().block().build(), headers)
|
||||
|
||||
private inline val Response.date: Long
|
||||
get() = headers["Last-Modified"]?.run(httpDate::parse)?.time ?: 0L
|
||||
|
@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -111,14 +111,14 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
if (filters.any { it is LanguageFilters && it.state.any { it.name == LANGUAGE_SPEECHLESS && it.state } }) { // edge case for language = speechless
|
||||
val url = "$baseUrl/language/speechless/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/language/speechless/".toHttpUrl().newBuilder()
|
||||
|
||||
if ((if (filters.isEmpty()) getFilterList() else filters).filterIsInstance<SortOrderFilter>()[0].state == 0) {
|
||||
url.addPathSegment("popular")
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
} else {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("key", query)
|
||||
.addQueryParameter("page", page.toString())
|
||||
.addQueryParameter(getLanguageURIByName(imhLang).uri, toBinary(true)) // main language always enabled
|
||||
@ -143,7 +143,7 @@ class IMHentai(override val lang: String, private val imhLang: String) : ParsedH
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,7 @@ import kotlinx.serialization.json.long
|
||||
import kotlinx.serialization.json.put
|
||||
import kotlinx.serialization.json.putJsonArray
|
||||
import kotlinx.serialization.json.putJsonObject
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
@ -206,7 +206,7 @@ abstract class Luscious(
|
||||
|
||||
private fun buildAlbumListRequest(page: Int, filters: FilterList, query: String = ""): Request {
|
||||
val input = buildAlbumListRequestInput(page, filters, query)
|
||||
val url = apiBaseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = apiBaseUrl.toHttpUrl().newBuilder()
|
||||
.addQueryParameter("operationName", "AlbumList")
|
||||
.addQueryParameter("query", ALBUM_LIST_REQUEST_GQL)
|
||||
.addQueryParameter("variables", input.toString())
|
||||
@ -238,7 +238,7 @@ abstract class Luscious(
|
||||
|
||||
private fun buildAlbumInfoRequest(id: String): Request {
|
||||
val input = buildAlbumInfoRequestInput(id)
|
||||
val url = apiBaseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = apiBaseUrl.toHttpUrl().newBuilder()
|
||||
.addQueryParameter("operationName", "AlbumGet")
|
||||
.addQueryParameter("query", albumInfoQuery)
|
||||
.addQueryParameter("variables", input.toString())
|
||||
@ -337,7 +337,7 @@ abstract class Luscious(
|
||||
|
||||
private fun buildAlbumPicturesPageUrl(id: String, page: Int): String {
|
||||
val input = buildAlbumPicturesRequestInput(id, page)
|
||||
return apiBaseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
return apiBaseUrl.toHttpUrl().newBuilder()
|
||||
.addQueryParameter("operationName", "AlbumListOwnPictures")
|
||||
.addQueryParameter("query", ALBUM_PICTURES_REQUEST_GQL)
|
||||
.addQueryParameter("variables", input.toString())
|
||||
|
@ -27,7 +27,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -146,13 +146,13 @@ open class NHentai(
|
||||
filterList.findInstance<OffsetPageFilter>()?.state?.toIntOrNull()?.plus(page) ?: page
|
||||
|
||||
if (favoriteFilter?.state == true) {
|
||||
val url = "$baseUrl/favorites".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/favorites".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("q", "$fixedQuery $advQuery")
|
||||
.addQueryParameter("page", offsetPage.toString())
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
} else {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("q", "$fixedQuery $nhLangSearch$advQuery")
|
||||
.addQueryParameter("page", offsetPage.toString())
|
||||
|
||||
@ -162,7 +162,7 @@ open class NHentai(
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -137,7 +137,7 @@ open class NineManga(
|
||||
override fun imageUrlParse(document: Document) = document.select("div.pic_box img.manga_pic").first()!!.attr("src").orEmpty()
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search/".toHttpUrl().newBuilder()
|
||||
|
||||
url.addQueryParameter("wd", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
@ -166,7 +166,7 @@ open class NineManga(
|
||||
|
||||
url.addQueryParameter("type", "high")
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -76,7 +76,7 @@ class Photos18 : HttpSource(), ConfigurableSource {
|
||||
if (filter is QueryFilter) filter.addQueryTo(url)
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response) = popularMangaParse(response)
|
||||
|
@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.decodeFromString
|
||||
import kotlinx.serialization.json.Json
|
||||
import okhttp3.Headers
|
||||
@ -13,7 +14,6 @@ import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.Jsoup
|
||||
import rx.Observable
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
@ -191,7 +191,7 @@ class Pixiv(override val lang: String) : HttpSource() {
|
||||
for (p in countUp(start = 1)) {
|
||||
searchUsers.url.setEncodedQueryParameter("p", p.toString())
|
||||
|
||||
val userIds = Jsoup.parse(searchUsers.execute().body.string())
|
||||
val userIds = searchUsers.execute().asJsoup()
|
||||
.select(".user-recommendation-item > a").eachAttr("href")
|
||||
.map { it.substringAfterLast('/') }
|
||||
|
||||
|
@ -80,7 +80,7 @@ class REManga : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -45,7 +45,7 @@ class MangaRok : ParsedHttpSource() {
|
||||
.addQueryParameter("q", query)
|
||||
.addQueryParameter("page", page.toString())
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
override fun searchMangaSelector(): String =
|
||||
".is-half > a.box"
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -70,7 +70,7 @@ class Comicastle : ParsedHttpSource() {
|
||||
// Search
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/library/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/library/search".toHttpUrl().newBuilder()
|
||||
var rBody: RequestBody? = null
|
||||
|
||||
(filters.let { if (it.isEmpty()) getFilterList() else filters })
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -91,7 +91,7 @@ class Eggporncomics : ParsedHttpSource() {
|
||||
return if (query.isNotBlank()) {
|
||||
GET("$baseUrl/search/${query.replace(queryRegex, "-")}?page=$page", headers)
|
||||
} else {
|
||||
val url = baseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = baseUrl.toHttpUrl().newBuilder()
|
||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||
val category = filterList.find { it is CategoryFilter } as UriPartFilter
|
||||
val comics = filterList.find { it is ComicsFilter } as UriPartFilter
|
||||
@ -110,7 +110,7 @@ class Eggporncomics : ParsedHttpSource() {
|
||||
|
||||
url.addQueryParameter("page", page.toString())
|
||||
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ import kotlinx.serialization.json.JsonArray
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Credentials
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -87,7 +87,7 @@ class Madokami : ConfigurableSource, ParsedHttpSource() {
|
||||
override fun searchMangaNextPageSelector(): String? = null
|
||||
|
||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||
val url = (baseUrl + manga.url).toHttpUrlOrNull()!!
|
||||
val url = (baseUrl + manga.url).toHttpUrl()
|
||||
if (url.pathSize > 5 && url.pathSegments[0] == "Manga" && url.pathSegments[1].length == 1) {
|
||||
val builder = url.newBuilder()
|
||||
for (i in 5 until url.pathSize) { builder.removePathSegment(5) }
|
||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -72,7 +72,7 @@ class Mangafreak : ParsedHttpSource() {
|
||||
// Search
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = baseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = baseUrl.toHttpUrl().newBuilder()
|
||||
|
||||
if (query.isNotBlank()) {
|
||||
url.addPathSegments("Find/$query")
|
||||
@ -97,7 +97,7 @@ class Mangafreak : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
override fun searchMangaNextPageSelector(): String? = null
|
||||
override fun searchMangaSelector(): String = "div.manga_search_item , div.mangaka_search_item"
|
||||
|
@ -14,7 +14,7 @@ import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -69,7 +69,7 @@ class Mangahasu : ParsedHttpSource() {
|
||||
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/advanced-search.html".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/advanced-search.html".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("keyword", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
|
||||
@ -107,7 +107,7 @@ class Mangahasu : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = latestUpdatesSelector()
|
||||
|
@ -13,7 +13,7 @@ import okhttp3.Cookie
|
||||
import okhttp3.CookieJar
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -91,7 +91,7 @@ class Mangahere : ParsedHttpSource() {
|
||||
override fun latestUpdatesNextPageSelector() = "div.pager-list-left a:last-child"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
@ -137,7 +137,7 @@ class Mangahere : ParsedHttpSource() {
|
||||
addEncodedQueryParameter("name", null)
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = ".manga-list-4-list > li"
|
||||
|
@ -9,7 +9,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -69,7 +69,7 @@ class MangaJar : ParsedHttpSource() {
|
||||
val genreFilter = filterList.findInstance<GenreList>()
|
||||
val genre = genreFilter?.let { f -> f.values[f.state] }
|
||||
|
||||
val url = (if (genre!!.isEmpty()) "$baseUrl/search" else "$baseUrl/genre/$genre").toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = (if (genre!!.isEmpty()) "$baseUrl/search" else "$baseUrl/genre/$genre").toHttpUrl().newBuilder()
|
||||
|
||||
url.addQueryParameter("q", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
@ -85,7 +85,7 @@ class MangaJar : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -14,7 +14,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -86,12 +86,12 @@ class MangaKatana : ConfigurableSource, ParsedHttpSource() {
|
||||
|
||||
if (query.isNotEmpty()) {
|
||||
val type = filterList.find { it is TypeFilter } as TypeFilter
|
||||
val url = "$baseUrl/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/page/$page".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("search", query)
|
||||
.addQueryParameter("search_by", type.toUriPart())
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
} else {
|
||||
val url = "$baseUrl/manga/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/manga/page/$page".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("filter", "1")
|
||||
for (filter in filterList) {
|
||||
when (filter) {
|
||||
@ -125,7 +125,7 @@ class MangaKatana : ConfigurableSource, ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,7 +98,7 @@ class MangaMiso : HttpSource() {
|
||||
|
||||
// If no filters selected, default to "all"
|
||||
if (tagCount == 0) { url.addPathSegment("all") }
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -123,7 +123,7 @@ class MangaMiso : HttpSource() {
|
||||
.addQueryParameter("perPage", MANGA_PER_PAGE.toString())
|
||||
.addQueryParameter("page", page.toString())
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -95,7 +95,7 @@ class MangaPill : ParsedHttpSource() {
|
||||
|
||||
override fun imageUrlParse(document: Document) = ""
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("page", page.toString())
|
||||
.addQueryParameter("q", query)
|
||||
|
||||
@ -119,7 +119,7 @@ class MangaPill : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
private class Type : UriPartFilter(
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -158,7 +158,7 @@ class MangaRawClub : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
// Filter search
|
||||
val url = "$baseUrl/browse-comics/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/browse-comics/".toHttpUrl().newBuilder()
|
||||
val requestBody = FormBody.Builder()
|
||||
url.addQueryParameter("results", page.toString())
|
||||
|
||||
@ -176,7 +176,7 @@ class MangaRawClub : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
// return POST("$baseUrl/search", headers, requestBody.build()) // csrfmiddlewaretoken required
|
||||
}
|
||||
|
||||
|
@ -111,7 +111,7 @@ class MangaSect : ParsedHttpSource() {
|
||||
addPathSegment("")
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage = popularMangaParse(response)
|
||||
|
@ -78,7 +78,7 @@ class Multporn : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesRequest(page: Int) = buildLatestMangaRequest(page - 1)
|
||||
@ -116,7 +116,7 @@ class Multporn : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
private fun buildTextSearchFilterRequests(page: Int, filters: List<TextSearchFilter>): List<Request> {
|
||||
|
@ -94,7 +94,7 @@ class MyHentaiGallery : ParsedHttpSource() {
|
||||
}
|
||||
url.addPathSegment("$page")
|
||||
|
||||
GET(url.toString(), headers)
|
||||
GET(url.build(), headers)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -53,11 +53,11 @@ open class RainOfSnow() : ParsedHttpSource() {
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
if (query.isNotEmpty()) {
|
||||
val url = "$baseUrl/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("s", query)
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
val url = "$baseUrl/comics/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/comics/".toHttpUrl().newBuilder()
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
is AlbumTypeSelectFilter -> {
|
||||
@ -68,7 +68,7 @@ open class RainOfSnow() : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -25,7 +25,7 @@ import okhttp3.Cookie
|
||||
import okhttp3.CookieJar
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -213,14 +213,14 @@ class Tapastic : ConfigurableSource, ParsedHttpSource() {
|
||||
val url: HttpUrl.Builder
|
||||
// If there is any search text, use text search, ignoring filters
|
||||
if (query.isNotBlank()) {
|
||||
url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("q", query)
|
||||
.addQueryParameter("t", "COMICS")
|
||||
} else {
|
||||
// Checking mature filter
|
||||
val matureFilter = filterList.find { it is MatureFilter } as MatureFilter
|
||||
if (matureFilter.state) {
|
||||
url = "$baseUrl/mature".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl/mature".toHttpUrl().newBuilder()
|
||||
// Append only mature uri filters
|
||||
filterList.forEach {
|
||||
if (it is UriFilter && it.isMature) {
|
||||
@ -228,7 +228,7 @@ class Tapastic : ConfigurableSource, ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
url = "$baseUrl/comics".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl/comics".toHttpUrl().newBuilder()
|
||||
// Append only non-mature uri filters
|
||||
filterList.forEach {
|
||||
if (it is UriFilter && !it.isMature) {
|
||||
@ -244,7 +244,7 @@ class Tapastic : ConfigurableSource, ParsedHttpSource() {
|
||||
}
|
||||
// Append page number
|
||||
url.addQueryParameter("pageNumber", page.toString())
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaNextPageSelector() =
|
||||
|
@ -14,7 +14,6 @@ import kotlinx.serialization.json.Json
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -325,7 +324,7 @@ open class Viz(
|
||||
.add("X-Requested-With", "XMLHttpRequest")
|
||||
.build()
|
||||
|
||||
val authCheckUrl = "$baseUrl/$MANGA_AUTH_CHECK_URL".toHttpUrlOrNull()!!.newBuilder()
|
||||
val authCheckUrl = "$baseUrl/$MANGA_AUTH_CHECK_URL".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("device_id", "3")
|
||||
.addQueryParameter("manga_id", mangaId)
|
||||
.toString()
|
||||
|
@ -45,7 +45,7 @@ class VyvyManga : ParsedHttpSource() {
|
||||
.addQueryParameter("q", query)
|
||||
.addQueryParameter("page", page.toString())
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector(): String = ".comic-item"
|
||||
|
@ -9,7 +9,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -81,7 +81,7 @@ class Webcomics : ParsedHttpSource() {
|
||||
override fun searchMangaSelector() = ".wiki-book-list > .row"
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/wiki.html?search=$query&page=$page".toHttpUrlOrNull()?.newBuilder()
|
||||
val url = "$baseUrl/wiki.html?search=$query&page=$page".toHttpUrl().newBuilder()
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
is GenreFilter -> {
|
||||
@ -91,7 +91,7 @@ class Webcomics : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -53,7 +53,7 @@ class Ikuhentai : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/page/$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/page/$page".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("post_type", "wp-manga")
|
||||
val pattern = "\\s+".toRegex()
|
||||
val q = query.replace(pattern, "+")
|
||||
@ -104,7 +104,7 @@ class Ikuhentai : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
// max 200 results
|
||||
|
@ -19,7 +19,7 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -210,7 +210,7 @@ class Kumanga : HttpSource() {
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
getKumangaToken()
|
||||
val url = "$baseUrl/backend/ajax/searchengine.php?page=$page&perPage=10&keywords=$query&retrieveCategories=true&retrieveAuthors=false&contentType=manga&token=$kumangaToken".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/backend/ajax/searchengine.php?page=$page&perPage=10&keywords=$query&retrieveCategories=true&retrieveAuthors=false&contentType=manga&token=$kumangaToken".toHttpUrl().newBuilder()
|
||||
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
|
@ -22,7 +22,7 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -66,7 +66,7 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
|
||||
|
||||
private fun OkHttpClient.Builder.rateLimitImageCDNs(hosts: Array<String>, permits: Int, period: Long): OkHttpClient.Builder {
|
||||
hosts.forEach { host ->
|
||||
rateLimitHost(host.toHttpUrlOrNull()!!, permits, period)
|
||||
rateLimitHost(host.toHttpUrl(), permits, period)
|
||||
}
|
||||
return this
|
||||
}
|
||||
@ -74,7 +74,7 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
|
||||
private var loadWebView = true
|
||||
override val client: OkHttpClient = network.client.newBuilder()
|
||||
.rateLimitHost(
|
||||
baseUrl.toHttpUrlOrNull()!!,
|
||||
baseUrl.toHttpUrl(),
|
||||
preferences.getString(WEB_RATELIMIT_PREF, WEB_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
|
||||
60,
|
||||
)
|
||||
@ -139,7 +139,7 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
|
||||
override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/library".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/library".toHttpUrl().newBuilder()
|
||||
|
||||
url.addQueryParameter("title", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
@ -213,7 +213,7 @@ class LectorManga : ConfigurableSource, ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -55,7 +55,7 @@ class LeerCapitulo : ParsedHttpSource() {
|
||||
val url = "$baseUrl/search-autocomplete".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("term", query)
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Cookie
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -68,9 +68,9 @@ class ManhwasNet : ParsedHttpSource() {
|
||||
.set("Referer", "$baseUrl/")
|
||||
|
||||
override fun popularMangaRequest(page: Int): Request {
|
||||
val url = "$baseUrl/biblioteca".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/biblioteca".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("page", page.toString())
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun popularMangaSelector() = "ul > li > article.anime"
|
||||
@ -98,7 +98,7 @@ class ManhwasNet : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/biblioteca".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/biblioteca".toHttpUrl().newBuilder()
|
||||
if (query.isNotEmpty()) {
|
||||
url.addQueryParameter("buscar", query)
|
||||
} else {
|
||||
@ -116,7 +116,7 @@ class ManhwasNet : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
url.addQueryParameter("page", page.toString())
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -114,7 +114,7 @@ class OlympusScanlation : HttpSource() {
|
||||
}
|
||||
url.addQueryParameter("type", "comic")
|
||||
url.addQueryParameter("page", page.toString())
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
|
@ -16,7 +16,6 @@ import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -134,7 +133,7 @@ class TMOHentai : ConfigurableSource, ParsedHttpSource() {
|
||||
override fun imageUrlParse(document: Document): String = document.select("div#content-images img.content-image").attr("abs:data-original")
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/section/all?view=list".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/section/all?view=list".toHttpUrl().newBuilder()
|
||||
|
||||
url.addQueryParameter("search[searchText]", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
@ -165,7 +164,7 @@ class TMOHentai : ConfigurableSource, ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -22,7 +22,7 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -61,7 +61,7 @@ class TuMangaOnline : ConfigurableSource, ParsedHttpSource() {
|
||||
|
||||
private fun OkHttpClient.Builder.rateLimitImageCDNs(hosts: Array<String>, permits: Int, period: Long): OkHttpClient.Builder {
|
||||
hosts.forEach { host ->
|
||||
rateLimitHost(host.toHttpUrlOrNull()!!, permits, period)
|
||||
rateLimitHost(host.toHttpUrl(), permits, period)
|
||||
}
|
||||
return this
|
||||
}
|
||||
@ -104,7 +104,7 @@ class TuMangaOnline : ConfigurableSource, ParsedHttpSource() {
|
||||
chain.proceed(request)
|
||||
}
|
||||
.rateLimitHost(
|
||||
baseUrl.toHttpUrlOrNull()!!,
|
||||
baseUrl.toHttpUrl(),
|
||||
preferences.getString(WEB_RATELIMIT_PREF, WEB_RATELIMIT_PREF_DEFAULT_VALUE)!!.toInt(),
|
||||
60,
|
||||
)
|
||||
@ -141,7 +141,7 @@ class TuMangaOnline : ConfigurableSource, ParsedHttpSource() {
|
||||
override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/library".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/library".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("title", query)
|
||||
if (getSFWModePref()) {
|
||||
SFW_MODE_PREF_EXCLUDE_GENDERS.forEach { gender ->
|
||||
@ -201,7 +201,7 @@ class TuMangaOnline : ConfigurableSource, ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
override fun searchMangaNextPageSelector() = popularMangaNextPageSelector()
|
||||
|
@ -9,7 +9,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
@ -91,15 +91,15 @@ open class VCPVMP(override val name: String, override val baseUrl: String) : Par
|
||||
protected open val genreSuffix = ""
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = baseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
var url = baseUrl.toHttpUrl().newBuilder()
|
||||
|
||||
if (query.isNotBlank()) {
|
||||
url = "$baseUrl/$urlSuffix".toHttpUrlOrNull()!!.newBuilder()
|
||||
url = "$baseUrl/$urlSuffix".toHttpUrl().newBuilder()
|
||||
url.addPathSegments("page")
|
||||
url.addPathSegments(page.toString())
|
||||
url.addQueryParameter("s", query)
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
filters.forEach { filter ->
|
||||
@ -117,7 +117,7 @@ open class VCPVMP(override val name: String, override val baseUrl: String) : Par
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -64,7 +64,7 @@ class BacaKomik : ParsedHttpSource() {
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val builtUrl = if (page == 1) "$baseUrl/daftar-komik/" else "$baseUrl/daftar-komik/page/$page/?order="
|
||||
val url = builtUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = builtUrl.toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("title", query)
|
||||
url.addQueryParameter("page", page.toString())
|
||||
filters.forEach { filter ->
|
||||
@ -97,7 +97,7 @@ class BacaKomik : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
override fun mangaDetailsParse(document: Document): SManga {
|
||||
val infoElement = document.select("div.infoanime").first()!!
|
||||
|
@ -15,7 +15,7 @@ import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -97,7 +97,7 @@ class ComicFx : ParsedHttpSource() {
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val filterList = if (filters.isEmpty()) getFilterList() else filters
|
||||
|
||||
val url = "$baseUrl/filterList".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/filterList".toHttpUrl().newBuilder()
|
||||
|
||||
for (filter in filterList) {
|
||||
when (filter) {
|
||||
@ -123,7 +123,7 @@ class ComicFx : ParsedHttpSource() {
|
||||
|
||||
url.addQueryParameter("page", page.toString())
|
||||
// Unimplemented parameters: "alpha" (For filtering by alphabet) and "tag" (idk)
|
||||
return GET(url.toString())
|
||||
return GET(url.build())
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
@ -19,7 +19,7 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -321,7 +321,7 @@ class DoujinDesu : ParsedHttpSource(), ConfigurableSource {
|
||||
// Search & FIlter
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/manga/page/$page/".toHttpUrlOrNull()?.newBuilder()!!
|
||||
val url = "$baseUrl/manga/page/$page/".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("title", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
@ -349,7 +349,7 @@ class DoujinDesu : ParsedHttpSource(), ConfigurableSource {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaFromElement(element: Element): SManga =
|
||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -55,7 +55,7 @@ class KomikIndoID : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/daftar-manga/page/$page/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/daftar-manga/page/$page/".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("title", query)
|
||||
filters.forEach { filter ->
|
||||
when (filter) {
|
||||
@ -120,7 +120,7 @@ class KomikIndoID : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
override fun mangaDetailsParse(document: Document): SManga {
|
||||
val infoElement = document.select("div.infoanime").first()!!
|
||||
|
@ -7,7 +7,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
@ -81,7 +81,7 @@ class Komiku : ParsedHttpSource() {
|
||||
override fun searchMangaSelector() = popularMangaSelector()
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
var url = "$baseUrlData/page/$page/?post_type=manga".toHttpUrlOrNull()?.newBuilder()!!.addQueryParameter("s", query)
|
||||
var url = "$baseUrlData/page/$page/?post_type=manga".toHttpUrl().newBuilder().addQueryParameter("s", query)
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
is CategoryNames -> {
|
||||
@ -107,13 +107,13 @@ class Komiku : ParsedHttpSource() {
|
||||
is ProjectList -> {
|
||||
val project = filter.values[filter.state]
|
||||
if (project.key == "project-filter-on") {
|
||||
url = ("$baseUrl/pustaka" + if (page > 1) "/page/$page/" else "" + "?tipe=projek").toHttpUrlOrNull()!!.newBuilder()
|
||||
url = ("$baseUrl/pustaka" + if (page > 1) "/page/$page/" else "" + "?tipe=projek").toHttpUrl().newBuilder()
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element)
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -29,7 +29,7 @@ class AnimeGDRClub : ParsedHttpSource() {
|
||||
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/serie.php", headers)
|
||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/", headers)
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/".toHttpUrl().newBuilder()
|
||||
|
||||
if (query.isNotEmpty()) {
|
||||
url.addEncodedPathSegment("serie.php")
|
||||
@ -118,7 +118,7 @@ class AnimeGDRClub : ParsedHttpSource() {
|
||||
override fun latestUpdatesFromElement(element: Element): SManga {
|
||||
val manga = SManga.create()
|
||||
|
||||
manga.setUrlWithoutDomain("http://www.agcscanlation.it/progetto.php?nome=${element.attr("href").toHttpUrlOrNull()!!.queryParameter("nome")}")
|
||||
manga.setUrlWithoutDomain("http://www.agcscanlation.it/progetto.php?nome=${element.attr("href").toHttpUrl().queryParameter("nome")}")
|
||||
manga.title = element.selectFirst(".titolo")!!.text()
|
||||
manga.thumbnail_url = "$baseUrl/${element.selectFirst("img")!!.attr("src")}"
|
||||
|
||||
|
@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -36,7 +36,7 @@ class DemoneCeleste : ParsedHttpSource() {
|
||||
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manga", headers)
|
||||
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/", headers)
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search?sez=serie".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search?sez=serie".toHttpUrl().newBuilder()
|
||||
|
||||
if (query.isNotEmpty()) {
|
||||
url.addQueryParameter("key", query)
|
||||
|
@ -8,13 +8,13 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import okhttp3.ResponseBody.Companion.toResponseBody
|
||||
import org.jsoup.Jsoup
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
import kotlin.experimental.xor
|
||||
|
||||
@ -31,7 +31,7 @@ class NicovideoSeiga : HttpSource() {
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage {
|
||||
val currentPage = response.request.url.queryParameter("page")!!.toInt()
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val mangaCount = doc.select("#main_title > h2 > span").text().trim().dropLast(1).toInt()
|
||||
val mangaPerPage = 20
|
||||
val mangaList = doc.select("#comic_list > ul > li")
|
||||
@ -81,7 +81,7 @@ class NicovideoSeiga : HttpSource() {
|
||||
|
||||
override fun searchMangaParse(response: Response): MangasPage {
|
||||
val currentPage = response.request.url.queryParameter("page")!!.toInt()
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val mangaCount =
|
||||
doc.select("#mg_wrapper > div > div.header > div.header__result-summary").text().trim()
|
||||
.split(":")[1].toInt()
|
||||
@ -118,7 +118,7 @@ class NicovideoSeiga : HttpSource() {
|
||||
GET("$baseUrl/manga/search/?q=$query&page=$page&sort=score")
|
||||
|
||||
override fun mangaDetailsParse(response: Response): SManga = SManga.create().apply {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
// The description is a mix of synopsis and news announcements
|
||||
// This is just how mangakas use this site
|
||||
description =
|
||||
@ -144,7 +144,7 @@ class NicovideoSeiga : HttpSource() {
|
||||
}
|
||||
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val chapters = ArrayList<SChapter>()
|
||||
val chapterList = doc.select("#episode_list > ul > li")
|
||||
val mangaId = response.request.url.toUrl().toString().substringAfterLast('/').substringBefore('?')
|
||||
@ -184,7 +184,7 @@ class NicovideoSeiga : HttpSource() {
|
||||
}
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val pages = ArrayList<Page>()
|
||||
// Nicovideo will refuse to serve any pages if the user has not logged in
|
||||
if (!doc.select("#login_manga").isEmpty()) {
|
||||
|
@ -8,7 +8,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -57,7 +57,7 @@ class Rawdevart : ParsedHttpSource() {
|
||||
override fun popularMangaNextPageSelector() = latestUpdatesNextPageSelector()
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search/".toHttpUrl().newBuilder()
|
||||
url.addQueryParameter("page", page.toString())
|
||||
url.addQueryParameter("title", query)
|
||||
filters.forEach { filter ->
|
||||
@ -150,7 +150,7 @@ class Rawdevart : ParsedHttpSource() {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.build().toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun searchMangaSelector() = latestUpdatesSelector()
|
||||
|
@ -9,7 +9,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import org.jsoup.nodes.Document
|
||||
import org.jsoup.nodes.Element
|
||||
@ -65,7 +65,7 @@ class SenManga : ParsedHttpSource() {
|
||||
override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element)
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/search".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("s", query)
|
||||
.addQueryParameter("page", page.toString())
|
||||
|
||||
@ -82,7 +82,7 @@ class SenManga : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector()
|
||||
|
@ -9,6 +9,7 @@ import eu.kanade.tachiyomi.source.model.Page
|
||||
import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import kotlinx.serialization.json.Json
|
||||
import kotlinx.serialization.json.jsonArray
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
@ -16,7 +17,6 @@ import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.Jsoup
|
||||
import rx.Observable
|
||||
import uy.kohesive.injekt.injectLazy
|
||||
|
||||
@ -45,7 +45,7 @@ class Twi4 : HttpSource() {
|
||||
// As the full catalog is consists of less than 50 manga, it is not worth implementing
|
||||
// We'll just list all manga in the catalog instead
|
||||
override fun popularMangaParse(response: Response): MangasPage {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val ret = mutableListOf<SManga>()
|
||||
// Manga that are recently updated don't show up on the full catalog
|
||||
// So we'll need to parse the recent updates section as well
|
||||
@ -89,7 +89,7 @@ class Twi4 : HttpSource() {
|
||||
GET(getUrlDomain() + manga.url, getChromeHeaders())
|
||||
|
||||
override fun mangaDetailsParse(response: Response): SManga {
|
||||
val document = Jsoup.parse(response.body.string())
|
||||
val document = response.asJsoup()
|
||||
return SManga.create().apply {
|
||||
// We need to get the title and thumbnail again.
|
||||
// This is only needed if you search by slug, as we have no information about the them.
|
||||
@ -137,7 +137,7 @@ class Twi4 : HttpSource() {
|
||||
// They have a <noscript> layout! This is surprising
|
||||
// Though their manga pages fails to load as it relies on JS
|
||||
override fun chapterListParse(response: Response): List<SChapter> {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
val chapterRegex = Regex(".+『(.+)』 #(\\d+)")
|
||||
val allChapters = doc.select("#backnumbers > div > ul > li")
|
||||
val ret = mutableListOf<SChapter>()
|
||||
@ -175,7 +175,7 @@ class Twi4 : HttpSource() {
|
||||
GET(getUrlDomain() + chapter.url, getChromeHeaders())
|
||||
|
||||
override fun pageListParse(response: Response): List<Page> {
|
||||
val doc = Jsoup.parse(response.body.string())
|
||||
val doc = response.asJsoup()
|
||||
// The site interprets 1 page == 1 chapter
|
||||
// There should only be 1 article in the document
|
||||
val page = doc.select("article.comic:first-child")
|
||||
|
@ -75,7 +75,7 @@ object ManaToki : NewToki("ManaToki", "comic", manaTokiPreferences) {
|
||||
url.removeAllQueryParameters("tag")
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
private class SearchCheckBox(name: String, val id: String = name) : Filter.CheckBox(name)
|
||||
|
@ -61,7 +61,7 @@ object NewTokiWebtoon : NewToki("NewToki", "webtoon", newTokiPreferences) {
|
||||
}
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
private class SearchTargetTypeList : Filter.Select<String>("Type", arrayOf("전체", "일반웹툰", "성인웹툰", "BL/GL", "완결웹툰"))
|
||||
|
@ -11,7 +11,7 @@ import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -64,7 +64,7 @@ class MundoHentai : ParsedHttpSource() {
|
||||
|
||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||
if (query.isNotEmpty()) {
|
||||
val url = baseUrl.toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = baseUrl.toHttpUrl().newBuilder()
|
||||
.addQueryParameter("s", query)
|
||||
.toString()
|
||||
|
||||
|
@ -14,7 +14,6 @@ import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -78,7 +77,7 @@ class OnePieceEx : ParsedHttpSource() {
|
||||
element.select("div.volume-nome h3").text()
|
||||
thumbnail_url = THUMBNAIL_URL_MAP[title.uppercase(Locale.ROOT)] ?: DEFAULT_THUMBNAIL
|
||||
|
||||
val customUrl = "$baseUrl/mangas/".toHttpUrlOrNull()!!.newBuilder()
|
||||
val customUrl = "$baseUrl/mangas/".toHttpUrl().newBuilder()
|
||||
.addQueryParameter("type", "special")
|
||||
.addQueryParameter("title", title)
|
||||
.toString()
|
||||
@ -115,7 +114,7 @@ class OnePieceEx : ParsedHttpSource() {
|
||||
}
|
||||
|
||||
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
|
||||
val mangaUrl = document.location().toHttpUrlOrNull()!!
|
||||
val mangaUrl = document.location().toHttpUrl()
|
||||
|
||||
when (mangaUrl.queryParameter("type")!!) {
|
||||
"main" -> {
|
||||
@ -174,7 +173,7 @@ class OnePieceEx : ParsedHttpSource() {
|
||||
override fun chapterListSelector() = "div.capitulos li.volume-capitulo"
|
||||
|
||||
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
|
||||
val mangaUrl = element.ownerDocument()!!.location().toHttpUrlOrNull()!!
|
||||
val mangaUrl = element.ownerDocument()!!.location().toHttpUrl()
|
||||
|
||||
when (mangaUrl.queryParameter("type")!!) {
|
||||
"main" -> {
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -58,7 +58,7 @@ class MangaBook : ParsedHttpSource() {
|
||||
val url = if (query.isNotBlank()) {
|
||||
"$baseUrl/dosearch?query=$query&page=$page"
|
||||
} else {
|
||||
val url = "$baseUrl/filterList?page=$page&ftype[]=0&status[]=0".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/filterList?page=$page&ftype[]=0&status[]=0".toHttpUrl().newBuilder()
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
is OrderBy -> {
|
||||
@ -84,7 +84,7 @@ class MangaBook : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -43,7 +43,7 @@ class MangaPoisk : ParsedHttpSource() {
|
||||
val url = if (query.isNotBlank()) {
|
||||
"$baseUrl/search?q=$query&page=$page"
|
||||
} else {
|
||||
val url = "$baseUrl/manga?page=$page".toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = "$baseUrl/manga?page=$page".toHttpUrl().newBuilder()
|
||||
(if (filters.isEmpty()) getFilterList() else filters).forEach { filter ->
|
||||
when (filter) {
|
||||
is OrderBy -> {
|
||||
@ -64,7 +64,7 @@ class MangaPoisk : ParsedHttpSource() {
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ class Remanga : ConfigurableSource, HttpSource() {
|
||||
if (preferences.getBoolean(isLib_PREF, false)) {
|
||||
url.addQueryParameter("exclude_bookmarks", "1")
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response)
|
||||
@ -207,7 +207,7 @@ class Remanga : ConfigurableSource, HttpSource() {
|
||||
if (preferences.getBoolean(isLib_PREF, false)) {
|
||||
url.addQueryParameter("exclude_bookmarks", "1")
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
override fun latestUpdatesParse(response: Response): MangasPage = searchMangaParse(response)
|
||||
@ -307,8 +307,7 @@ class Remanga : ConfigurableSource, HttpSource() {
|
||||
throw Exception("Пользователь не найден, необходима авторизация через WebView\uD83C\uDF0E")
|
||||
}
|
||||
val TypeQ = getMyList()[filter.state].id
|
||||
val UserProfileUrl = "$baseUrl/api/users/$USER_ID/bookmarks/?type=$TypeQ&page=$page".toHttpUrl().newBuilder()
|
||||
return GET(UserProfileUrl.toString(), headers)
|
||||
return GET("$baseUrl/api/users/$USER_ID/bookmarks/?type=$TypeQ&page=$page", headers)
|
||||
}
|
||||
}
|
||||
is RequireChapters -> {
|
||||
@ -329,7 +328,7 @@ class Remanga : ConfigurableSource, HttpSource() {
|
||||
url.addQueryParameter("exclude_bookmarks", "1")
|
||||
}
|
||||
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url.build(), headers)
|
||||
}
|
||||
|
||||
private fun parseStatus(status: Int): Int {
|
||||
|
@ -12,7 +12,7 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -59,10 +59,7 @@ class UniComics : ParsedHttpSource() {
|
||||
is Publishers -> {
|
||||
if (filter.state > 0) {
|
||||
val publisherName = getPublishersList()[filter.state].url
|
||||
val publisherUrl =
|
||||
"$baseDefaultUrl$PATH_publishers/$publisherName/page/$page".toHttpUrlOrNull()!!
|
||||
.newBuilder()
|
||||
return GET(publisherUrl.toString(), headers)
|
||||
return GET("$baseDefaultUrl$PATH_publishers/$publisherName/page/$page", headers)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
|
@ -9,7 +9,6 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
import org.jsoup.nodes.Document
|
||||
@ -60,15 +59,13 @@ class YagamiProject : ParsedHttpSource() {
|
||||
is CategoryList -> {
|
||||
if (filter.state > 0) {
|
||||
val catQ = getCategoryList()[filter.state].name
|
||||
val catUrl = "$baseUrl/tags/$catQ".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(catUrl.toString(), headers)
|
||||
return GET("$baseUrl/tags/$catQ", headers)
|
||||
}
|
||||
}
|
||||
is FormatList -> {
|
||||
if (filter.state > 0) {
|
||||
val formN = getFormatList()[filter.state].query
|
||||
val formaUrl = "$baseUrl/$formN".toHttpUrlOrNull()!!.newBuilder()
|
||||
return GET(formaUrl.toString(), headers)
|
||||
return GET("$baseUrl/$formN", headers)
|
||||
}
|
||||
}
|
||||
else -> {}
|
||||
|
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||
import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -38,7 +38,7 @@ class Baimangu : ConfigurableSource, ParsedHttpSource() {
|
||||
|
||||
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
|
||||
.rateLimitHost(
|
||||
baseUrl.toHttpUrlOrNull()!!,
|
||||
baseUrl.toHttpUrl(),
|
||||
preferences.getString(MAINSITE_RATEPERMITS_PREF, MAINSITE_RATEPERMITS_PREF_DEFAULT)!!.toInt(),
|
||||
preferences.getString(MAINSITE_RATEPERIOD_PREF, MAINSITE_RATEPERIOD_PREF_DEFAULT)!!.toLong(),
|
||||
TimeUnit.MILLISECONDS,
|
||||
|
@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.source.model.SManga
|
||||
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
|
||||
import eu.kanade.tachiyomi.util.asJsoup
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import okhttp3.Response
|
||||
@ -134,18 +133,18 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
|
||||
newQuery = "$newQuery+%2B$keyword"
|
||||
params = params.substringAfter("&")
|
||||
}
|
||||
"$baseUrl/search/photos?search_query=$newQuery&page=$page&$params".toHttpUrlOrNull()?.newBuilder()
|
||||
"$baseUrl/search/photos?search_query=$newQuery&page=$page&$params"
|
||||
} else {
|
||||
params = if (params == "") "/albums?" else params
|
||||
if (query == "") {
|
||||
"$baseUrl$params&page=$page".toHttpUrlOrNull()?.newBuilder()
|
||||
"$baseUrl$params&page=$page"
|
||||
} else {
|
||||
// 在搜索栏的关键词前添加-号来实现对筛选结果的过滤, 像 "-YAOI -扶他 -毛絨絨 -獵奇", 注意此时搜索功能不可用.
|
||||
val removedGenres = query.split(" ").filter { it.startsWith("-") }.joinToString("+") { it.removePrefix("-") }
|
||||
"$baseUrl$params&page=$page&screen=$removedGenres".toHttpUrlOrNull()?.newBuilder()
|
||||
"$baseUrl$params&page=$page&screen=$removedGenres"
|
||||
}
|
||||
}
|
||||
return GET(url.toString(), headers)
|
||||
return GET(url, headers)
|
||||
}
|
||||
|
||||
override fun searchMangaNextPageSelector(): String = popularMangaNextPageSelector()
|
||||
|
@ -27,7 +27,7 @@ import okhttp3.Call
|
||||
import okhttp3.Callback
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.Interceptor
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
@ -69,22 +69,22 @@ class Manhuagui(
|
||||
private val imageServer = arrayOf("https://i.hamreus.com", "https://cf.hamreus.com")
|
||||
private val mobileWebsiteUrl = "https://m.$baseHost"
|
||||
private val json: Json by injectLazy()
|
||||
private val baseHttpUrl: HttpUrl = baseUrl.toHttpUrlOrNull()!!
|
||||
private val baseHttpUrl: HttpUrl = baseUrl.toHttpUrl()
|
||||
|
||||
// Add rate limit to fix manga thumbnail load failure
|
||||
override val client: OkHttpClient =
|
||||
if (getShowR18()) {
|
||||
network.client.newBuilder()
|
||||
.rateLimitHost(baseHttpUrl, preferences.getString(MAINSITE_RATELIMIT_PREF, MAINSITE_RATELIMIT_DEFAULT_VALUE)!!.toInt(), 10)
|
||||
.rateLimitHost(imageServer[0].toHttpUrlOrNull()!!, preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[1].toHttpUrlOrNull()!!, preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[0].toHttpUrl(), preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[1].toHttpUrl(), preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.addNetworkInterceptor(AddCookieHeaderInterceptor(baseHttpUrl.host))
|
||||
.build()
|
||||
} else {
|
||||
network.client.newBuilder()
|
||||
.rateLimitHost(baseHttpUrl, preferences.getString(MAINSITE_RATELIMIT_PREF, MAINSITE_RATELIMIT_DEFAULT_VALUE)!!.toInt(), 10)
|
||||
.rateLimitHost(imageServer[0].toHttpUrlOrNull()!!, preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[1].toHttpUrlOrNull()!!, preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[0].toHttpUrl(), preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.rateLimitHost(imageServer[1].toHttpUrl(), preferences.getString(IMAGE_CDN_RATELIMIT_PREF, IMAGE_CDN_RATELIMIT_DEFAULT_VALUE)!!.toInt())
|
||||
.build()
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource
|
||||
import okhttp3.CacheControl
|
||||
import okhttp3.Headers
|
||||
import okhttp3.HttpUrl
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
|
||||
import okhttp3.HttpUrl.Companion.toHttpUrl
|
||||
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
||||
import okhttp3.Request
|
||||
import okhttp3.RequestBody
|
||||
@ -42,7 +42,7 @@ class Manhuaren : HttpSource() {
|
||||
override val baseUrl = "http://mangaapi.manhuaren.com"
|
||||
|
||||
private val pageSize = 20
|
||||
private val baseHttpUrl = baseUrl.toHttpUrlOrNull()!!
|
||||
private val baseHttpUrl = baseUrl.toHttpUrl()
|
||||
|
||||
private val gsnSalt = "4e0a48e1c0b54041bce9c8f0e036124d"
|
||||
private val encodedPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmFCg289dTws27v8GtqIffkP4zgFR+MYIuUIeVO5AGiBV0rfpRh5gg7i8RrT12E9j6XwKoe3xJz1khDnPc65P5f7CJcNJ9A8bj7Al5K4jYGxz+4Q+n0YzSllXPit/Vz/iW5jFdlP6CTIgUVwvIoGEL2sS4cqqqSpCDKHSeiXh9CtMsktc6YyrSN+8mQbBvoSSew18r/vC07iQiaYkClcs7jIPq9tuilL//2uR9kWn5jsp8zHKVjmXuLtHDhM9lObZGCVJwdlN2KDKTh276u/pzQ1s5u8z/ARtK26N8e5w8mNlGcHcHfwyhjfEQurvrnkqYH37+12U3jGk5YNHGyOPcwIDAQAB"
|
||||
@ -452,7 +452,7 @@ class Manhuaren : HttpSource() {
|
||||
}
|
||||
|
||||
override fun mangaDetailsRequest(manga: SManga): Request {
|
||||
return myGet((baseUrl + manga.url).toHttpUrlOrNull()!!)
|
||||
return myGet((baseUrl + manga.url).toHttpUrl())
|
||||
}
|
||||
|
||||
override fun chapterListRequest(manga: SManga) = mangaDetailsRequest(manga)
|
||||
@ -504,7 +504,7 @@ class Manhuaren : HttpSource() {
|
||||
}
|
||||
|
||||
override fun pageListRequest(chapter: SChapter): Request {
|
||||
val url = (baseUrl + chapter.url).toHttpUrlOrNull()!!.newBuilder()
|
||||
val url = (baseUrl + chapter.url).toHttpUrl().newBuilder()
|
||||
.addQueryParameter("netType", "4")
|
||||
.addQueryParameter("loadreal", "1")
|
||||
.addQueryParameter("imageQuality", "2")
|
||||
|
@ -64,7 +64,7 @@ class wnacg : ParsedHttpSource(), ConfigurableSource {
|
||||
.addQueryParameter("s", "create_time_DESC")
|
||||
.addQueryParameter("q", query)
|
||||
.addQueryParameter("p", page.toString())
|
||||
return GET(builder.toString(), headers)
|
||||
return GET(builder.build(), headers)
|
||||
}
|
||||
|
||||
override fun headersBuilder(): Headers.Builder = super.headersBuilder()
|
||||
|
Loading…
x
Reference in New Issue
Block a user