Remove MS and PS extensions (#17865)

* Remove MS and PS extensions.

* Add to the autocloser and removed sources list.
This commit is contained in:
Alessandro Jean 2023-09-09 18:56:34 -03:00 committed by GitHub
parent 14b761ada7
commit 27b9487ea8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 2 additions and 217 deletions

View File

@ -43,7 +43,7 @@ jobs:
},
{
"type": "both",
"regex": ".*(hq\\s*dragon|manga\\s*host|supermangas|superhentais|union\\s*mangas|yes\\s*mangas|manhuascan|manhwahot|leitor\\.?net|manga\\s*livre|tsuki\\s*mangas|manga\\s*yabu|mangas\\.in|mangas\\.pw|hentaikai|toptoon\\+?|colamanhua|mangadig|hitomi\\.la|copymanga|neox|1manga\\.co|mangafox\\.fun|mangahere\\.onl|mangakakalot\\.fun|manganel(?!o)|mangaonline\\.fun|mangatoday|manga\\.town|onemanga\\.info|koushoku|ksk\\.moe|comikey|leercapitulo|c[uứ]u\\s*truy[eệ]n|day\\s*comics?|reaper\\s*scans|constellar\\s*scans).*",
"regex": ".*(hq\\s*dragon|manga\\s*host|supermangas|superhentais|union\\s*mangas|yes\\s*mangas|manhuascan|manhwahot|leitor\\.?net|manga\\s*livre|tsuki\\s*mangas|manga\\s*yabu|mangas\\.in|mangas\\.pw|hentaikai|toptoon\\+?|colamanhua|mangadig|hitomi\\.la|copymanga|neox|1manga\\.co|mangafox\\.fun|mangahere\\.onl|mangakakalot\\.fun|manganel(?!o)|mangaonline\\.fun|mangatoday|manga\\.town|onemanga\\.info|koushoku|ksk\\.moe|comikey|leercapitulo|c[uứ]u\\s*truy[eệ]n|day\\s*comics?|reaper\\s*scans|constellar\\s*scans|mode\\s*scanlator).*",
"ignoreCase": true,
"labels": ["invalid"],
"message": "{match} will not be added back as it is too difficult to maintain. Read [this](https://github.com/tachiyomiorg/tachiyomi-extensions/blob/master/REMOVED_SOURCES.md) for more information."

View File

@ -27,6 +27,7 @@ Here is a list of known sources that were removed.
- MangaYabu! https://github.com/tachiyomiorg/tachiyomi-extensions/pull/9336
- ManhuaScan https://github.com/tachiyomiorg/tachiyomi-extensions/pull/7129
- ManhwaHot https://github.com/tachiyomiorg/tachiyomi-extensions/pull/7129
- Mode Scanlator https://github.com/tachiyomiorg/tachiyomi-extensions/pull/17865
- Neox Scanlator https://github.com/tachiyomiorg/tachiyomi-extensions/pull/12695
- Reaper Scans (EN) https://github.com/tachiyomiorg/tachiyomi-extensions/pull/16819
- SuperMangás and SuperHentais https://github.com/tachiyomiorg/tachiyomi-extensions/pull/6348

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

View File

@ -1,26 +0,0 @@
package eu.kanade.tachiyomi.extension.pt.modescanlator
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import okhttp3.OkHttpClient
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class ModeScanlator : MangaThemesia(
"Mode Scanlator",
"https://modescanlator.com",
"pt-BR",
mangaUrlDirectory = "/projetos",
dateFormat = SimpleDateFormat("MMMMM dd, yyyy", Locale("pt", "BR")),
) {
// Site changed from Madara to WpMangaReader.
override val versionId: Int = 2
override val client: OkHttpClient = super.client.newBuilder()
.rateLimit(1, 2, TimeUnit.SECONDS)
.build()
override val altNamePrefix = "Nome alternativo: "
}

View File

@ -88,7 +88,6 @@ class MangaThemesiaGenerator : ThemeSourceGenerator {
SingleLang("MELOKOMIK", "https://melokomik.xyz", "id"),
SingleLang("Mihentai", "https://mihentai.com", "all", isNsfw = true, overrideVersionCode = 2),
SingleLang("MirrorDesu", "https://mirrordesu.me", "id", isNsfw = true),
SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR", overrideVersionCode = 8),
SingleLang("Moon Daisy Scans", "https://moondaisyscans.com", "tr", isNsfw = true),
SingleLang("Mundo Mangá-Kun", "https://mundomangakun.com.br", "pt-BR", className = "MundoMangaKun", isNsfw = true),
SingleLang("Nekomik", "https://nekomik.com", "id"),

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest />

View File

@ -1,13 +0,0 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlinx-serialization'
ext {
extName = 'Peach Scan'
pkgNameSuffix = 'pt.peachscan'
extClass = '.PeachScan'
extVersionCode = 32
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

View File

@ -1,174 +0,0 @@
package eu.kanade.tachiyomi.extension.pt.peachscan
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.interceptor.rateLimit
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.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import kotlinx.serialization.Serializable
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json
import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import uy.kohesive.injekt.injectLazy
import java.text.SimpleDateFormat
import java.util.Locale
import java.util.concurrent.TimeUnit
class PeachScan : ParsedHttpSource() {
override val name = "Peach Scan"
override val baseUrl = "https://peachscan.com"
override val lang = "pt-BR"
override val supportsLatest = true
// Migrated from Madara to a custom CMS.
override val versionId = 2
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.rateLimit(1, 2, TimeUnit.SECONDS)
.build()
private val json: Json by injectLazy()
override fun headersBuilder(): Headers.Builder = Headers.Builder()
.add("Referer", "$baseUrl/")
override fun popularMangaRequest(page: Int): Request = GET(baseUrl, headers)
override fun popularMangaSelector(): String = "section.populares a.populares__links"
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
title = element.selectFirst("p.nome__obra")!!.text()
thumbnail_url = element.selectFirst("img.populares__img")!!.absUrl("src")
setUrlWithoutDomain(element.attr("href"))
}
override fun popularMangaNextPageSelector(): String? = null
override fun latestUpdatesRequest(page: Int): Request = GET(baseUrl, headers)
override fun latestUpdatesSelector() = "section.all__comics div.comic"
override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply {
title = element.selectFirst("h2.titulo__comic")!!.text()
thumbnail_url = element.selectFirst("img.comic__img")!!.absUrl("src")
setUrlWithoutDomain(element.selectFirst("a.box-image")!!.attr("href"))
}
override fun latestUpdatesNextPageSelector(): String? = null
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val url = "$baseUrl/auto-complete".toHttpUrl().newBuilder()
.addQueryParameter("term", query)
.toString()
return GET(url, headers)
}
override fun searchMangaParse(response: Response): MangasPage {
val partialHtml = response.parseAs<List<AutoCompleteDto>>()
.joinToString("") { it.html }
val document = Jsoup.parseBodyFragment(partialHtml, baseUrl)
val results = document.select(searchMangaSelector())
.map(::searchMangaFromElement)
return MangasPage(results, hasNextPage = false)
}
override fun searchMangaSelector() = "a.autocomplete-link"
override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply {
title = element.selectFirst("span.autocomplete-text")!!.text()
thumbnail_url = element.selectFirst("img.autocomplete-img")!!.absUrl("src")
setUrlWithoutDomain(element.attr("href"))
}
override fun searchMangaNextPageSelector(): String? = null
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
val descriptionEl = document.selectFirst("section.desc__comics")!!
title = descriptionEl.selectFirst("h1.desc__titulo__comic")!!.text()
author = descriptionEl.selectFirst("div:contains(Autor) + span")!!.text()
genre = descriptionEl.select("div:contains(Gênero) + span a")
.joinToString { it.text() }
status = descriptionEl.selectFirst("div:contains(Status) + span")!!.text().toStatus()
description = document.selectFirst("p.sumario__sinopse__texto")!!.text()
thumbnail_url = descriptionEl.selectFirst("img.sumario__img")!!.absUrl("src")
}
override fun chapterListSelector() = "ul.capitulos__lista a.link__capitulos"
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
name = element.selectFirst("span.numero__capitulo")!!.text()
scanlator = name
date_upload = element.selectFirst("span.data__lançamento")!!.text().toDate()
setUrlWithoutDomain(element.attr("href"))
}
override fun pageListRequest(chapter: SChapter): Request {
val newHeaders = headersBuilder()
.set("Referer", baseUrl + chapter.url.substringBeforeLast("/"))
.build()
return GET(baseUrl + chapter.url, newHeaders)
}
override fun pageListParse(document: Document): List<Page> {
return document.select("div.capitulo img")
.mapIndexed { i, element ->
Page(i, document.location(), element.absUrl("src"))
}
}
override fun imageUrlParse(document: Document) = ""
override fun imageRequest(page: Page): Request {
val newHeaders = headersBuilder()
.set("Accept", ACCEPT_IMAGE)
.set("Referer", page.url)
.build()
return GET(page.imageUrl!!, newHeaders)
}
private fun String.toDate(): Long {
return runCatching { DATE_FORMATTER.parse(trim())?.time }
.getOrNull() ?: 0L
}
private fun String.toStatus() = when (this) {
"Em Lançamento" -> SManga.ONGOING
"Completo", "Concluído", "Finalizado" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
private inline fun <reified T> Response.parseAs(): T = use {
json.decodeFromString(it.body.string())
}
@Serializable
private data class AutoCompleteDto(val html: String)
companion object {
private const val ACCEPT_IMAGE = "image/webp,image/apng,image/*,*/*;q=0.8"
private val DATE_FORMATTER by lazy {
SimpleDateFormat("dd 'de' MMMMM 'de' yyyy 'às' HH:mm", Locale("pt", "BR"))
}
}
}