Emerald various fixes (#5286)

* convert Emerald to BatoTo

* missing from last commit

* reformat file

* add Burmese

* new icons

* new icons by @as280093
This commit is contained in:
Aria Moradi 2021-01-02 01:55:15 +03:30 committed by GitHub
parent c813115db8
commit ffc37b675f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 89 additions and 102 deletions

View File

@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android' apply plugin: 'kotlin-android'
ext { ext {
extName = 'Emerald' extName = 'Bato.to'
pkgNameSuffix = 'all.emerald' pkgNameSuffix = 'all.batoto'
extClass = '.EmeraldFactory' extClass = '.BatoToFactory'
extVersionCode = 7 extVersionCode = 1
libVersion = '1.2' libVersion = '1.2'
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

View File

@ -1,10 +1,9 @@
package eu.kanade.tachiyomi.extension.all.emerald package eu.kanade.tachiyomi.extension.all.batoto
import com.squareup.duktape.Duktape import com.squareup.duktape.Duktape
import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.source.model.Filter
import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.FilterList
import eu.kanade.tachiyomi.source.model.MangasPage
import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.model.SManga
@ -12,7 +11,6 @@ import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.HttpUrl import okhttp3.HttpUrl
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import org.jsoup.nodes.Document import org.jsoup.nodes.Document
@ -20,13 +18,14 @@ import org.jsoup.nodes.Element
import java.util.Calendar import java.util.Calendar
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
open class Emerald( open class BatoTo(
override val name: String,
override val baseUrl: String,
override val lang: String, override val lang: String,
private val Mtlang: String private val siteLang: String
) : ParsedHttpSource() { ) : ParsedHttpSource() {
override val name: String = "Bato.to"
override val baseUrl: String = "https://bato.to"
override val supportsLatest = true override val supportsLatest = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder() override val client: OkHttpClient = network.cloudflareClient.newBuilder()
@ -35,7 +34,7 @@ open class Emerald(
.build() .build()
override fun latestUpdatesRequest(page: Int): Request { override fun latestUpdatesRequest(page: Int): Request {
return GET("$baseUrl/browse?langs=$Mtlang&sort=update&page=$page") return GET("$baseUrl/browse?langs=$siteLang&sort=update&page=$page")
} }
override fun latestUpdatesSelector() = "div#series-list div.col" override fun latestUpdatesSelector() = "div#series-list div.col"
@ -53,7 +52,7 @@ open class Emerald(
override fun latestUpdatesNextPageSelector() = "div#mainer .pagination .page-item:not(.disabled) a.page-link:contains(»)" override fun latestUpdatesNextPageSelector() = "div#mainer .pagination .page-item:not(.disabled) a.page-link:contains(»)"
override fun popularMangaRequest(page: Int): Request { override fun popularMangaRequest(page: Int): Request {
return GET("$baseUrl/browse?langs=$Mtlang&sort=views_w&page=$page") return GET("$baseUrl/browse?langs=$siteLang&sort=views_w&page=$page")
} }
override fun popularMangaSelector() = latestUpdatesSelector() override fun popularMangaSelector() = latestUpdatesSelector()
@ -63,10 +62,13 @@ open class Emerald(
override fun popularMangaNextPageSelector() = latestUpdatesNextPageSelector() override fun popularMangaNextPageSelector() = latestUpdatesNextPageSelector()
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
return if (query.isNotBlank()) {
GET("$baseUrl/search?word=$query&page=$page")
} else {
var author: String? = null var author: String? = null
val url = HttpUrl.parse("$baseUrl/browse")!!.newBuilder() val url = HttpUrl.parse("$baseUrl/browse")!!.newBuilder()
url.addQueryParameter("page", page.toString()) url.addQueryParameter("page", page.toString())
url.addQueryParameter("langs", Mtlang) url.addQueryParameter("langs", siteLang)
filters.forEach { filter -> filters.forEach { filter ->
when (filter) { when (filter) {
is AuthorFilter -> { is AuthorFilter -> {
@ -144,9 +146,8 @@ open class Emerald(
} }
} }
} }
return if (query.isNotBlank() || author!!.isNotBlank()) { GET(url.build().toString(), headers)
GET("$baseUrl/search?q=$query&a=$author") }
} else GET(url.build().toString(), headers)
} }
override fun searchMangaSelector() = latestUpdatesSelector() override fun searchMangaSelector() = latestUpdatesSelector()
@ -155,15 +156,6 @@ open class Emerald(
override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector() override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector()
private val searchMangaTitles = HashSet<String>()
override fun searchMangaParse(response: Response): MangasPage {
val mp = super.searchMangaParse(response)
val manga = mp.mangas.distinctBy { it.title.toLowerCase() }.filterNot { searchMangaTitles.contains(it.title.toLowerCase()) }
searchMangaTitles.addAll(manga.map { it.title.toLowerCase() })
return MangasPage(manga, mp.hasNextPage)
}
override fun mangaDetailsRequest(manga: SManga): Request { override fun mangaDetailsRequest(manga: SManga): Request {
if (manga.url.startsWith("http")) { if (manga.url.startsWith("http")) {
return GET(manga.url, headers) return GET(manga.url, headers)

View File

@ -1,18 +1,12 @@
package eu.kanade.tachiyomi.extension.all.emerald package eu.kanade.tachiyomi.extension.all.batoto
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory import eu.kanade.tachiyomi.source.SourceFactory
class EmeraldFactory : SourceFactory { class BatoToFactory : SourceFactory {
override fun createSources(): List<Source> = languages.map { Mangawindow(it.first, it.second) } + languages.map { Batoto(it.first, it.second) } override fun createSources(): List<Source> = languages.map { BatoTo(it.first, it.second) }
} }
class Mangawindow(tachiLang: String, siteLang: String) :
Emerald("Mangawindow", "https://mangawindow.net", tachiLang, siteLang)
class Batoto(tachiLang: String, siteLang: String) :
Emerald("Bato.to", "https://bato.to", tachiLang, siteLang)
private val languages = listOf( private val languages = listOf(
Pair("ar", "ar"), Pair("ar", "ar"),
Pair("bg", "bg"), Pair("bg", "bg"),
@ -40,6 +34,7 @@ private val languages = listOf(
Pair("ml", "ml"), Pair("ml", "ml"),
Pair("mn", "mn"), Pair("mn", "mn"),
Pair("ms", "ms"), Pair("ms", "ms"),
Pair("my", "my"),
Pair("nl", "nl"), Pair("nl", "nl"),
Pair("no", "no"), Pair("no", "no"),
Pair("pl", "pl"), Pair("pl", "pl"),

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB