diff --git a/src/pt/mangasproject/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mangasproject/default/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/pt/mangasproject/res/mipmap-hdpi/ic_launcher.png rename to multisrc/overrides/mangasproject/default/res/mipmap-hdpi/ic_launcher.png diff --git a/src/pt/mangasproject/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mangasproject/default/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/pt/mangasproject/res/mipmap-mdpi/ic_launcher.png rename to multisrc/overrides/mangasproject/default/res/mipmap-mdpi/ic_launcher.png diff --git a/src/pt/mangasproject/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mangasproject/default/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/pt/mangasproject/res/mipmap-xhdpi/ic_launcher.png rename to multisrc/overrides/mangasproject/default/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/pt/mangasproject/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mangasproject/default/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/pt/mangasproject/res/mipmap-xxhdpi/ic_launcher.png rename to multisrc/overrides/mangasproject/default/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/pt/mangasproject/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mangasproject/default/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/pt/mangasproject/res/mipmap-xxxhdpi/ic_launcher.png rename to multisrc/overrides/mangasproject/default/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/pt/mangasproject/res/web_hi_res_512.png b/multisrc/overrides/mangasproject/default/res/web_hi_res_512.png similarity index 100% rename from src/pt/mangasproject/res/web_hi_res_512.png rename to multisrc/overrides/mangasproject/default/res/web_hi_res_512.png diff --git a/multisrc/overrides/mangasproject/leitornet/src/LeitorNet.kt b/multisrc/overrides/mangasproject/leitornet/src/LeitorNet.kt new file mode 100644 index 000000000..158c80d65 --- /dev/null +++ b/multisrc/overrides/mangasproject/leitornet/src/LeitorNet.kt @@ -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/", "/") + } +} diff --git a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt b/multisrc/overrides/mangasproject/mangalivre/src/MangaLivre.kt similarity index 54% rename from src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt rename to multisrc/overrides/mangasproject/mangalivre/src/MangaLivre.kt index d67d69c96..b7f19e1a9 100644 --- a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProjectFactory.kt +++ b/multisrc/overrides/mangasproject/mangalivre/src/MangaLivre.kt @@ -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 = 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("\";") - } -} diff --git a/multisrc/overrides/mangasproject/toonei/src/Toonei.kt b/multisrc/overrides/mangasproject/toonei/src/Toonei.kt new file mode 100644 index 000000000..ac65ef849 --- /dev/null +++ b/multisrc/overrides/mangasproject/toonei/src/Toonei.kt @@ -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("\";") + } +} diff --git a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProject.kt similarity index 97% rename from src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt rename to multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProject.kt index 9ffefea21..cb5f8f114 100644 --- a/src/pt/mangasproject/src/eu/kanade/tachiyomi/extension/pt/mangasproject/MangasProject.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProject.kt @@ -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() } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProjectGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProjectGenerator.kt new file mode 100644 index 000000000..756f52e5a --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mangasproject/MangasProjectGenerator.kt @@ -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) { + MangasProjectGenerator().createAll() + } + } +} diff --git a/src/pt/mangasproject/AndroidManifest.xml b/src/pt/mangasproject/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/pt/mangasproject/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/pt/mangasproject/build.gradle b/src/pt/mangasproject/build.gradle deleted file mode 100644 index 40733ceb2..000000000 --- a/src/pt/mangasproject/build.gradle +++ /dev/null @@ -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"