Remove dead sources (#11188)

* Remove Kanjiku

* Remove DAYcomics.me

* Remove Catharsis Fantasy
This commit is contained in:
Vetle Ledaal 2025-10-22 07:29:29 +02:00 committed by Draff
parent 89f33e0106
commit a98f720ff3
Signed by: Draff
GPG Key ID: E8A89F3211677653
22 changed files with 0 additions and 245 deletions

View File

@ -1,7 +0,0 @@
ext {
extName = 'Kanjiku'
extClass = '.KanjikuFactory'
extVersionCode = 1
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -1,117 +0,0 @@
package eu.kanade.tachiyomi.extension.all.kanjiku
import eu.kanade.tachiyomi.network.GET
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 eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import rx.Observable
class Kanjiku(
override val lang: String,
subDomain: String,
) : ParsedHttpSource() {
override val name = "Kanjiku"
override val baseUrl = "https://${subDomain}kanjiku.net"
override val supportsLatest = true
override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/mangas", headers)
override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/latest", headers)
override fun popularMangaSelector(): String = ".manga_box"
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
setUrlWithoutDomain(element.absUrl("href"))
title = element.selectFirst(".manga_title")!!.text()
thumbnail_url = element.selectFirst("img")?.absUrl("src")
}
override fun latestUpdatesParse(response: Response): MangasPage {
val mangas = response.asJsoup().select(".manga_overview_box_headline a").map { element ->
SManga.create().apply {
var url = element.absUrl("href").toHttpUrl()
if (url.pathSegments.last() == "") {
// remove empty path segment
url = url.newBuilder().removePathSegment(url.pathSegments.lastIndex).build()
}
setUrlWithoutDomain(url.toString())
title = element.text()
}
}.distinctBy { it.url }
return MangasPage(mangas, false)
}
override fun fetchSearchManga(
page: Int,
query: String,
filters: FilterList,
): Observable<MangasPage> {
return Observable.just(
MangasPage(
client.newCall(popularMangaRequest(page)).execute().asJsoup()
.select(popularMangaSelector()).map { popularMangaFromElement(it) }
.filter { query.lowercase() in it.title.lowercase() },
false,
),
)
}
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
title = document.selectFirst(".manga_page_title")!!.text()
description = document.selectFirst(".manga_description")?.text()
thumbnail_url = document.selectFirst(".manga_page_picture")?.absUrl("src")
status = when (
document.selectFirst(".tags .tag_container_special .tag")?.absUrl("href")
?.toHttpUrl()?.pathSegments?.last()
) {
"47" -> SManga.ONGOING
"48" -> SManga.COMPLETED
"49" -> SManga.ON_HIATUS
"50" -> SManga.CANCELLED
"51" -> SManga.LICENSED
else -> SManga.UNKNOWN // using tag ids so that it works in all languages
}
genre = document.select(".tags .tag_container .tag").joinToString { it.text() }
}
override fun chapterListSelector(): String = ".manga_chapter a"
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
setUrlWithoutDomain(
element.absUrl("href").toHttpUrl().run {
newBuilder().setPathSegment(pathSegments.lastIndex, "0").build()
}.toString(),
)
name = element.text()
}
override fun pageListParse(document: Document): List<Page> =
document.select(".container img").mapIndexed { index, element ->
Page(index, imageUrl = element.absUrl("src"))
}
override fun latestUpdatesFromElement(element: Element): SManga =
throw UnsupportedOperationException()
override fun searchMangaFromElement(element: Element): SManga =
throw UnsupportedOperationException()
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request =
throw UnsupportedOperationException()
override fun searchMangaSelector(): String = throw UnsupportedOperationException()
override fun latestUpdatesSelector(): String = throw UnsupportedOperationException()
override fun searchMangaNextPageSelector(): String? = null
override fun popularMangaNextPageSelector(): String? = null
override fun latestUpdatesNextPageSelector(): String? = null
override fun imageUrlParse(document: Document): String = ""
}

View File

