MangasProject split (#6455)

* Create MangasProject.kt

* Create MangasProjectGenerator.kt

* Added Override and icons

* Deleted pre split files

* Update MangaLivre.kt

* Update Toonei.kt

* Update LeitorNet.kt

* Update MangasProject.kt

* Update LeitorNet.kt

* Update MangaLivre.kt

* Update Toonei.kt
This commit is contained in:
Johannes Joens 2021-04-08 03:53:07 +12:00 committed by GitHub
parent 506f6555c2
commit 36af40db57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 128 additions and 79 deletions

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -0,0 +1,52 @@
package eu.kanade.tachiyomi.extension.pt.leitornet
import eu.kanade.tachiyomi.multisrc.mangasproject.MangasProject
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Request
import okhttp3.Response
import okhttp3.OkHttpClient
import okhttp3.FormBody
import okhttp3.Headers
import okhttp3.HttpUrl
import java.util.concurrent.TimeUnit
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
class LeitorNet : MangasProject("Leitor.net", "https://leitor.net", "pt-br") {
// Use the old generated id when the source did have the name "mangásPROJECT" and
// did have mangas in their catalogue. Now they "only have webtoons" and
// became a different website, but they still use the same structure.
// Existing mangas and other titles in the library still work.
override val id: Long = 2225174659569980836
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(5, 1, TimeUnit.SECONDS))
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.build()
/**
* Temporary fix to bypass Cloudflare.
*/
override fun pageListRequest(chapter: SChapter): Request {
val newHeaders = super.pageListRequest(chapter).headers().newBuilder()
.set("Referer", "https://mangalivre.net/home")
.build()
val newChapterUrl = chapter.url
.replace("/manga/", "/ler/")
.replace("/(\\d+)/capitulo-".toRegex(), "/online/$1/capitulo-")
return GET("https://mangalivre.net$newChapterUrl", newHeaders)
}
override fun getChapterUrl(response: Response): String {
return super.getChapterUrl(response)
.replace("https://mangalivre.net", baseUrl)
.replace("/ler/", "/manga/")
.replace("/online/", "/")
}
}

View File

@ -1,59 +1,31 @@
package eu.kanade.tachiyomi.extension.pt.mangasproject
package eu.kanade.tachiyomi.extension.pt.mangalivre
import eu.kanade.tachiyomi.annotations.Nsfw
import eu.kanade.tachiyomi.multisrc.mangasproject.MangasProject
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import okhttp3.OkHttpClient
import okhttp3.FormBody
import okhttp3.Headers
import okhttp3.HttpUrl
import java.util.concurrent.TimeUnit
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
@Nsfw
class MangasProjectFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
LeitorNet(),
MangaLivre(),
Toonei()
)
}
class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net", "pt-br") {
class LeitorNet : MangasProject("Leitor.net", "https://leitor.net") {
// Use the old generated id when the source did have the name "mangásPROJECT" and
// did have mangas in their catalogue. Now they "only have webtoons" and
// became a different website, but they still use the same structure.
// Existing mangas and other titles in the library still work.
override val id: Long = 2225174659569980836
/**
* Temporary fix to bypass Cloudflare.
*/
override fun pageListRequest(chapter: SChapter): Request {
val newHeaders = super.pageListRequest(chapter).headers().newBuilder()
.set("Referer", "https://mangalivre.net/home")
.build()
val newChapterUrl = chapter.url
.replace("/manga/", "/ler/")
.replace("/(\\d+)/capitulo-".toRegex(), "/online/$1/capitulo-")
return GET("https://mangalivre.net$newChapterUrl", newHeaders)
}
override fun getChapterUrl(response: Response): String {
return super.getChapterUrl(response)
.replace("https://mangalivre.net", baseUrl)
.replace("/ler/", "/manga/")
.replace("/online/", "/")
}
}
class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net") {
// Hardcode the id because the language wasn't specific.
override val id: Long = 4762777556012432014
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(5, 1, TimeUnit.SECONDS))
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.build()
override fun popularMangaRequest(page: Int): Request {
val originalRequestUrl = super.popularMangaRequest(page).url().toString()
@ -109,13 +81,3 @@ class MangaLivre : MangasProject("Mangá Livre", "https://mangalivre.net") {
private const val DEFAULT_TYPE = "manga"
}
}
class Toonei : MangasProject("Toonei", "https://toonei.com") {
override fun getReaderToken(document: Document): String? {
return document.select("script:containsData(window.PAGES_KEY)").firstOrNull()
?.data()
?.substringAfter("\"")
?.substringBefore("\";")
}
}

