diff --git a/.github/workflows/issue_moderator.yml b/.github/workflows/issue_moderator.yml index 9fd1b3786..10d0ca2c3 100644 --- a/.github/workflows/issue_moderator.yml +++ b/.github/workflows/issue_moderator.yml @@ -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|mode\\s*scanlator|bakai|japscan).*", + "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|bakai|japscan|izakaya|blackout\\s*comics).*", "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." diff --git a/REMOVED_SOURCES.md b/REMOVED_SOURCES.md index 731995e63..c282856a8 100644 --- a/REMOVED_SOURCES.md +++ b/REMOVED_SOURCES.md @@ -11,6 +11,7 @@ Here is a list of known sources that were removed. ### Too difficult to maintain - Bakai https://github.com/tachiyomiorg/tachiyomi-extensions/pull/17890 +- Blackout Comics and Izakaya https://github.com/tachiyomiorg/tachiyomi-extensions/pull/18500 - ColaManhua (COLA漫画) https://github.com/tachiyomiorg/tachiyomi-extensions/pull/11445 - Comikey https://github.com/tachiyomiorg/tachiyomi-extensions/pull/11971 - Constellar Scans https://github.com/tachiyomiorg/tachiyomi-extensions/pull/17277 diff --git a/multisrc/overrides/madara/izakaya/src/Izakaya.kt b/multisrc/overrides/madara/izakaya/src/Izakaya.kt deleted file mode 100644 index dcde6d952..000000000 --- a/multisrc/overrides/madara/izakaya/src/Izakaya.kt +++ /dev/null @@ -1,47 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.izakaya - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import okhttp3.OkHttpClient -import okhttp3.Request -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.concurrent.TimeUnit - -class Izakaya : Madara( - "Izakaya", - "https://leitorizakaya.net", - "pt-BR", - SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")), -) { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(1, 3, TimeUnit.SECONDS) - .build() - - override val useNewChapterEndpoint = true - - override val chapterUrlSuffix = "" - - override fun pageListRequest(chapter: SChapter): Request { - val fixedUrl = chapter.url.substringBeforeLast("?style=") - - if (fixedUrl.startsWith("http")) { - return GET(fixedUrl, headers) - } - - return GET(baseUrl + fixedUrl, headers) - } - - override fun imageRequest(page: Page): Request { - val newHeaders = headersBuilder() - .set("Referer", page.url) - .set("Accept", "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8") - .build() - - return GET(page.imageUrl!!, newHeaders) - } -} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt index 019be45b9..385cf93b5 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt @@ -166,7 +166,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("IsekaiScan.top (unoriginal)", "https://isekaiscan.top", "en", pkgName = "isekaiscantop", className = "IsekaiScanTop", overrideVersionCode = 1), SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga", overrideVersionCode = 1), SingleLang("Its Your Right Manhua", "https://itsyourightmanhua.com", "en", className = "ItsYourRightManhua", overrideVersionCode = 2), - SingleLang("Izakaya", "https://leitorizakaya.net", "pt-BR", isNsfw = true, overrideVersionCode = 2), SingleLang("Jiangzaitoon", "https://jiangzaitoon.co", "tr", isNsfw = true, overrideVersionCode = 2), SingleLang("Jimanga", "https://jimanga.com", "en", isNsfw = false), SingleLang("Kakusei Project", "https://kakuseiproject.com.br", "pt-BR"), diff --git a/src/pt/blackoutcomics/AndroidManifest.xml b/src/pt/blackoutcomics/AndroidManifest.xml deleted file mode 100644 index 8072ee00d..000000000 --- a/src/pt/blackoutcomics/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/pt/blackoutcomics/build.gradle b/src/pt/blackoutcomics/build.gradle deleted file mode 100644 index 994fff687..000000000 --- a/src/pt/blackoutcomics/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Blackout Comics' - pkgNameSuffix = 'pt.blackoutcomics' - extClass = '.BlackoutComics' - extVersionCode = 2 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/blackoutcomics/res/mipmap-hdpi/ic_launcher.png b/src/pt/blackoutcomics/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index d8959010e..000000000 Binary files a/src/pt/blackoutcomics/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackoutcomics/res/mipmap-mdpi/ic_launcher.png b/src/pt/blackoutcomics/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 9d68b4471..000000000 Binary files a/src/pt/blackoutcomics/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackoutcomics/res/mipmap-xhdpi/ic_launcher.png b/src/pt/blackoutcomics/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index c8f29da85..000000000 Binary files a/src/pt/blackoutcomics/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackoutcomics/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/blackoutcomics/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9f813633a..000000000 Binary files a/src/pt/blackoutcomics/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackoutcomics/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/blackoutcomics/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 6bb118a5a..000000000 Binary files a/src/pt/blackoutcomics/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackoutcomics/res/web_hi_res_512.png b/src/pt/blackoutcomics/res/web_hi_res_512.png deleted file mode 100644 index a6a7a82a3..000000000 Binary files a/src/pt/blackoutcomics/res/web_hi_res_512.png and /dev/null differ diff --git a/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt b/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt deleted file mode 100644 index bba89513c..000000000 --- a/src/pt/blackoutcomics/src/eu/kanade/tachiyomi/extension/pt/blackoutcomics/BlackoutComics.kt +++ /dev/null @@ -1,154 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.blackoutcomics - -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.Page -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.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.concurrent.TimeUnit - -class BlackoutComics : ParsedHttpSource() { - - override val name = "Blackout Comics" - - override val baseUrl = "https://blackoutcomics.com" - - override val lang = "pt-BR" - - override val supportsLatest = true - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .rateLimit(1, 3, TimeUnit.SECONDS) - .build() - - override fun headersBuilder(): Headers.Builder = Headers.Builder() - .add("Accept", ACCEPT) - .add("Accept-Language", ACCEPT_LANGUAGE) - .add("Referer", "$baseUrl/") - - override fun popularMangaRequest(page: Int): Request = GET(baseUrl, headers) - - override fun popularMangaSelector(): String = "h3:contains(Mais Lidos) ~ div.anime-box a" - - override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { - title = element.selectFirst("div.anime-blog p")!!.text() - thumbnail_url = element.selectFirst("img")!!.absUrl("src") - url = element.attr("href") - } - - override fun popularMangaNextPageSelector(): String? = null - - override fun latestUpdatesRequest(page: Int) = popularMangaRequest(page) - - override fun latestUpdatesSelector() = "div:contains(Atualizados Recentemente) + div.row div.anime-blog" - - override fun latestUpdatesFromElement(element: Element): SManga = SManga.create().apply { - title = element.selectFirst("a p")!!.text() - thumbnail_url = element.selectFirst("img")!!.absUrl("src") - url = element.selectFirst("a")!!.attr("href") - } - - override fun latestUpdatesNextPageSelector(): String? = null - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/comics".toHttpUrl().newBuilder() - .addQueryParameter("search", query) - .build() - - return GET(url, headers) - } - - override fun searchMangaSelector() = "section.anime div.anime-box" - - override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply { - title = element.selectFirst("p")!!.text() - thumbnail_url = element.selectFirst("img")!!.absUrl("src") - url = element.selectFirst("[onclick]")!!.attr("onclick") - .substringAfter("'") - .substringBeforeLast("'") - } - - override fun searchMangaNextPageSelector(): String? = null - - override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { - val infoElement = document.selectFirst("section.video")!! - - title = infoElement.selectFirst("h2")!!.text() - author = infoElement.selectFirst("div.trailer-content p:contains(Autor:) b")!!.text() - artist = infoElement.selectFirst("div.trailer-content p:contains(Artista:) b")!!.text() - genre = infoElement.selectFirst("div.trailer-content p:contains(Genêros:)")!!.ownText() - status = infoElement.selectFirst("div.trailer-content p:contains(Status:) b")!!.text().toStatus() - description = infoElement.selectFirst("h3:contains(Descrição) + p")!!.text() - thumbnail_url = infoElement.selectFirst("img")!!.absUrl("src") - } - - override fun chapterListSelector() = "section.relese h5:not(:has(img.vip))" - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - name = element.selectFirst("a")!!.ownText() - date_upload = element.select("span:last-of-type").text().toDate() - url = element.selectFirst("a")!!.attr("href") - } - - override fun pageListRequest(chapter: SChapter): Request { - val newHeaders = headersBuilder() - .set("Referer", baseUrl + chapter.url.substringBeforeLast("/ler")) - .add("Sec-Fetch-Dest", "document") - .add("Sec-Fetch-Mode", "navigate") - .add("Sec-Fetch-Site", "same-origin") - .add("Sec-Fetch-User", "?1") - .build() - - return GET(baseUrl + chapter.url, newHeaders) - } - - override fun pageListParse(document: Document): List { - return document.select("div.chapter-image canvas") - .mapIndexed { index, element -> - Page(index, document.location(), element.absUrl("data-src")) - } - } - - override fun imageUrlParse(document: Document) = "" - - override fun imageRequest(page: Page): Request { - val newHeaders = headersBuilder() - .set("Referer", page.url) - .set("Accept", "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8") - .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" -> SManga.COMPLETED - "Cancelado" -> SManga.CANCELLED - "Em Espera" -> SManga.ON_HIATUS - else -> SManga.UNKNOWN - } - - companion object { - private const val ACCEPT = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" - private const val ACCEPT_LANGUAGE = "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3" - - private val DATE_FORMATTER by lazy { - SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")) - } - } -}