@ -1,11 +0,0 @@
package eu.kanade.tachiyomi.extension.all.kanjiku
import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceFactory
class KanjikuFactory : SourceFactory {
override fun createSources(): List<Source> = listOf(
Kanjiku("de", ""),
Kanjiku("en", "eng."),
)
}

View File

@ -1,9 +0,0 @@
ext {
extName = 'DAYcomics.me'
extClass = '.DAYcomicsMe'
themePkg = 'hotcomics'
overrideVersionCode = 0
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -1,30 +0,0 @@
package eu.kanade.tachiyomi.extension.en.daycomicsme
import eu.kanade.tachiyomi.multisrc.hotcomics.HotComics
class DAYcomicsMe : HotComics(
"DAYcomics.me",
"en",
"https://daycomics.me",
) {
override val browseList = listOf(
Pair("Home", "en"),
Pair("Weekly", "en/weekly"),
Pair("New", "en/new"),
Pair("Genre: All", "en/genres"),
Pair("Genre: Romance", "en/genres/Romance"),
Pair("Genre: Office", "en/genres/Office"),
Pair("Genre: College", "en/genres/College"),
Pair("Genre: Drama", "en/genres/Drama"),
Pair("Genre: Isekai", "en/genres/Isekai"),
Pair("Genre: UNCENSORED", "en/genres/UNCENSORED"),
Pair("Genre: Action", "en/genres/Action"),
Pair("Genre: BL", "en/genres/BL"),
Pair("Genre: New", "en/genres/New"),
Pair("Genre: Slice of Life", "en/genres/Slice_of_Life"),
Pair("Genre: Supernatural", "en/genres/Supernatural"),
Pair("Genre: Historical", "en/genres/Historical"),
Pair("Genre: School Life", "en/genres/School_Life"),
Pair("Genre: Horror Thriller", "en/genres/Horror_Thriller"),
)
}

View File

@ -1,10 +0,0 @@
ext {
extName = 'Catharsis Fantasy'
extClass = '.CatharsisFantasy'
themePkg = 'mangathemesia'
baseUrl = 'https://catharsisfantasy.com'
overrideVersionCode = 0
isNsfw = true
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,61 +0,0 @@
package eu.kanade.tachiyomi.extension.es.catharsisfantasy
import android.annotation.SuppressLint
import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.interceptor.rateLimit
import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.OkHttpClient
import org.jsoup.nodes.Document
import java.security.SecureRandom
import java.security.cert.X509Certificate
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
class CatharsisFantasy : MangaThemesia(
"Catharsis Fantasy",
"https://catharsisfantasy.com",
"es",
) {
override val client = super.client.newBuilder()
.rateLimit(3)
.ignoreAllSSLErrors()
.build()
private val iframeSelector: String = "#mangaIframe"
override fun pageListParse(document: Document): List<Page> {
return super.pageListParse(
document.takeIf { it.select(iframeSelector).isEmpty() }
?: fetchIframeDocumentPageList(document),
)
}
private fun fetchIframeDocumentPageList(document: Document): Document {
val pagesUrl = document.selectFirst(iframeSelector)!!
.absUrl("src")
return client.newCall(GET(pagesUrl, headers))
.execute().asJsoup()
}
private fun OkHttpClient.Builder.ignoreAllSSLErrors(): OkHttpClient.Builder {
val naiveTrustManager = @SuppressLint("CustomX509TrustManager")
object : X509TrustManager {
override fun getAcceptedIssuers(): Array<X509Certificate> = emptyArray()
override fun checkClientTrusted(certs: Array<X509Certificate>, authType: String) = Unit
override fun checkServerTrusted(certs: Array<X509Certificate>, authType: String) = Unit
}
val insecureSocketFactory = SSLContext.getInstance("TLSv1.2").apply {
val trustAllCerts = arrayOf<TrustManager>(naiveTrustManager)
init(null, trustAllCerts, SecureRandom())
}.socketFactory
sslSocketFactory(insecureSocketFactory, naiveTrustManager)
hostnameVerifier { _, _ -> true }
return this
}
}