diff --git a/src/en/asurascansus/build.gradle b/src/en/asurascansus/build.gradle deleted file mode 100644 index 4f8729767..000000000 --- a/src/en/asurascansus/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Asura Scans.us (unoriginal)' - extClass = '.AsuraScansUs' - themePkg = 'madara' - baseUrl = 'https://asurascans.us' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/asurascansus/res/mipmap-hdpi/ic_launcher.png b/src/en/asurascansus/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 9866f55db..000000000 Binary files a/src/en/asurascansus/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/asurascansus/res/mipmap-mdpi/ic_launcher.png b/src/en/asurascansus/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 4ef6d7936..000000000 Binary files a/src/en/asurascansus/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/asurascansus/res/mipmap-xhdpi/ic_launcher.png b/src/en/asurascansus/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e0a3e8840..000000000 Binary files a/src/en/asurascansus/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/asurascansus/res/mipmap-xxhdpi/ic_launcher.png b/src/en/asurascansus/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 2da953a2f..000000000 Binary files a/src/en/asurascansus/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/asurascansus/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/asurascansus/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 7516a2dba..000000000 Binary files a/src/en/asurascansus/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/asurascansus/src/eu/kanade/tachiyomi/extension/en/asurascansus/AsuraScansUs.kt b/src/en/asurascansus/src/eu/kanade/tachiyomi/extension/en/asurascansus/AsuraScansUs.kt deleted file mode 100644 index 4d565615a..000000000 --- a/src/en/asurascansus/src/eu/kanade/tachiyomi/extension/en/asurascansus/AsuraScansUs.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.asurascansus - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class AsuraScansUs : Madara("Asura Scans.us (unoriginal)", "https://asurascans.us", "en") { - override val useNewChapterEndpoint = true -} diff --git a/src/en/itsyourrightmanhua/build.gradle b/src/en/itsyourrightmanhua/build.gradle deleted file mode 100644 index 421eefce4..000000000 --- a/src/en/itsyourrightmanhua/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Its Your Right Manhua' - extClass = '.ItsYourRightManhua' - themePkg = 'madara' - baseUrl = 'https://itsyourightmanhua.com' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/itsyourrightmanhua/res/mipmap-hdpi/ic_launcher.png b/src/en/itsyourrightmanhua/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 0b0248b64..000000000 Binary files a/src/en/itsyourrightmanhua/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/itsyourrightmanhua/res/mipmap-mdpi/ic_launcher.png b/src/en/itsyourrightmanhua/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ae462c295..000000000 Binary files a/src/en/itsyourrightmanhua/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/itsyourrightmanhua/res/mipmap-xhdpi/ic_launcher.png b/src/en/itsyourrightmanhua/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index f582b8190..000000000 Binary files a/src/en/itsyourrightmanhua/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/itsyourrightmanhua/res/mipmap-xxhdpi/ic_launcher.png b/src/en/itsyourrightmanhua/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 1ab0faeee..000000000 Binary files a/src/en/itsyourrightmanhua/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/itsyourrightmanhua/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/itsyourrightmanhua/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index e3c9bf74a..000000000 Binary files a/src/en/itsyourrightmanhua/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/itsyourrightmanhua/src/eu/kanade/tachiyomi/extension/en/itsyourrightmanhua/ItsYourRightManhua.kt b/src/en/itsyourrightmanhua/src/eu/kanade/tachiyomi/extension/en/itsyourrightmanhua/ItsYourRightManhua.kt deleted file mode 100644 index d2fb81d91..000000000 --- a/src/en/itsyourrightmanhua/src/eu/kanade/tachiyomi/extension/en/itsyourrightmanhua/ItsYourRightManhua.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.itsyourrightmanhua - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class ItsYourRightManhua : Madara("Its Your Right Manhua", "https://itsyourightmanhua.com/", "en") { - override val useNewChapterEndpoint = true -} diff --git a/src/en/manhwafreakxyz/build.gradle b/src/en/manhwafreakxyz/build.gradle deleted file mode 100644 index 099249c7b..000000000 --- a/src/en/manhwafreakxyz/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'ManhwaFreak.xyz' - extClass = '.ManhwaFreakXyz' - themePkg = 'madara' - baseUrl = 'https://manhwafreak.xyz' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/manhwafreakxyz/res/mipmap-hdpi/ic_launcher.png b/src/en/manhwafreakxyz/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index eed5a09fe..000000000 Binary files a/src/en/manhwafreakxyz/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafreakxyz/res/mipmap-mdpi/ic_launcher.png b/src/en/manhwafreakxyz/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 38d32ddc8..000000000 Binary files a/src/en/manhwafreakxyz/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafreakxyz/res/mipmap-xhdpi/ic_launcher.png b/src/en/manhwafreakxyz/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index c6efd6c46..000000000 Binary files a/src/en/manhwafreakxyz/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafreakxyz/res/mipmap-xxhdpi/ic_launcher.png b/src/en/manhwafreakxyz/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9a608e5d6..000000000 Binary files a/src/en/manhwafreakxyz/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafreakxyz/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/manhwafreakxyz/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 8b874e33b..000000000 Binary files a/src/en/manhwafreakxyz/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyz.kt b/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyz.kt deleted file mode 100644 index 509c90801..000000000 --- a/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyz.kt +++ /dev/null @@ -1,152 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.manhwafreakxyz - -import android.util.Base64 -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -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.util.asJsoup -import kotlinx.serialization.json.decodeFromStream -import okhttp3.FormBody -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.Request -import okhttp3.Response -import org.jsoup.Jsoup -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element - -class ManhwaFreakXyz : Madara( - "ManhwaFreak.xyz", - "https://manhwafreak.xyz", - "en", -) { - // ===================== Popular ============================ - - override fun popularMangaRequest(page: Int): Request { - val url = "$baseUrl/$mangaSubString/${searchPage(page)}".toHttpUrl().newBuilder() - .addQueryParameter("post_type", "wp-manga") - .addQueryParameter("s", "") - .addQueryParameter("sort", "most_viewed") - .build() - - return GET(url, headers) - } - - override fun popularMangaSelector() = "div[class*=unit item]" - - override val popularMangaUrlSelector = ".info a" - - override fun popularMangaFromElement(element: Element): SManga { - return super.popularMangaFromElement(element).apply { - element.selectFirst("img:not(.flag-icon)")?.let { - thumbnail_url = imageFromElement(it) - } - } - } - - override fun popularMangaParse(response: Response): MangasPage { - if (nonce.isBlank()) { - nonce = response.peekBody().let(::findNonceValue) - } - return super.popularMangaParse(response) - } - - private fun Response.peekBody(): Document = - Jsoup.parseBodyFragment(peekBody(Long.MAX_VALUE).string()) - - override fun popularMangaNextPageSelector() = ".navigation .page-item:last-child:not(.disabled)" - - // ===================== Latest ============================ - - override fun latestUpdatesRequest(page: Int): Request { - val request = popularMangaRequest(page) - val url = request.url.newBuilder() - .setQueryParameter("sort", "recently_added") - .build() - - return request.newBuilder() - .url(url) - .build() - } - - // ===================== Search ============================ - - override fun searchRequest(page: Int, query: String, filters: FilterList): Request { - if (nonce.isBlank()) { - nonce = findNonceValue() - } - - val form = FormBody.Builder() - .add("action", "live_search") - .add("search", query) - .add("nonce", nonce) - .build() - - return POST("$baseUrl/wp-admin/admin-ajax.php", xhrHeaders, form) - } - - override fun searchMangaParse(response: Response): MangasPage { - val searchDto = json.decodeFromStream(response.body.byteStream()) - val mangas = searchDto.mangas.map { - SManga.create().apply { - title = it.title - thumbnail_url = it.thumbnail - setUrlWithoutDomain(it.url) - } - } - return MangasPage(mangas, hasNextPage = false) - } - - private var nonce: String = "" - - private fun findNonceValue(document: Document? = null): String { - val dom = document ?: client.newCall(popularMangaRequest(1)).execute().asJsoup() - return dom.select("script") - .map(Element::data) - .firstOrNull { it.contains("'nonce','") } - ?.substringAfter("'nonce','") - ?.substringBefore("'") ?: "" - } - - // ===================== Manga Details ============================ - - override val mangaDetailsSelectorTitle = ".serie-title" - override val mangaDetailsSelectorAuthor = ".stat-label:contains(Author) + .stat-value" - override val mangaDetailsSelectorArtist = ".stat-label:contains(Artist) + .stat-value" - override val mangaDetailsSelectorStatus = ".stat-label:contains(Status) + .manga" - override val mangaDetailsSelectorDescription = ".description-content" - override val mangaDetailsSelectorThumbnail = ".main-cover img.cover" - override val mangaDetailsSelectorGenre = ".genre-list .genre-link" - - // ===================== Chapters ============================ - - override fun chapterListSelector() = ".list-body-hh li" - - override fun chapterDateSelector() = "a > span:not(:has(i))" - - override fun chapterFromElement(element: Element): SChapter { - return super.chapterFromElement(element).apply { - name = name.split(" ") - .take(2) - .joinToString(" ") - } - } - - // ===================== Pages ============================ - - override fun pageListParse(document: Document): List { - launchIO { countViews(document) } - - return document.select("canvas.manga-canvas").mapIndexed { index, canvas -> - val imageUrl = canvas.attr("data-src") - .let { Base64.decode(it, Base64.DEFAULT).toString(Charsets.UTF_8) } - Page(index, document.location(), imageUrl) - } - } - - override fun getFilterList() = FilterList() -} diff --git a/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyzDto.kt b/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyzDto.kt deleted file mode 100644 index e87c88d3d..000000000 --- a/src/en/manhwafreakxyz/src/eu/kanade/tachiyomi/extension/en/manhwafreakxyz/ManhwaFreakXyzDto.kt +++ /dev/null @@ -1,17 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.manhwafreakxyz - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - -@Serializable -class SearchDto( - @SerialName("data") - val mangas: List, -) - -@Serializable -class MangaDto( - val thumbnail: String, - val title: String, - val url: String, -) diff --git a/src/en/varnascan/build.gradle b/src/en/varnascan/build.gradle deleted file mode 100644 index 467a9ceb1..000000000 --- a/src/en/varnascan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Varna Scan' - extClass = '.VarnaScan' - themePkg = 'mangathemesia' - baseUrl = 'https://varnascan.xyz' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/varnascan/res/mipmap-hdpi/ic_launcher.png b/src/en/varnascan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index d9a5809ed..000000000 Binary files a/src/en/varnascan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/varnascan/res/mipmap-mdpi/ic_launcher.png b/src/en/varnascan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 2341a86c8..000000000 Binary files a/src/en/varnascan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/varnascan/res/mipmap-xhdpi/ic_launcher.png b/src/en/varnascan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index fabd82158..000000000 Binary files a/src/en/varnascan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/varnascan/res/mipmap-xxhdpi/ic_launcher.png b/src/en/varnascan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index f345e459d..000000000 Binary files a/src/en/varnascan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/varnascan/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/varnascan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index fb287d6ab..000000000 Binary files a/src/en/varnascan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/varnascan/src/eu/kanade/tachiyomi/extension/en/varnascan/VarnaScan.kt b/src/en/varnascan/src/eu/kanade/tachiyomi/extension/en/varnascan/VarnaScan.kt deleted file mode 100644 index 199f00cc8..000000000 --- a/src/en/varnascan/src/eu/kanade/tachiyomi/extension/en/varnascan/VarnaScan.kt +++ /dev/null @@ -1,9 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.varnascan - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class VarnaScan : MangaThemesia( - "Varna Scan", - "https://varnascan.xyz", - "en", -) diff --git a/src/en/wickedscans/build.gradle b/src/en/wickedscans/build.gradle deleted file mode 100644 index ae55433f9..000000000 --- a/src/en/wickedscans/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'Wicked Scans' - extClass = '.WickedScans' - themePkg = 'keyoapp' - baseUrl = 'https://wickedscans.org' - overrideVersionCode = 1 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/wickedscans/res/mipmap-hdpi/ic_launcher.png b/src/en/wickedscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a24cfef32..000000000 Binary files a/src/en/wickedscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/wickedscans/res/mipmap-mdpi/ic_launcher.png b/src/en/wickedscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 7f07e7949..000000000 Binary files a/src/en/wickedscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/wickedscans/res/mipmap-xhdpi/ic_launcher.png b/src/en/wickedscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index d8e2a09ac..000000000 Binary files a/src/en/wickedscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/wickedscans/res/mipmap-xxhdpi/ic_launcher.png b/src/en/wickedscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index aa17e7b0d..000000000 Binary files a/src/en/wickedscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/wickedscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/wickedscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 9009c3fcf..000000000 Binary files a/src/en/wickedscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/wickedscans/src/eu/kanade/tachiyomi/extension/en/wickedscans/WickedScans.kt b/src/en/wickedscans/src/eu/kanade/tachiyomi/extension/en/wickedscans/WickedScans.kt deleted file mode 100644 index 23daab455..000000000 --- a/src/en/wickedscans/src/eu/kanade/tachiyomi/extension/en/wickedscans/WickedScans.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.wickedscans - -import eu.kanade.tachiyomi.multisrc.keyoapp.Keyoapp - -class WickedScans : Keyoapp("Wicked Scans", "https://wickedscans.org", "en") diff --git a/src/es/herenscan/build.gradle b/src/es/herenscan/build.gradle deleted file mode 100644 index 7c15825d7..000000000 --- a/src/es/herenscan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'HerenScan' - extClass = '.HerenScan' - themePkg = 'madara' - baseUrl = 'https://herenscan.com' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/herenscan/res/mipmap-hdpi/ic_launcher.png b/src/es/herenscan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 4e0b107a9..000000000 Binary files a/src/es/herenscan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/herenscan/res/mipmap-mdpi/ic_launcher.png b/src/es/herenscan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 3e76b1e0d..000000000 Binary files a/src/es/herenscan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/herenscan/res/mipmap-xhdpi/ic_launcher.png b/src/es/herenscan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 1f1c49e94..000000000 Binary files a/src/es/herenscan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/herenscan/res/mipmap-xxhdpi/ic_launcher.png b/src/es/herenscan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 1fbc8ea35..000000000 Binary files a/src/es/herenscan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/herenscan/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/herenscan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b8a7ddd5e..000000000 Binary files a/src/es/herenscan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/herenscan/src/eu/kanade/tachiyomi/extension/es/herenscan/HerenScan.kt b/src/es/herenscan/src/eu/kanade/tachiyomi/extension/es/herenscan/HerenScan.kt deleted file mode 100644 index 9d8a79da6..000000000 --- a/src/es/herenscan/src/eu/kanade/tachiyomi/extension/es/herenscan/HerenScan.kt +++ /dev/null @@ -1,17 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.herenscan - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class HerenScan : Madara( - "HerenScan", - "https://herenscan.com", - "es", - dateFormat = SimpleDateFormat("d 'de' MMM 'de' yyy", Locale("es")), -) { - override val useNewChapterEndpoint = true - - // Disable type selector as it's junk data, must not be empty. - override val seriesTypeSelector = "#abcdefghijklmnopqrstuvwxyz" -} diff --git a/src/es/kingsofdarkness/build.gradle b/src/es/kingsofdarkness/build.gradle deleted file mode 100644 index 911a8b802..000000000 --- a/src/es/kingsofdarkness/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'Kings Of Darkness' - extClass = '.KingsOfDarkness' - extVersionCode = 2 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/kingsofdarkness/res/mipmap-hdpi/ic_launcher.png b/src/es/kingsofdarkness/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 25c6c6e74..000000000 Binary files a/src/es/kingsofdarkness/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/kingsofdarkness/res/mipmap-mdpi/ic_launcher.png b/src/es/kingsofdarkness/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 1ad8e97f0..000000000 Binary files a/src/es/kingsofdarkness/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/kingsofdarkness/res/mipmap-xhdpi/ic_launcher.png b/src/es/kingsofdarkness/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index afb615a51..000000000 Binary files a/src/es/kingsofdarkness/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/kingsofdarkness/res/mipmap-xxhdpi/ic_launcher.png b/src/es/kingsofdarkness/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 7540c66fc..000000000 Binary files a/src/es/kingsofdarkness/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/kingsofdarkness/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/kingsofdarkness/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 02d65b700..000000000 Binary files a/src/es/kingsofdarkness/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/kingsofdarkness/src/eu/kanade/tachiyomi/extension/es/kingsofdarkness/KingsOfDarkness.kt b/src/es/kingsofdarkness/src/eu/kanade/tachiyomi/extension/es/kingsofdarkness/KingsOfDarkness.kt deleted file mode 100644 index a58b8dafc..000000000 --- a/src/es/kingsofdarkness/src/eu/kanade/tachiyomi/extension/es/kingsofdarkness/KingsOfDarkness.kt +++ /dev/null @@ -1,99 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.kingsofdarkness - -import eu.kanade.tachiyomi.network.GET -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 org.jsoup.nodes.Document -import org.jsoup.nodes.Element - -class KingsOfDarkness : ParsedHttpSource() { - override val name = "Kings Of Darkness" - - override val baseUrl = "https://kings-of-darkness.wixsite.com/0000" - - override val lang = "es" - - override val supportsLatest = false - - override fun popularMangaSelector() = "#SITE_PAGES div.wixui-image" - - override fun popularMangaRequest(page: Int) = - GET("$baseUrl/proyectos", headers) - - override fun popularMangaFromElement(element: Element) = - SManga.create().apply { - url = element.child(0).attr("href") - title = element.nextElementSibling()!!.text() - thumbnail_url = element.selectFirst("img")!!.image - } - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList) = - fetchPopularManga(page).map { mp -> - mp.copy(mp.mangas.filter { it.title.contains(query, true) }) - }!! - - override fun mangaDetailsRequest(manga: SManga) = - GET(manga.url, headers) - - override fun mangaDetailsParse(document: Document) = - SManga.create().apply { - url = document.location() - title = document.selectFirst("#SITE_PAGES h2")!!.text() - thumbnail_url = document.selectFirst("#SITE_PAGES img")!!.image - document.select("#SITE_PAGES p:last-of-type").let { el -> - description = el[0].text().trim() - genre = el[1].select("a").joinToString { it.text() } - } - } - - override fun chapterListSelector() = "#SITE_PAGES a[target=_self]" - - override fun chapterListRequest(manga: SManga) = - GET(manga.url, headers) - - override fun chapterFromElement(element: Element) = - SChapter.create().apply { - url = element.attr("href") - name = element.child(0).text() - chapter_number = name.substring(3).toFloat() - } - - override fun pageListRequest(chapter: SChapter) = - GET(chapter.url, headers) - - override fun pageListParse(document: Document) = - document.select("#SITE_PAGES img").mapIndexed { idx, el -> - Page(idx, "", el.image) - } - - private inline val Element.image: String - get() = attr("src").substringBefore("/v1/fill") - - override fun latestUpdatesSelector() = "" - - override fun latestUpdatesNextPageSelector(): String? = null - - override fun latestUpdatesRequest(page: Int) = - throw UnsupportedOperationException() - - override fun latestUpdatesFromElement(element: Element) = - throw UnsupportedOperationException() - - override fun popularMangaNextPageSelector(): String? = null - - override fun searchMangaSelector() = "" - - override fun searchMangaNextPageSelector(): String? = null - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = - throw UnsupportedOperationException() - - override fun searchMangaFromElement(element: Element) = - throw UnsupportedOperationException() - - override fun imageUrlParse(document: Document) = - throw UnsupportedOperationException() -} diff --git a/src/es/leermangasxyz/build.gradle b/src/es/leermangasxyz/build.gradle deleted file mode 100644 index 7d4a41836..000000000 --- a/src/es/leermangasxyz/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'LeerMangasXYZ' - extClass = '.LeerMangasXYZ' - extVersionCode = 1 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/leermangasxyz/res/mipmap-hdpi/ic_launcher.png b/src/es/leermangasxyz/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 723fc01af..000000000 Binary files a/src/es/leermangasxyz/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/leermangasxyz/res/mipmap-mdpi/ic_launcher.png b/src/es/leermangasxyz/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 72b095790..000000000 Binary files a/src/es/leermangasxyz/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/leermangasxyz/res/mipmap-xhdpi/ic_launcher.png b/src/es/leermangasxyz/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5b36f39ca..000000000 Binary files a/src/es/leermangasxyz/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/leermangasxyz/res/mipmap-xxhdpi/ic_launcher.png b/src/es/leermangasxyz/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 62fb84765..000000000 Binary files a/src/es/leermangasxyz/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/leermangasxyz/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/leermangasxyz/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 1e4d64ec7..000000000 Binary files a/src/es/leermangasxyz/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/leermangasxyz/src/eu/kanade/tachiyomi/extension/es/leermangasxyz/LeerMangasXYZ.kt b/src/es/leermangasxyz/src/eu/kanade/tachiyomi/extension/es/leermangasxyz/LeerMangasXYZ.kt deleted file mode 100644 index b67574577..000000000 --- a/src/es/leermangasxyz/src/eu/kanade/tachiyomi/extension/es/leermangasxyz/LeerMangasXYZ.kt +++ /dev/null @@ -1,116 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.leermangasxyz - -import eu.kanade.tachiyomi.network.GET -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.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import java.net.URLEncoder - -open class LeerMangasXYZ : ParsedHttpSource() { - - override val baseUrl: String = "https://r1.leermanga.xyz" - - override val lang: String = "es" - - override val name: String = "LeerManga.xyz" - - override fun latestUpdatesFromElement(element: Element): SManga = throw UnsupportedOperationException() - - override fun latestUpdatesNextPageSelector(): String? = throw UnsupportedOperationException() - - override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException() - - override fun latestUpdatesSelector(): String = throw UnsupportedOperationException() - - override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException() - - override val supportsLatest: Boolean = false - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - val row = element.select("td") - with(row[0]) { - chapter_number = text().toFloat() - date_upload = 0 - } - with(row[1]) { - name = text() - url = selectFirst("a")!!.attr("href") - } - } - - override fun fetchChapterList(manga: SManga): Observable> = super.fetchChapterList(manga).map { - it.reversed() - } - override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { - setUrlWithoutDomain(document.baseUri()) - val rawStatus = document.selectFirst("td:contains(Status)")!!.text() - status = getStatus(rawStatus.substringAfter("Status: ")) - author = document.select("li[itemprop=author]").joinToString(separator = ", ") { it.text() } - thumbnail_url = document.selectFirst("img.img-thumbnail")!!.attr("abs:src") - description = document.selectFirst("p[itemprop=description]")!!.text() - genre = document.select("span[itemprop=genre]").joinToString(", ") { it.text() } - } - - override fun pageListParse(document: Document): List { - val pages = document.select(pageListSelector()).map { - Page( - imageUrl = it.attr("href"), - index = it.attr("data-ngdesc").substringAfter("Page ").toInt(), - ) - } - if (pages.isEmpty()) { - throw RuntimeException("Cannot fetch images from source") - } - return pages - } - - override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { - thumbnail_url = element.selectFirst("img.card-img-top")!!.attr("abs:src") - element.selectFirst("div.card-body")!!.let { - val dc = it.selectFirst("h5.card-title a")!! - url = dc.attr("href") - title = dc.text() - } - } - - override fun searchMangaFromElement(element: Element): SManga = SManga.create().apply { - with(element) { - thumbnail_url = selectFirst("img")!!.attr("abs:src") - title = selectFirst("span[itemprop=name]")!!.text() - url = selectFirst("div.col-4 a")!!.attr("href") - } - } - - private fun encodeString(str: String): String = URLEncoder.encode(str, "utf-8") - - private fun getStatus(str: String): Int = when (str) { - "Emitiéndose", "Ongoing", "En emisión" -> SManga.ONGOING - "Finalizado" -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - // ========------- [[< Request >]]] =========-------- - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = GET("$baseUrl/search?query=${encodeString(query)}&page=$page") - - override fun popularMangaRequest(page: Int): Request = GET(baseUrl, headers) - - // ------ ======== [[[ SELECTORS ]]] ======== ------- - - private fun pageListSelector() = "div[data-nanogallery2] a" - - override fun searchMangaSelector(): String = "div[itemtype*=ComicSeries]" - - override fun searchMangaNextPageSelector(): String = "CHANGE THIS" - - override fun popularMangaSelector(): String = "div.card-group div.card" - - override fun popularMangaNextPageSelector(): String = "CHANGE THIS" - - override fun chapterListSelector(): String = "table#chaptersTable tbody tr" -} diff --git a/src/es/manhwases/build.gradle b/src/es/manhwases/build.gradle deleted file mode 100644 index a7545ae3f..000000000 --- a/src/es/manhwases/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Manhwas.es' - extClass = '.ManhwasEs' - themePkg = 'madara' - baseUrl = 'https://www.manhwas.es' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/manhwases/res/mipmap-hdpi/ic_launcher.png b/src/es/manhwases/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 575479e90..000000000 Binary files a/src/es/manhwases/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/manhwases/res/mipmap-mdpi/ic_launcher.png b/src/es/manhwases/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index b0eac8cce..000000000 Binary files a/src/es/manhwases/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/manhwases/res/mipmap-xhdpi/ic_launcher.png b/src/es/manhwases/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5e3c5c688..000000000 Binary files a/src/es/manhwases/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/manhwases/res/mipmap-xxhdpi/ic_launcher.png b/src/es/manhwases/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9fd12a304..000000000 Binary files a/src/es/manhwases/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/manhwases/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/manhwases/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b794e244d..000000000 Binary files a/src/es/manhwases/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/manhwases/src/eu/kanade/tachiyomi/extension/es/manhwases/ManhwasEs.kt b/src/es/manhwases/src/eu/kanade/tachiyomi/extension/es/manhwases/ManhwasEs.kt deleted file mode 100644 index 60a072d3c..000000000 --- a/src/es/manhwases/src/eu/kanade/tachiyomi/extension/es/manhwases/ManhwasEs.kt +++ /dev/null @@ -1,14 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.manhwases - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class ManhwasEs : Madara( - "Manhwas.es", - "https://manhwas.es", - "es", - dateFormat = SimpleDateFormat("MMM dd, yy", Locale("es")), -) { - override val useNewChapterEndpoint = true -} diff --git a/src/es/princediciones/build.gradle b/src/es/princediciones/build.gradle deleted file mode 100644 index 6774f7f75..000000000 --- a/src/es/princediciones/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'PrinceEdiciones' - extClass = '.PrinceEdiciones' - themePkg = 'madara' - baseUrl = 'https://princediciones.com' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/princediciones/res/mipmap-hdpi/ic_launcher.png b/src/es/princediciones/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index db2d52479..000000000 Binary files a/src/es/princediciones/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/princediciones/res/mipmap-mdpi/ic_launcher.png b/src/es/princediciones/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 8d2bd1c36..000000000 Binary files a/src/es/princediciones/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/princediciones/res/mipmap-xhdpi/ic_launcher.png b/src/es/princediciones/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 123374769..000000000 Binary files a/src/es/princediciones/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/princediciones/res/mipmap-xxhdpi/ic_launcher.png b/src/es/princediciones/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 80020d76c..000000000 Binary files a/src/es/princediciones/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/princediciones/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/princediciones/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 9a248c6c6..000000000 Binary files a/src/es/princediciones/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/princediciones/src/eu/kanade/tachiyomi/extension/es/princediciones/PrinceEdiciones.kt b/src/es/princediciones/src/eu/kanade/tachiyomi/extension/es/princediciones/PrinceEdiciones.kt deleted file mode 100644 index 8a17be7aa..000000000 --- a/src/es/princediciones/src/eu/kanade/tachiyomi/extension/es/princediciones/PrinceEdiciones.kt +++ /dev/null @@ -1,15 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.princediciones - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class PrinceEdiciones : Madara( - "Prince Ediciones", - "https://princediciones.com", - "es", - SimpleDateFormat("MMMM dd, yyyy", Locale("es")), -) { - override val mangaSubString = "media" - override val useNewChapterEndpoint = true -} diff --git a/src/es/yaoimanga/build.gradle b/src/es/yaoimanga/build.gradle deleted file mode 100644 index de7c17838..000000000 --- a/src/es/yaoimanga/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Yaoi Manga' - extClass = '.YaoiManga' - themePkg = 'madara' - baseUrl = 'https://yaoimanga.es' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/yaoimanga/res/mipmap-hdpi/ic_launcher.png b/src/es/yaoimanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index f38fb0682..000000000 Binary files a/src/es/yaoimanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/yaoimanga/res/mipmap-mdpi/ic_launcher.png b/src/es/yaoimanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index d502e731e..000000000 Binary files a/src/es/yaoimanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/yaoimanga/res/mipmap-xhdpi/ic_launcher.png b/src/es/yaoimanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index f33fbbff8..000000000 Binary files a/src/es/yaoimanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png b/src/es/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index cd789da37..000000000 Binary files a/src/es/yaoimanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 3a38a6a2a..000000000 Binary files a/src/es/yaoimanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/yaoimanga/src/eu/kanade/tachiyomi/extension/es/yaoimanga/YaoiManga.kt b/src/es/yaoimanga/src/eu/kanade/tachiyomi/extension/es/yaoimanga/YaoiManga.kt deleted file mode 100644 index 57a52e2bd..000000000 --- a/src/es/yaoimanga/src/eu/kanade/tachiyomi/extension/es/yaoimanga/YaoiManga.kt +++ /dev/null @@ -1,20 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.yaoimanga - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient - -class YaoiManga : Madara( - "Yaoi Manga", - "https://yaoimanga.es", - "es", -) { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(3) - .build() - - override val useNewChapterEndpoint = true - - override val useLoadMoreRequest = LoadMoreStrategy.Never -} diff --git a/src/fr/japanread/build.gradle b/src/fr/japanread/build.gradle deleted file mode 100644 index 83ff30155..000000000 --- a/src/fr/japanread/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - extName = 'Bento Manga' - extClass = '.BentoManga' - extVersionCode = 16 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/fr/japanread/res/mipmap-hdpi/ic_launcher.png b/src/fr/japanread/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 021a2a031..000000000 Binary files a/src/fr/japanread/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-hdpi/ic_launcher_foreground.png b/src/fr/japanread/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 60143d9d7..000000000 Binary files a/src/fr/japanread/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-hdpi/ic_launcher_round.png b/src/fr/japanread/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index f6c54bcf5..000000000 Binary files a/src/fr/japanread/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-mdpi/ic_launcher.png b/src/fr/japanread/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 03303c96f..000000000 Binary files a/src/fr/japanread/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-mdpi/ic_launcher_foreground.png b/src/fr/japanread/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index 237957075..000000000 Binary files a/src/fr/japanread/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-mdpi/ic_launcher_round.png b/src/fr/japanread/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 9b514fcd2..000000000 Binary files a/src/fr/japanread/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher.png b/src/fr/japanread/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index f93ba59e7..000000000 Binary files a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_foreground.png b/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index 6ffa5de70..000000000 Binary files a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_round.png b/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index f1ce9445f..000000000 Binary files a/src/fr/japanread/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher.png b/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 6d9baade0..000000000 Binary files a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_foreground.png b/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index f87c30f4a..000000000 Binary files a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_round.png b/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 5b6cdc3cb..000000000 Binary files a/src/fr/japanread/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher.png b/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index f63441b3f..000000000 Binary files a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 74a48dabd..000000000 Binary files a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ diff --git a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_round.png b/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 73bb3336e..000000000 Binary files a/src/fr/japanread/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt b/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt deleted file mode 100644 index 26489bddb..000000000 --- a/src/fr/japanread/src/eu/kanade/tachiyomi/extension/fr/japanread/BentoManga.kt +++ /dev/null @@ -1,477 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.japanread - -import android.net.Uri -import android.widget.Toast -import androidx.preference.EditTextPreference -import androidx.preference.PreferenceScreen -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.asObservableSuccess -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import eu.kanade.tachiyomi.source.ConfigurableSource -import eu.kanade.tachiyomi.source.model.Filter -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 eu.kanade.tachiyomi.util.asJsoup -import keiyoushi.utils.getPreferences -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive -import okhttp3.Headers -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import uy.kohesive.injekt.injectLazy -import java.util.Calendar -import java.util.concurrent.TimeUnit - -class BentoManga : ParsedHttpSource(), ConfigurableSource { - - override val name = "Bento Manga" - - override val id: Long = 4697148576707003393 - - override val baseUrl = "https://www.bentomanga.com" - - override val lang = "fr" - - override val supportsLatest = true - - private val json: Json by injectLazy() - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(15, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .rateLimit(2, 1) - .build() - - override fun headersBuilder(): Headers.Builder { - val builder = super.headersBuilder().apply { - set("Referer", "$baseUrl/") - - // Headers for homepage + serie page - set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") - set("Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3") - set("Connection", "keep-alive") - set("Sec-Fetch-Dest", "document") - set("Sec-Fetch-Mode", "navigate") - set("Sec-Fetch-Site", "same-origin") - set("Sec-Fetch-User", "?1") - } - - val preferences = getPreferences() - val userAgent = preferences.getString(USER_AGENT_PREF, "")!! - return if (userAgent.isNotBlank()) { - builder.set("User-Agent", userAgent) - } else { - builder - } - } - - // Generic (used by popular/latest/search) - private fun mangaListFromElement(element: Element): SManga { - return SManga.create().apply { - title = element.select("div").select("div.manga_header h1") - .text() - setUrlWithoutDomain(element.select("a").attr("href")) - thumbnail_url = element.select("div").select("img[alt=couverture manga]") - .attr("src") - } - } - - private fun mangaListSelector() = "div#mangas_content div.manga" - private fun mangaListNextPageSelector() = ".paginator button:contains(>)" - - // Popular - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/manga_list?withoutTypes=5&order_by=views&limit=" + (page - 1), headers) - } - - override fun popularMangaSelector() = mangaListSelector() - override fun popularMangaFromElement(element: Element) = mangaListFromElement(element) - override fun popularMangaNextPageSelector() = mangaListNextPageSelector() - - // Latest - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/manga_list?withoutTypes=5&limit=" + (page - 1), headers) - } - - override fun latestUpdatesSelector() = mangaListSelector() - override fun latestUpdatesFromElement(element: Element) = mangaListFromElement(element) - override fun latestUpdatesNextPageSelector() = mangaListNextPageSelector() - - // Search - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - // If there is any search text, use text search, otherwise use filter search - val uri = if (query.isNotBlank()) { - Uri.parse("$baseUrl/manga_list?withoutTypes=5") - .buildUpon() - .appendQueryParameter("search", query) - } else { - val uri = Uri.parse("$baseUrl/manga_list?withoutTypes=5").buildUpon() - // Append uri filters - filters.forEach { - if (it is UriFilter) { - it.addToUri(uri) - } - } - uri - } - // Append page number - uri.appendQueryParameter("limit", (page - 1).toString()) - return GET(uri.toString()) - } - - override fun searchMangaSelector() = mangaListSelector() - override fun searchMangaFromElement(element: Element) = mangaListFromElement(element) - override fun searchMangaNextPageSelector() = mangaListNextPageSelector() - - // Details - - override fun mangaDetailsParse(document: Document): SManga { - return SManga.create().apply { - title = document.select("div.manga div.manga-infos div.component-manga-title div.component-manga-title_main h1 ") - .text() - artist = document.select("div.datas div.datas_more-artists div.datas_more-artists-people a").text() - author = document.select("div.datas div.datas_more-authors div.datas_more-authors-peoples div a").text() - description = document.select("div.datas div.datas_synopsis").text() - genre = document.select("div.manga div.manga-infos div.component-manga-categories a") - .joinToString(" , ") { it.text() } - status = document.select("div.datas div.datas_more div.datas_more-status div.datas_more-status-data")?.first()?.text()?.let { - when { - it.contains("En cours") -> SManga.ONGOING - it.contains("Terminé") -> SManga.COMPLETED - it.contains("En pause") -> SManga.ON_HIATUS - it.contains("Licencié") -> SManga.LICENSED - it.contains("Abandonné") -> SManga.CANCELLED - else -> SManga.UNKNOWN - } - } ?: SManga.UNKNOWN - - thumbnail_url = document.select("img[alt=couverture manga]").attr("src") - } - } - - private fun apiHeaders(refererURL: String) = headers.newBuilder().apply { - set("Referer", refererURL) - set("x-requested-with", "XMLHttpRequest") - // without this we get 404 but I don't know why, I cannot find any information about this 'a' header. - // In chrome the value is constantly changing on each request, but giving this fixed value seems to work - set("a", "1df19bce590b") - }.build() - - // Chapters - // Subtract relative date - private fun parseRelativeDate(date: String): Long { - val trimmedDate = date.substringAfter("Il y a").trim().split(" ") - - val calendar = Calendar.getInstance() - when (trimmedDate[1]) { - "ans" -> calendar.apply { add(Calendar.YEAR, -trimmedDate[0].toInt()) } - "an" -> calendar.apply { add(Calendar.YEAR, -trimmedDate[0].toInt()) } - "mois" -> calendar.apply { add(Calendar.MONTH, -trimmedDate[0].toInt()) } - "sem." -> calendar.apply { add(Calendar.WEEK_OF_MONTH, -trimmedDate[0].toInt()) } - "j" -> calendar.apply { add(Calendar.DAY_OF_MONTH, -trimmedDate[0].toInt()) } - "h" -> calendar.apply { add(Calendar.HOUR_OF_DAY, -trimmedDate[0].toInt()) } - "min" -> calendar.apply { add(Calendar.MINUTE, -trimmedDate[0].toInt()) } - "s" -> calendar.apply { add(Calendar.SECOND, 0) } - } - - return calendar.timeInMillis - } - - override fun chapterListSelector() = "div.page_content div.chapters_content div.div-item" - - override fun chapterFromElement(element: Element): SChapter { - return SChapter.create().apply { - name = element.select("div.component-chapter-title a span.chapter_volume").text() - setUrlWithoutDomain(element.select("div.component-chapter-title a:not([style*='display:none'])").attr("href")) - date_upload = parseRelativeDate(element.select("div.component-chapter-date").text()) - scanlator = element.select("div.component-chapter-teams a span").joinToString(" + ") { it.text() } - } - } - - override fun fetchChapterList(manga: SManga): Observable> { - val requestUrl = if (manga.url.startsWith("http")) { - "${manga.url}" - } else { - "$baseUrl${manga.url}" - } - return client.newCall(GET(requestUrl, headers)) - .asObservableSuccess() - .map { response -> - chapterListParse(response, requestUrl) - } - } - - private fun chapterListParse(response: Response, requestUrl: String): List { - val chapters = mutableListOf() - var document = response.asJsoup() - var moreChapters = true - var nextPage = 1 - val pagemax = if (!document.select(".paginator button:contains(>>)").isNullOrEmpty()) { - document.select(".paginator button:contains(>>)")?.first()?.attr("data-limit")?.toInt()?.plus(1) - ?: 1 - } else { - 1 - } - // chapters are paginated - while (moreChapters && nextPage <= pagemax) { - document.select(chapterListSelector()).map { chapters.add(chapterFromElement(it)) } - if (nextPage < pagemax) { - document = client.newCall(GET("$requestUrl?limit=$nextPage", headers)).execute().asJsoup() - nextPage++ - } else { - moreChapters = false - } - } - return chapters - } - - // Alternative way through API in case jSoup doesn't work anymore - // It gives precise timestamp, but we are not using it - // since the API wrongly returns null for the scanlation group - /*private fun getChapterName(jsonElement: JsonElement): String { - var name = "" - - if (jsonElement["volume"].asString != "") { - name += "Tome " + jsonElement["volume"].asString + " " - } - if (jsonElement["chapter"].asString != "") { - name += "Ch " + jsonElement["chapter"].asString + " " - } - - if (jsonElement["title"].asString != "") { - if (name != "") { - name += " - " - } - name += jsonElement["title"].asString - } - - return name - } - override fun chapterListParse(response: Response): List { - val document = response.asJsoup() - val mangaId = document.select("div[data-avg]").attr("data-avg") - - client.newCall(GET(baseUrl + document.select("#chapters div[data-row=chapter]").first()!!.select("div.col-lg-5 a").attr("href"), headers)).execute() - - val apiResponse = client.newCall(GET("$baseUrl/api/?id=$mangaId&type=manga", apiHeaders())).execute() - - val jsonData = apiResponse.body.string() - val json = JsonParser().parse(jsonData).asJsonObject - - return json["chapter"].obj.entrySet() - .map { - SChapter.create().apply { - name = getChapterName(it.value.obj) - url = "$baseUrl/api/?id=${it.key}&type=chapter" - date_upload = it.value.obj["timestamp"].asLong * 1000 - // scanlator = element.select(".chapter-list-group a").joinToString { it.text() } - } - } - .sortedByDescending { it.date_upload } - } - override fun chapterListSelector() = throw UnsupportedOperationException() - override fun chapterFromElement(element: Element): SChapter = throw UnsupportedOperationException()*/ - - // Pages - override fun pageListRequest(chapter: SChapter): Request = GET("$baseUrl${chapter.url}", headers) - - override fun pageListParse(document: Document): List { - val chapterId = document.select("meta[data-chapter-id]").attr("data-chapter-id") - - val apiRequest = GET("$baseUrl/api/?id=$chapterId&type=chapter", apiHeaders(document.location())) - val apiResponse = client.newCall(apiRequest).execute() - - val jsonResult = json.parseToJsonElement(apiResponse.body.string()).jsonObject - - val baseImagesUrl = jsonResult["baseImagesUrl"]!!.jsonPrimitive.content - - return jsonResult["page_array"]!!.jsonArray.mapIndexed { i, jsonEl -> - Page(i, document.location(), "$baseUrl$baseImagesUrl/${jsonEl.jsonPrimitive.content}") - } - } - - override fun imageUrlParse(document: Document) = "" - - override fun imageRequest(page: Page): Request { - val newHeaders = headers.newBuilder().apply { - set("Referer", page.url) - set("Accept", "image/avif,image/webp,*/*") - set("Accept-Language", "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3") - set("Connection", "keep-alive") - set("Sec-Fetch-Dest", "document") - set("Sec-Fetch-Mode", "navigate") - set("Sec-Fetch-Site", "same-origin") - set("Sec-Fetch-User", "?1") - }.build() - - return GET(page.imageUrl!!, newHeaders) - } - - // Filters - override fun getFilterList() = FilterList( - SortFilter(), - TypeFilter(), - StatusFilter(), - GenreFilter(), - ) - - private class SortFilter : UriSelectFilter( - "Tri", - "order_by", - arrayOf( - Pair("views", "Les + vus"), - Pair("top", "Les mieux notés"), - Pair("name", "A - Z"), - Pair("comment", "Les + commentés"), - Pair("update", "Les + récents"), - Pair("create", "Par date de sortie"), - ), - firstIsUnspecified = false, - ) - - private class TypeFilter : UriSelectFilter( - "Type", - "withTypes", - arrayOf( - Pair("0", "Tous"), - Pair("2", "Manga"), - Pair("3", "Manhwa"), - Pair("4", "Manhua"), - Pair("5", "Novel"), - Pair("6", "Doujinshi"), - ), - ) - - private class StatusFilter : UriSelectFilter( - "Statut", - "status", - arrayOf( - Pair("0", "Tous"), - Pair("1", "En cours"), - Pair("2", "Terminé"), - Pair("3", "En pause"), - Pair("4", "Licencié"), - Pair("5", "Abandonné"), - ), - ) - - private class GenreFilter : UriSelectFilter( - "Genre", - "withCategories", - arrayOf( - Pair("0", "Tous"), - Pair("1", "Action"), - Pair("27", "Adulte"), - Pair("20", "Amitié"), - Pair("21", "Amour"), - Pair("7", "Arts martiaux"), - Pair("3", "Aventure"), - Pair("6", "Combat"), - Pair("5", "Comédie"), - Pair("4", "Drame"), - Pair("12", "Ecchi"), - Pair("16", "Fantastique"), - Pair("29", "Gender Bender"), - Pair("8", "Guerre"), - Pair("22", "Harem"), - Pair("23", "Hentai"), - Pair("15", "Historique"), - Pair("19", "Horreur"), - Pair("13", "Josei"), - Pair("30", "Mature"), - Pair("18", "Mecha"), - Pair("32", "One-shot"), - Pair("42", "Parodie"), - Pair("17", "Policier"), - Pair("25", "Science-fiction"), - Pair("31", "Seinen"), - Pair("10", "Shojo"), - Pair("26", "Shojo Ai"), - Pair("2", "Shonen"), - Pair("35", "Shonen Ai"), - Pair("37", "Smut"), - Pair("14", "Sports"), - Pair("38", "Surnaturel"), - Pair("39", "Tragédie"), - Pair("36", "Tranches de vie"), - Pair("34", "Vie scolaire"), - Pair("24", "Yaoi"), - Pair("41", "Yuri"), - ), - ) - - /** - * Class that creates a select filter. Each entry in the dropdown has a name and a display name. - * If an entry is selected it is appended as a query parameter onto the end of the URI. - * If `firstIsUnspecified` is set to true, if the first entry is selected, nothing will be appended on the the URI. - */ - // vals: - private open class UriSelectFilter( - displayName: String, - val uriParam: String, - val vals: Array>, - val firstIsUnspecified: Boolean = true, - defaultValue: Int = 0, - ) : - Filter.Select(displayName, vals.map { it.second }.toTypedArray(), defaultValue), - UriFilter { - override fun addToUri(uri: Uri.Builder) { - if (state != 0 || !firstIsUnspecified) { - uri.appendQueryParameter(uriParam, vals[state].first) - } - } - } - - /** - * Represents a filter that is able to modify a URI. - */ - private interface UriFilter { - fun addToUri(uri: Uri.Builder) - } - - // From Happymh for the custom User-Agent menu - override fun setupPreferenceScreen(screen: PreferenceScreen) { - // Maybe add the choice of a random UA ? (Like Mangathemesia) - - EditTextPreference(screen.context).apply { - key = USER_AGENT_PREF - title = TITLE_RANDOM_UA - summary = USER_AGENT_PREF - dialogMessage = - "\n\nPermet d'indiquer un User-Agent custom\n" + - "Après l'ajout + restart de l'application, il faudra charger la page en webview et valider le captcha Cloudflare." + - "\n\nValeur par défaut:\n$DEFAULT_UA" - - setDefaultValue(DEFAULT_UA) - - setOnPreferenceChangeListener { _, newValue -> - try { - Headers.Builder().add("User-Agent", newValue as String) - Toast.makeText(screen.context, RESTART_APP_STRING, Toast.LENGTH_LONG).show() - summary = newValue - true - } catch (e: Throwable) { - Toast.makeText(screen.context, "$ERROR_USER_AGENT_SETUP ${e.message}", Toast.LENGTH_LONG).show() - false - } - } - }.let(screen::addPreference) - } - - companion object { - private const val USER_AGENT_PREF = "Empty" - private const val RESTART_APP_STRING = "Restart Tachiyomi to apply new setting." - private const val ERROR_USER_AGENT_SETUP = "Invalid User-Agent :" - private const val TITLE_RANDOM_UA = "Set custom User-Agent" - private const val DEFAULT_UA = "Mozilla/5.0 (Linux; Android 9) AppleWebKit/537.36 (KHTML, like Gecko) Brave/107.0.0.0 Mobile Safari/537.36" - } -} diff --git a/src/id/ichiromanga/build.gradle b/src/id/ichiromanga/build.gradle deleted file mode 100644 index 07a71b5b6..000000000 --- a/src/id/ichiromanga/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'IchiroManga' - extClass = '.IchiroManga' - themePkg = 'mangathemesia' - baseUrl = 'https://ichiromanga.my.id' - overrideVersionCode = 0 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/ichiromanga/res/mipmap-hdpi/ic_launcher.png b/src/id/ichiromanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 0a6a71231..000000000 Binary files a/src/id/ichiromanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/ichiromanga/res/mipmap-mdpi/ic_launcher.png b/src/id/ichiromanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 870f9c646..000000000 Binary files a/src/id/ichiromanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/ichiromanga/res/mipmap-xhdpi/ic_launcher.png b/src/id/ichiromanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 2ee992253..000000000 Binary files a/src/id/ichiromanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/ichiromanga/res/mipmap-xxhdpi/ic_launcher.png b/src/id/ichiromanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 3343114f1..000000000 Binary files a/src/id/ichiromanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/ichiromanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/ichiromanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 56654bbad..000000000 Binary files a/src/id/ichiromanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/ichiromanga/src/eu/kanade/tachiyomi/extension/id/ichiromanga/IchiroManga.kt b/src/id/ichiromanga/src/eu/kanade/tachiyomi/extension/id/ichiromanga/IchiroManga.kt deleted file mode 100644 index 1d189bae5..000000000 --- a/src/id/ichiromanga/src/eu/kanade/tachiyomi/extension/id/ichiromanga/IchiroManga.kt +++ /dev/null @@ -1,14 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.ichiromanga - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient - -class IchiroManga : MangaThemesia("IchiroManga", "https://ichiromanga.my.id", "id") { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) - .build() - - override val hasProjectPage = false -} diff --git a/src/it/novelleleggere/build.gradle b/src/it/novelleleggere/build.gradle deleted file mode 100644 index 08b3d6c99..000000000 --- a/src/it/novelleleggere/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'Novelle Leggere' - extClass = '.NovelleLeggere' - extVersionCode = 3 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/it/novelleleggere/res/mipmap-hdpi/ic_launcher.png b/src/it/novelleleggere/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 587265c34..000000000 Binary files a/src/it/novelleleggere/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/it/novelleleggere/res/mipmap-mdpi/ic_launcher.png b/src/it/novelleleggere/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 761c59607..000000000 Binary files a/src/it/novelleleggere/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/it/novelleleggere/res/mipmap-xhdpi/ic_launcher.png b/src/it/novelleleggere/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index cdb9f3ddb..000000000 Binary files a/src/it/novelleleggere/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/it/novelleleggere/res/mipmap-xxhdpi/ic_launcher.png b/src/it/novelleleggere/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8dfb3d27d..000000000 Binary files a/src/it/novelleleggere/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/it/novelleleggere/res/mipmap-xxxhdpi/ic_launcher.png b/src/it/novelleleggere/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index a531669e8..000000000 Binary files a/src/it/novelleleggere/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/it/novelleleggere/src/eu/kanade/tachiyomi/extension/it/novelleleggere/NovelleLeggere.kt b/src/it/novelleleggere/src/eu/kanade/tachiyomi/extension/it/novelleleggere/NovelleLeggere.kt deleted file mode 100644 index 72a1a9485..000000000 --- a/src/it/novelleleggere/src/eu/kanade/tachiyomi/extension/it/novelleleggere/NovelleLeggere.kt +++ /dev/null @@ -1,81 +0,0 @@ -package eu.kanade.tachiyomi.extension.it.novelleleggere - -import eu.kanade.tachiyomi.network.GET -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.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element - -class NovelleLeggere : ParsedHttpSource() { - - // Info - override val name: String = "Novelle Leggere" - override val baseUrl: String = "https://www.novelleleggere.com" - override val lang: String = "it" - override val supportsLatest: Boolean = false - - // Popular - override fun popularMangaRequest(page: Int): Request = GET(baseUrl) - - override fun popularMangaNextPageSelector(): String? = null - override fun popularMangaSelector(): String = "table:contains(Manga) tr:gt(0)" - override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { - val a = element.select("a").first()!! - title = a.text() - setUrlWithoutDomain(a.attr("abs:href")) - } - - // Latest - override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException() - - override fun latestUpdatesNextPageSelector(): String = throw UnsupportedOperationException() - override fun latestUpdatesSelector(): String = throw UnsupportedOperationException() - override fun latestUpdatesFromElement(element: Element): SManga = - throw UnsupportedOperationException() - - // Search - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = - throw Exception("Search Not Supported") - - override fun searchMangaNextPageSelector(): String = throw Exception("Search Not Supported") - override fun searchMangaSelector(): String = throw Exception("Search Not Supported") - override fun searchMangaFromElement(element: Element): SManga = - throw Exception("Search Not Supported") - - // Details - override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { - thumbnail_url = document.select("div.post-content img").first()!!.attr("abs:src") - title = document.select("div.post-content h3").text().trim() - description = - document.select("div.post-content div:contains(Trama) div.su-spoiler-content").text() - .trim() - } - - // Chapters - override fun chapterListSelector(): String = - "div.post-content div:contains(Capitoli) div.su-spoiler-content ul li a" - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - name = element.text().trim() - setUrlWithoutDomain(element.attr("abs:href")) - } - - override fun chapterListParse(response: Response): List { - return super.chapterListParse(response).reversed() - } - - // Pages - override fun pageListParse(document: Document): List = mutableListOf().apply { - document.select("div.post-content p>img, div.post-content figure>img").forEachIndexed { index, element -> - add(Page(index, "", element.attr("abs:src").substringBefore("?"))) - } - } - - override fun imageUrlParse(document: Document): String = - throw UnsupportedOperationException() -} diff --git a/src/pt/aurorascan/build.gradle b/src/pt/aurorascan/build.gradle deleted file mode 100644 index 384e45f00..000000000 --- a/src/pt/aurorascan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Aurora Scan' - extClass = '.AuroraScan' - themePkg = 'peachscan' - baseUrl = 'https://aurorascan.net' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/aurorascan/res/mipmap-hdpi/ic_launcher.png b/src/pt/aurorascan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index c4a8c1749..000000000 Binary files a/src/pt/aurorascan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/aurorascan/res/mipmap-mdpi/ic_launcher.png b/src/pt/aurorascan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index cd62d158b..000000000 Binary files a/src/pt/aurorascan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/aurorascan/res/mipmap-xhdpi/ic_launcher.png b/src/pt/aurorascan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 78f7a54b3..000000000 Binary files a/src/pt/aurorascan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/aurorascan/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/aurorascan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 51c2b869d..000000000 Binary files a/src/pt/aurorascan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/aurorascan/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/aurorascan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index caf9c141e..000000000 Binary files a/src/pt/aurorascan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/aurorascan/src/eu/kanade/tachiyomi/extension/pt/aurorascan/AuroraScan.kt b/src/pt/aurorascan/src/eu/kanade/tachiyomi/extension/pt/aurorascan/AuroraScan.kt deleted file mode 100644 index 8caf750cc..000000000 --- a/src/pt/aurorascan/src/eu/kanade/tachiyomi/extension/pt/aurorascan/AuroraScan.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.aurorascan - -import eu.kanade.tachiyomi.multisrc.peachscan.PeachScan - -class AuroraScan : PeachScan("Aurora Scan", "https://aurorascan.net", "pt-BR") diff --git a/src/pt/guildatierdraw/build.gradle b/src/pt/guildatierdraw/build.gradle deleted file mode 100644 index b60977f67..000000000 --- a/src/pt/guildatierdraw/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Guilda Tier Draw' - extClass = '.GuildaTierDraw' - themePkg = 'zeistmanga' - baseUrl = 'https://www.guildatierdraw.top' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/guildatierdraw/res/mipmap-hdpi/ic_launcher.png b/src/pt/guildatierdraw/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 514dd275d..000000000 Binary files a/src/pt/guildatierdraw/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/guildatierdraw/res/mipmap-mdpi/ic_launcher.png b/src/pt/guildatierdraw/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index a646eb2e3..000000000 Binary files a/src/pt/guildatierdraw/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/guildatierdraw/res/mipmap-xhdpi/ic_launcher.png b/src/pt/guildatierdraw/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e0e8390a8..000000000 Binary files a/src/pt/guildatierdraw/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/guildatierdraw/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/guildatierdraw/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index ca69b0295..000000000 Binary files a/src/pt/guildatierdraw/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/guildatierdraw/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/guildatierdraw/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index dfb208bc9..000000000 Binary files a/src/pt/guildatierdraw/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/guildatierdraw/src/eu/kanade/tachiyomi/extension/pt/guildatierdraw/GuildaTierDraw.kt b/src/pt/guildatierdraw/src/eu/kanade/tachiyomi/extension/pt/guildatierdraw/GuildaTierDraw.kt deleted file mode 100644 index c2a04b2d7..000000000 --- a/src/pt/guildatierdraw/src/eu/kanade/tachiyomi/extension/pt/guildatierdraw/GuildaTierDraw.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.guildatierdraw - -import eu.kanade.tachiyomi.multisrc.zeistmanga.ZeistManga - -class GuildaTierDraw : ZeistManga("Guilda Tier Draw", "https://www.guildatierdraw.top", "pt-BR") { - override val mangaDetailsSelectorDescription = "#Sinopse" -} diff --git a/src/pt/mryaoifansub/build.gradle b/src/pt/mryaoifansub/build.gradle deleted file mode 100644 index acbeb9995..000000000 --- a/src/pt/mryaoifansub/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'MR Yaoi Fansub' - extClass = '.MrYaoiFansub' - themePkg = 'madara' - baseUrl = 'https://mrbenne.com' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/mryaoifansub/res/mipmap-hdpi/ic_launcher.png b/src/pt/mryaoifansub/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ea9840cc1..000000000 Binary files a/src/pt/mryaoifansub/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mryaoifansub/res/mipmap-mdpi/ic_launcher.png b/src/pt/mryaoifansub/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 24f53e36a..000000000 Binary files a/src/pt/mryaoifansub/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mryaoifansub/res/mipmap-xhdpi/ic_launcher.png b/src/pt/mryaoifansub/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e9f63c0e6..000000000 Binary files a/src/pt/mryaoifansub/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mryaoifansub/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/mryaoifansub/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index ff225c3b9..000000000 Binary files a/src/pt/mryaoifansub/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mryaoifansub/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/mryaoifansub/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index a5d5f22ce..000000000 Binary files a/src/pt/mryaoifansub/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mryaoifansub/src/eu/kanade/tachiyomi/extension/pt/mryaoifansub/MrYaoiFansub.kt b/src/pt/mryaoifansub/src/eu/kanade/tachiyomi/extension/pt/mryaoifansub/MrYaoiFansub.kt deleted file mode 100644 index 253aba47d..000000000 --- a/src/pt/mryaoifansub/src/eu/kanade/tachiyomi/extension/pt/mryaoifansub/MrYaoiFansub.kt +++ /dev/null @@ -1,39 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.mryaoifansub - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.Interceptor -import okhttp3.OkHttpClient -import okhttp3.Response -import java.io.IOException -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.concurrent.TimeUnit - -class MrYaoiFansub : Madara( - "MR Yaoi Fansub", - "https://mrbenne.com", - "pt-BR", - SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")), -) { - - override val client: OkHttpClient = super.client.newBuilder() - .addInterceptor(::loginCheckIntercept) - .rateLimit(1, 2, TimeUnit.SECONDS) - .build() - - private fun loginCheckIntercept(chain: Interceptor.Chain): Response { - val response = chain.proceed(chain.request()) - - if (response.request.url.queryParameter("password-protected").isNullOrEmpty()) { - return response - } - - response.close() - throw IOException(LOGIN_THROUGH_WEBVIEW_ERROR) - } - - companion object { - private const val LOGIN_THROUGH_WEBVIEW_ERROR = "Autentique-se pela WebView para usar a extensão." - } -} diff --git a/src/pt/norterosescan/build.gradle b/src/pt/norterosescan/build.gradle deleted file mode 100644 index 7bd2a58b1..000000000 --- a/src/pt/norterosescan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Norte Rose Scan' - extClass = '.NorteRoseScan' - themePkg = 'madara' - baseUrl = 'https://norterose.xyz' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/norterosescan/res/mipmap-hdpi/ic_launcher.png b/src/pt/norterosescan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 1a64dda63..000000000 Binary files a/src/pt/norterosescan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/norterosescan/res/mipmap-mdpi/ic_launcher.png b/src/pt/norterosescan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 4ad539da7..000000000 Binary files a/src/pt/norterosescan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/norterosescan/res/mipmap-xhdpi/ic_launcher.png b/src/pt/norterosescan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 7cc767e81..000000000 Binary files a/src/pt/norterosescan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/norterosescan/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/norterosescan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 29e93d263..000000000 Binary files a/src/pt/norterosescan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/norterosescan/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/norterosescan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index a12b9d0de..000000000 Binary files a/src/pt/norterosescan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/norterosescan/src/eu/kanade/tachiyomi/extension/pt/norterosescan/NorteRoseScan.kt b/src/pt/norterosescan/src/eu/kanade/tachiyomi/extension/pt/norterosescan/NorteRoseScan.kt deleted file mode 100644 index a97b7a4af..000000000 --- a/src/pt/norterosescan/src/eu/kanade/tachiyomi/extension/pt/norterosescan/NorteRoseScan.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.norterosescan - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class NorteRoseScan : Madara("Norte Rose Scan", "https://norterose.xyz", "pt-BR") diff --git a/src/ru/henchan/build.gradle b/src/ru/henchan/build.gradle deleted file mode 100644 index 1e5e80a6a..000000000 --- a/src/ru/henchan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'HenChan' - extClass = '.HenChan' - themePkg = 'multichan' - baseUrl = 'https://xxxxx.hentaichan.live' - overrideVersionCode = 39 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/ru/henchan/res/mipmap-hdpi/ic_launcher.png b/src/ru/henchan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index eca8d1e50..000000000 Binary files a/src/ru/henchan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/ru/henchan/res/mipmap-mdpi/ic_launcher.png b/src/ru/henchan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 2be6ad46c..000000000 Binary files a/src/ru/henchan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/ru/henchan/res/mipmap-xhdpi/ic_launcher.png b/src/ru/henchan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 72bf0892d..000000000 Binary files a/src/ru/henchan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ru/henchan/res/mipmap-xxhdpi/ic_launcher.png b/src/ru/henchan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 7fcff819f..000000000 Binary files a/src/ru/henchan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ru/henchan/res/mipmap-xxxhdpi/ic_launcher.png b/src/ru/henchan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 0cb79374c..000000000 Binary files a/src/ru/henchan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt b/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt deleted file mode 100644 index dc6796ee9..000000000 --- a/src/ru/henchan/src/eu/kanade/tachiyomi/extension/ru/henchan/HenChan.kt +++ /dev/null @@ -1,502 +0,0 @@ -package eu.kanade.tachiyomi.extension.ru.henchan - -import android.annotation.SuppressLint -import android.content.SharedPreferences -import android.widget.Toast -import androidx.preference.EditTextPreference -import eu.kanade.tachiyomi.multisrc.multichan.MultiChan -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.asObservable -import eu.kanade.tachiyomi.source.ConfigurableSource -import eu.kanade.tachiyomi.source.model.Filter -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.util.asJsoup -import keiyoushi.utils.getPreferencesLazy -import okhttp3.Headers -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import rx.Observable -import java.net.URL -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale - -class HenChan : MultiChan("HenChan", "https://xxxxx.hentaichan.live", "ru"), ConfigurableSource { - - override val id = 5504588601186153612 - - private val preferences: SharedPreferences by getPreferencesLazy() - - private val domain = preferences.getString(DOMAIN_TITLE, DOMAIN_DEFAULT)!! - - override val baseUrl = domain - - override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manga/newest?offset=${20 * (page - 1)}") - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = if (query.isNotEmpty()) { - "$baseUrl/?do=search&subaction=search&story=$query&search_start=$page" - } else { - var genres = "" - var order = "" - filters.forEach { filter -> - when (filter) { - is GenreList -> { - filter.state - .filter { !it.isIgnored() } - .forEach { f -> - genres += (if (f.isExcluded()) "-" else "") + f.id + '+' - } - } - - else -> return@forEach - } - } - - if (genres.isNotEmpty()) { - filters.forEach { filter -> - when (filter) { - is OrderBy -> { - order = filter.toUriPartWithGenres() - } - - else -> return@forEach - } - } - "$baseUrl/tags/${genres.dropLast(1)}&sort=manga$order?offset=${20 * (page - 1)}" - } else { - filters.forEach { filter -> - when (filter) { - is OrderBy -> { - order = filter.toUriPartWithoutGenres() - } - - else -> return@forEach - } - } - "$baseUrl/$order?offset=${20 * (page - 1)}" - } - } - return GET(url, headers) - } - - override fun searchMangaSelector() = ".content_row:not(:has(div.item:containsOwn(Тип)))" - - private fun String.getHQThumbnail(): String { - val isExHenManga = this.contains("/manganew_thumbs_blur/") - val regex = "(?<=/)manganew_thumbs\\w*?(?=/)".toRegex(RegexOption.IGNORE_CASE) - return this.replace(regex, "showfull_retina/manga") - .replace( - "_".plus(URL(baseUrl).host), - "_hentaichan.ru", - ) // domain-related replacing for very old mangas - .plus( - if (isExHenManga) { - "#" - } else { - "" - }, - ) // # for later so we know what type manga is it - } - - override fun popularMangaFromElement(element: Element): SManga { - val manga = super.popularMangaFromElement(element) - manga.thumbnail_url = element.select("img").first()!!.attr("src").getHQThumbnail() - return manga - } - - override fun mangaDetailsParse(document: Document): SManga { - val manga = super.mangaDetailsParse(document) - manga.thumbnail_url = document.select("img#cover").attr("abs:src").getHQThumbnail() - return manga - } - - override fun fetchChapterList(manga: SManga): Observable> { - return client.newCall(chapterListRequest(manga)) - .asObservable().doOnNext { response -> - if (!response.isSuccessful) { - response.close() - // Error message for exceeding last page - if (response.code == 404) { - Observable.just( - listOf( - SChapter.create().apply { - url = manga.url - name = "Chapter" - chapter_number = 1f - }, - ), - ) - } else { - throw Exception("HTTP error ${response.code}") - } - } - } - .map { response -> - chapterListParse(response) - } - } - - override fun chapterListRequest(manga: SManga): Request { - val url = baseUrl + if (manga.thumbnail_url?.endsWith("#") == true) { - manga.url - } else { - manga.url.replace("/manga/", "/related/") - } - return (GET(url, headers)) - } - - override fun chapterListSelector() = ".related" - - override fun chapterListParse(response: Response): List { - val responseUrl = response.request.url.toString() - val document = response.asJsoup() - - // exhentai chapter - if (responseUrl.contains("/manga/")) { - val chap = SChapter.create() - chap.setUrlWithoutDomain(responseUrl) - chap.name = document.select("a.title_top_a").text() - chap.chapter_number = 1F - - val date = document.select("div.row4_right b")?.text()?.let { - SimpleDateFormat("dd MMMM yyyy", Locale("ru")).parse(it)?.time ?: 0 - } ?: 0 - chap.date_upload = date - return listOf(chap) - } - - // one chapter, nothing related - if (document.select("#right > div:nth-child(4)").text().contains(" похожий на ")) { - val chap = SChapter.create() - chap.setUrlWithoutDomain(document.select("#left > div > a").attr("href")) - chap.name = document.select("#right > div:nth-child(4)").text() - .split(" похожий на ")[1] - .replace("\\\"", "\"") - .replace("\\'", "'") - chap.chapter_number = 1F - chap.date_upload = - Date().time // setting to current date because of a sorting in the "Recent updates" section - return listOf(chap) - } - - // has related chapters - val result = mutableListOf() - result.addAll( - document.select(chapterListSelector()).map { - chapterFromElement(it) - }, - ) - - var url = document.select("div#pagination_related a:contains(Вперед)").attr("href") - while (url.isNotBlank()) { - val get = GET( - "${response.request.url}/$url", - headers = headers, - ) - val nextPage = client.newCall(get).execute().asJsoup() - result.addAll( - nextPage.select(chapterListSelector()).map { - chapterFromElement(it) - }, - ) - - url = nextPage.select("div#pagination_related a:contains(Вперед)").attr("href") - } - - return result.reversed() - } - - override fun chapterFromElement(element: Element): SChapter { - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(element.select("h2 a").attr("href")) - val chapterName = element.select("h2 a").attr("title") - chapter.name = chapterName - chapter.chapter_number = - "(глава\\s|часть\\s)([0-9]+\\.?[0-9]*)".toRegex(RegexOption.IGNORE_CASE) - .find(chapterName)?.groupValues?.get(2)?.toFloat() ?: -1F - chapter.date_upload = - Date().time // setting to current date because of a sorting in the "Recent updates" section - return chapter - } - - override fun pageListRequest(chapter: SChapter): Request { - val url = if (chapter.url.contains("/manga/")) { - baseUrl + chapter.url.replace("/manga/", "/online/") - } else { - baseUrl + chapter.url - } - return GET(url, Headers.Builder().add("Accept", "image/webp,image/apng").build()) - } - - override fun pageListParse(response: Response): List { - val html = response.body.string() - val prefix = "fullimg\": [" - val beginIndex = html.indexOf(prefix) + prefix.length - val endIndex = html.indexOf("]", beginIndex) - val trimmedHtml = html.substring(beginIndex, endIndex) - .replace("\"", "") - .replace("\'", "") - - val pageUrls = trimmedHtml.split(", ") - return pageUrls.mapIndexed { i, url -> Page(i, "", url) } - } - - private class Genre( - val id: String, - @SuppressLint("DefaultLocale") name: String = id.replace('_', ' ').capitalize(), - ) : Filter.TriState(name) - - private class GenreList(genres: List) : Filter.Group("Тэги", genres) - private class OrderBy : UriPartFilter( - "Сортировка", - arrayOf("Дата", "Популярность", "Алфавит"), - arrayOf("&n=dateasc" to "", "&n=favasc" to "&n=favdesc", "&n=abcdesc" to "&n=abcasc"), - arrayOf( - "manga/new&n=dateasc" to "manga/new", - "manga/new&n=favasc" to "mostfavorites&sort=manga", - "manga/new&n=abcdesc" to "manga/new&n=abcasc", - ), - ) - - private open class UriPartFilter( - displayName: String, - sortNames: Array, - val withGenres: Array>, - val withoutGenres: Array>, - ) : - Filter.Sort(displayName, sortNames, Selection(1, false)) { - fun toUriPartWithGenres() = - if (state!!.ascending) withGenres[state!!.index].first else withGenres[state!!.index].second - - fun toUriPartWithoutGenres() = - if (state!!.ascending) withoutGenres[state!!.index].first else withoutGenres[state!!.index].second - } - - override fun getFilterList() = FilterList( - OrderBy(), - GenreList(getGenreList()), - ) - - private fun getGenreList() = listOf( - Genre("3D"), - Genre("action"), - Genre("ahegao"), - Genre("bdsm"), - Genre("corruption"), - Genre("foot_fetish"), - Genre("footfuck"), - Genre("gender_bender"), - Genre("live"), - Genre("lolcon"), - Genre("megane"), - Genre("mind_break"), - Genre("monstergirl"), - Genre("netorare"), - Genre("netori"), - Genre("nipple_penetration"), - Genre("oyakodon"), - Genre("paizuri_(titsfuck)"), - Genre("rpg"), - Genre("scat"), - Genre("shemale"), - Genre("shimaidon"), - Genre("shooter"), - Genre("simulation"), - Genre("skinsuit"), - Genre("tomboy"), - Genre("tomgirl"), - Genre("x-ray"), - Genre("алкоголь"), - Genre("анал"), - Genre("андроид"), - Genre("анилингус"), - Genre("анимация"), - Genre("аркада"), - Genre("арт"), - Genre("бабушка"), - Genre("без_текста"), - Genre("без_трусиков"), - Genre("без_цензуры"), - Genre("беременность"), - Genre("бикини"), - Genre("близнецы"), - Genre("боди-арт"), - Genre("больница"), - Genre("большая_грудь"), - Genre("большие_попки"), - Genre("бондаж"), - Genre("буккаке"), - Genre("в_ванной"), - Genre("в_общественном_месте"), - Genre("в_первый_раз"), - Genre("в_цвете"), - Genre("в_школе"), - Genre("вампиры"), - Genre("веб"), - Genre("вебкам"), - Genre("вибратор"), - Genre("визуальная_новелла"), - Genre("внучка"), - Genre("волосатые_женщины"), - Genre("гаремник"), - Genre("гг_девушка"), - Genre("гг_парень"), - Genre("гипноз"), - Genre("глубокий_минет"), - Genre("горячий_источник"), - Genre("грудастая_лоли"), - Genre("групповой_секс"), - Genre("гяру_и_гангуро"), - Genre("двойное_проникновение"), - Genre("девочки_волшебницы"), - Genre("девушка_туалет"), - Genre("демоны"), - Genre("дилдо"), - Genre("дочь"), - Genre("драма"), - Genre("дыра_в_стене"), - Genre("жестокость"), - Genre("за_деньги"), - Genre("зомби"), - Genre("зрелые_женщины"), - Genre("измена"), - Genre("изнасилование"), - Genre("инопланетяне"), - Genre("инцест"), - Genre("исполнение_желаний"), - Genre("камера"), - Genre("квест"), - Genre("кимоно"), - Genre("колготки"), - Genre("комиксы"), - Genre("косплей"), - Genre("кремпай"), - Genre("кудере"), - Genre("кузина"), - Genre("куннилингус"), - Genre("купальники"), - Genre("латекс_и_кожа"), - Genre("магия"), - Genre("маленькая_грудь"), - Genre("мастурбация"), - Genre("мать"), - Genre("мейдочки"), - Genre("мерзкий_дядька"), - Genre("минет"), - Genre("много_девушек"), - Genre("молоко"), - Genre("монашки"), - Genre("монстры"), - Genre("мочеиспускание"), - Genre("мужская_озвучка"), - Genre("мужчина_крепкого_телосложения"), - Genre("мускулистые_женщины"), - Genre("на_природе"), - Genre("наблюдение"), - Genre("непрямой_инцест"), - Genre("новелла"), - Genre("обмен_партнерами"), - Genre("обмен_телами"), - Genre("обычный_секс"), - Genre("огромная_грудь"), - Genre("огромный_член"), - Genre("оплодотворение"), - Genre("остановка_времени"), - Genre("парень_пассив"), - Genre("переодевание"), - Genre("песочница"), - Genre("племянница"), - Genre("пляж"), - Genre("подглядывание"), - Genre("подчинение"), - Genre("похищение"), - Genre("презерватив"), - Genre("принуждение"), - Genre("прозрачная_одежда"), - Genre("проникновение_в_матку"), - Genre("психические_отклонения"), - Genre("публично"), - Genre("рабыни"), - Genre("романтика"), - Genre("сверхъестественное"), - Genre("секс_игрушки"), - Genre("сестра"), - Genre("сетакон"), - Genre("скрытный_секс"), - Genre("спортивная_форма"), - Genre("спящие"), - Genre("страпон"), - Genre("суккубы"), - Genre("темнокожие"), - Genre("тентакли"), - Genre("толстушки"), - Genre("трап"), - Genre("тётя"), - Genre("умеренная_жестокость"), - Genre("учитель_и_ученик"), - Genre("ушастые"), - Genre("фантазии"), - Genre("фантастика"), - Genre("фемдом"), - Genre("фестиваль"), - Genre("фетиш"), - Genre("фистинг"), - Genre("фурри"), - Genre("футанари"), - Genre("футанари_имеет_парня"), - Genre("фэнтези"), - Genre("хоррор"), - Genre("цундере"), - Genre("чикан"), - Genre("чирлидеры"), - Genre("чулки"), - Genre("школьная_форма"), - Genre("школьники"), - Genre("школьницы"), - Genre("школьный_купальник"), - Genre("щекотка"), - Genre("эксгибиционизм"), - Genre("эльфы"), - Genre("эччи"), - Genre("юмор"), - Genre("юри"), - Genre("яндере"), - Genre("яой"), - ) - - override fun setupPreferenceScreen(screen: androidx.preference.PreferenceScreen) { - EditTextPreference(screen.context).apply { - key = DOMAIN_TITLE - this.title = DOMAIN_TITLE - summary = domain - this.setDefaultValue(DOMAIN_DEFAULT) - dialogTitle = DOMAIN_TITLE - setOnPreferenceChangeListener { _, newValue -> - try { - val res = - preferences.edit().putString(DOMAIN_TITLE, newValue as String).commit() - Toast.makeText( - screen.context, - "Для смены домена необходимо перезапустить приложение с полной остановкой.", - Toast.LENGTH_LONG, - ).show() - res - } catch (e: Exception) { - e.printStackTrace() - false - } - } - }.let(screen::addPreference) - } - - companion object { - private const val DOMAIN_TITLE = "Домен" - private const val DOMAIN_DEFAULT = "https://xxxxx.hentaichan.live" - } -} diff --git a/src/tr/noxscans/build.gradle b/src/tr/noxscans/build.gradle deleted file mode 100644 index 74a0ab517..000000000 --- a/src/tr/noxscans/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Nox Scans' - extClass = '.NoxScans' - themePkg = 'mangathemesia' - baseUrl = 'https://www.noxscans.com' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/tr/noxscans/res/mipmap-hdpi/ic_launcher.png b/src/tr/noxscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ca906688f..000000000 Binary files a/src/tr/noxscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/noxscans/res/mipmap-mdpi/ic_launcher.png b/src/tr/noxscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index d2b1d43ad..000000000 Binary files a/src/tr/noxscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/noxscans/res/mipmap-xhdpi/ic_launcher.png b/src/tr/noxscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 607d6352c..000000000 Binary files a/src/tr/noxscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/noxscans/res/mipmap-xxhdpi/ic_launcher.png b/src/tr/noxscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 94ac16b51..000000000 Binary files a/src/tr/noxscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/noxscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/tr/noxscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 230473fb3..000000000 Binary files a/src/tr/noxscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/noxscans/src/eu/kanade/tachiyomi/extension/tr/noxscans/NoxScans.kt b/src/tr/noxscans/src/eu/kanade/tachiyomi/extension/tr/noxscans/NoxScans.kt deleted file mode 100644 index 0f964f2e3..000000000 --- a/src/tr/noxscans/src/eu/kanade/tachiyomi/extension/tr/noxscans/NoxScans.kt +++ /dev/null @@ -1,133 +0,0 @@ -package eu.kanade.tachiyomi.extension.tr.noxscans - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.POST -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.util.asJsoup -import okhttp3.FormBody -import okhttp3.Response -import org.json.JSONObject -import org.jsoup.nodes.Document -import java.text.SimpleDateFormat -import java.util.Locale - -class NoxScans : MangaThemesia( - "NoxScans", - "https://www.noxscans.com", - "tr", - dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("tr")), -) { - companion object { - private val IMAGE_EXTENSIONS = listOf(".webp", ".jpg", ".jpeg", ".png", ".gif") - private const val ROBOT_VERIFICATION_ERROR = - "Robot doğrulaması gerekiyor. WebView'de doğrulama yapın" - } - - private var attempts = 0 - private val formSelector = "form[action*=kontrol], form:has(legend)" - - private fun checkVerification(document: Document): Document { - attempts = 0 - return document.selectFirst(formSelector)?.let { - bypassRobotVerification(document) - } ?: document - } - - private fun bypassRobotVerification(document: Document): Document { - if (attempts == 3) { - throw Exception(ROBOT_VERIFICATION_ERROR) - } - - attempts++ - - return document.selectFirst(formSelector)?.let { robotForm -> - val formUrl = robotForm.absUrl("action").takeIf(String::isNotBlank) ?: document.location() - val input = robotForm.selectFirst("input")!!.let { - it.attr("name") to it.attr("value") - } - - val formBody = FormBody.Builder() - .add(input.first, input.second) - .build() - - bypassRobotVerification(client.newCall(POST(formUrl, headers, formBody)).execute().asJsoup()) - } ?: document - } - - override fun chapterListParse(response: Response): List { - return checkVerification(response.asJsoup()) - .select(chapterListSelector()) - .map(::chapterFromElement) - } - - override fun pageListParse(document: Document): List { - val doc = checkVerification(document) - - val scriptContent = doc.selectFirst("script:containsData(ts_reader.run)")?.data() - ?: return super.pageListParse(doc) - - return try { - parseReaderScript(scriptContent) - } catch (e: Exception) { - super.pageListParse(doc) - } - } - - override fun mangaDetailsParse(document: Document): SManga { - return super.mangaDetailsParse(checkVerification(document)) - } - - private fun parseReaderScript(scriptContent: String): List { - val jsonStr = scriptContent.substringAfter("ts_reader.run(").substringBefore(");") - val jsonData = JSONObject(jsonStr) - - val serverArrayKey = - findServerArrayKey(jsonData) ?: throw Exception("Server array not found") - val serverArray = jsonData.getJSONArray(serverArrayKey) - val firstServer = serverArray.getJSONObject(0) - - val imageArrayKey = - findImageArrayKey(firstServer) ?: throw Exception("Image array not found") - val imageArray = firstServer.getJSONArray(imageArrayKey) - - return List(imageArray.length()) { i -> - Page(i, "", imageArray.getString(i)) - } - } - - private fun findServerArrayKey(jsonData: JSONObject): String? = - jsonData.keys().asSequence().find { key -> - try { - val value = jsonData.getJSONArray(key) - value.length() > 0 && isValidServerObject(value.getJSONObject(0)) - } catch (e: Exception) { - false - } - } - - private fun isValidServerObject(obj: JSONObject): Boolean = - obj.length() == 2 && obj.keys().asSequence().any { key -> - try { - val arrayValue = obj.getJSONArray(key) - arrayValue.length() > 0 && isImageUrl(arrayValue.getString(0)) - } catch (e: Exception) { - false - } - } - - private fun findImageArrayKey(server: JSONObject): String? = - server.keys().asSequence().find { key -> - try { - val value = server.getJSONArray(key) - value.length() > 0 && isImageUrl(value.getString(0)) - } catch (e: Exception) { - false - } - } - - private fun isImageUrl(url: String): Boolean = IMAGE_EXTENSIONS.any { ext -> - url.lowercase().endsWith(ext) && url.contains("/wp-content/uploads/") - } -} diff --git a/src/tr/yaoiflix/build.gradle b/src/tr/yaoiflix/build.gradle deleted file mode 100644 index 8119eb874..000000000 --- a/src/tr/yaoiflix/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Yaoi Flix' - extClass = '.YaoiFlix' - themePkg = 'madara' - baseUrl = 'https://yaoiflix.gay' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/tr/yaoiflix/res/mipmap-hdpi/ic_launcher.png b/src/tr/yaoiflix/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 6888a4f29..000000000 Binary files a/src/tr/yaoiflix/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/yaoiflix/res/mipmap-mdpi/ic_launcher.png b/src/tr/yaoiflix/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 3d0ca4b03..000000000 Binary files a/src/tr/yaoiflix/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/yaoiflix/res/mipmap-xhdpi/ic_launcher.png b/src/tr/yaoiflix/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index c32d52108..000000000 Binary files a/src/tr/yaoiflix/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/yaoiflix/res/mipmap-xxhdpi/ic_launcher.png b/src/tr/yaoiflix/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 4c4c12344..000000000 Binary files a/src/tr/yaoiflix/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/yaoiflix/res/mipmap-xxxhdpi/ic_launcher.png b/src/tr/yaoiflix/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 92e027646..000000000 Binary files a/src/tr/yaoiflix/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/tr/yaoiflix/src/eu/kanade/tachiyomi/extension/tr/yaoiflix/YaoiFlix.kt b/src/tr/yaoiflix/src/eu/kanade/tachiyomi/extension/tr/yaoiflix/YaoiFlix.kt deleted file mode 100644 index 79804b5c4..000000000 --- a/src/tr/yaoiflix/src/eu/kanade/tachiyomi/extension/tr/yaoiflix/YaoiFlix.kt +++ /dev/null @@ -1,21 +0,0 @@ -package eu.kanade.tachiyomi.extension.tr.yaoiflix - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import java.text.SimpleDateFormat -import java.util.Locale - -class YaoiFlix : Madara( - "Yaoi Flix", - "https://yaoiflix.gay", - "tr", - SimpleDateFormat("MMMM dd, yyyy", Locale("tr")), -) { - override val client = super.client.newBuilder() - .rateLimit(3) - .build() - - override val useNewChapterEndpoint = true - - override val useLoadMoreRequest = LoadMoreStrategy.Never -}