View File

@ -0,0 +1,29 @@
package eu.kanade.tachiyomi.extension.pt.toonei
import eu.kanade.tachiyomi.multisrc.mangasproject.MangasProject
import org.jsoup.nodes.Document
import okhttp3.Request
import okhttp3.Response
import okhttp3.OkHttpClient
import okhttp3.FormBody
import okhttp3.Headers
import okhttp3.HttpUrl
import java.util.concurrent.TimeUnit
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
class Toonei : MangasProject("Toonei", "https://toonei.com", "pt-br") {
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(5, 1, TimeUnit.SECONDS))
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
.build()
override fun getReaderToken(document: Document): String? {
return document.select("script:containsData(window.PAGES_KEY)").firstOrNull()
?.data()
?.substringAfter("\"")
?.substringBefore("\";")
}
}

View File

@ -1,11 +1,10 @@
package eu.kanade.tachiyomi.extension.pt.mangasproject
package eu.kanade.tachiyomi.multisrc.mangasproject
import com.github.salomonbrys.kotson.array
import com.github.salomonbrys.kotson.obj
import com.github.salomonbrys.kotson.string
import com.google.gson.JsonObject
import com.google.gson.JsonParser
import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.model.FilterList
@ -31,16 +30,16 @@ import java.util.concurrent.TimeUnit
abstract class MangasProject(
override val name: String,
override val baseUrl: String
override val baseUrl: String,
override val lang: String
) : HttpSource() {
override val lang = "pt-BR"
override val supportsLatest = true
// Sometimes the site is slow.
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.addInterceptor(RateLimitInterceptor(5, 1, TimeUnit.SECONDS))
//.addInterceptor(RateLimitInterceptor(5, 1, TimeUnit.SECONDS))
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.writeTimeout(1, TimeUnit.MINUTES)
@ -279,7 +278,7 @@ abstract class MangasProject(
.mapIndexed { i, obj -> Page(i, chapterUrl, obj.string) }
}
protected open fun getChapterUrl(response: Response): String {
open fun getChapterUrl(response: Response): String {
return response.request().url().toString()
}

View File

@ -0,0 +1,26 @@
package eu.kanade.tachiyomi.multisrc.mangasproject
import generator.ThemeSourceData.SingleLang
import generator.ThemeSourceGenerator
class MangasProjectGenerator : ThemeSourceGenerator {
override val themePkg = "mangasproject"
override val themeClass = "MangasProject"
override val baseVersionCode: Int = 1
override val sources = listOf(
SingleLang("Leitor.net", "https://leitor.net", "pt-br", className = "LeitorNet"),
SingleLang("Mangá Livre", "https://mangalivre.net", "pt-br", className = "MangaLivre", isNsfw = true),
SingleLang("Toonei", "https://toonei.com", "pt-br"),
)
companion object {
@JvmStatic
fun main(args: Array<String>) {
MangasProjectGenerator().createAll()
}
}
}

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="eu.kanade.tachiyomi.extension" />

View File

@ -1,17 +0,0 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
extName = 'mangásPROJECT'
pkgNameSuffix = 'pt.mangasproject'
extClass = '.MangasProjectFactory'
extVersionCode = 18
libVersion = '1.2'
containsNsfw = true
}
dependencies {
implementation project(':lib-ratelimit')
}
apply from: "$rootDir/common.gradle"