diff --git a/src/en/bananamanga/build.gradle b/src/en/bananamanga/build.gradle deleted file mode 100644 index 20bbe940e..000000000 --- a/src/en/bananamanga/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Banana Manga' - extClass = '.BananaManga' - themePkg = 'madara' - baseUrl = 'https://bananamanga.net' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/bananamanga/res/mipmap-hdpi/ic_launcher.png b/src/en/bananamanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index f84457b58..000000000 Binary files a/src/en/bananamanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/bananamanga/res/mipmap-mdpi/ic_launcher.png b/src/en/bananamanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c242b942b..000000000 Binary files a/src/en/bananamanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/bananamanga/res/mipmap-xhdpi/ic_launcher.png b/src/en/bananamanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 7dcd02bb8..000000000 Binary files a/src/en/bananamanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/bananamanga/res/mipmap-xxhdpi/ic_launcher.png b/src/en/bananamanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 2e0a5c8da..000000000 Binary files a/src/en/bananamanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/bananamanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/bananamanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 6800241db..000000000 Binary files a/src/en/bananamanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/bananamanga/src/eu/kanade/tachiyomi/extension/en/bananamanga/BananaManga.kt b/src/en/bananamanga/src/eu/kanade/tachiyomi/extension/en/bananamanga/BananaManga.kt deleted file mode 100644 index 014827502..000000000 --- a/src/en/bananamanga/src/eu/kanade/tachiyomi/extension/en/bananamanga/BananaManga.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.bananamanga - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class BananaManga : Madara("Banana Manga", "https://bananamanga.net", "en") { - override val useNewChapterEndpoint = true -} diff --git a/src/en/constellarscans/build.gradle b/src/en/constellarscans/build.gradle deleted file mode 100644 index 230509564..000000000 --- a/src/en/constellarscans/build.gradle +++ /dev/null @@ -1,14 +0,0 @@ -ext { - extName = 'Constellar Scans' - extClass = '.ConstellarScans' - themePkg = 'mangathemesia' - baseUrl = 'https://constellarcomic.com' - overrideVersionCode = 17 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" - -dependencies { - implementation(project(":lib:randomua")) -} diff --git a/src/en/constellarscans/res/mipmap-hdpi/ic_launcher.png b/src/en/constellarscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 37a749336..000000000 Binary files a/src/en/constellarscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/constellarscans/res/mipmap-mdpi/ic_launcher.png b/src/en/constellarscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 910e4e535..000000000 Binary files a/src/en/constellarscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/constellarscans/res/mipmap-xhdpi/ic_launcher.png b/src/en/constellarscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index a6e920496..000000000 Binary files a/src/en/constellarscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/constellarscans/res/mipmap-xxhdpi/ic_launcher.png b/src/en/constellarscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 85c05d067..000000000 Binary files a/src/en/constellarscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/constellarscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/constellarscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d9eaf0920..000000000 Binary files a/src/en/constellarscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt b/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt deleted file mode 100644 index 7bf21fe17..000000000 --- a/src/en/constellarscans/src/eu/kanade/tachiyomi/extension/en/constellarscans/ConstellarScans.kt +++ /dev/null @@ -1,102 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.constellarscans - -import android.content.SharedPreferences -import androidx.preference.PreferenceScreen -import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen -import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA -import eu.kanade.tachiyomi.lib.randomua.getPrefUAType -import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import eu.kanade.tachiyomi.source.ConfigurableSource -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import keiyoushi.utils.getPreferencesLazy -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive -import okhttp3.CacheControl -import okhttp3.Headers -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document - -class ConstellarScans : - MangaThemesia( - "Constellar Scans", - "https://constellarcomic.com", - "en", - ), - ConfigurableSource { - - private val preferences: SharedPreferences by getPreferencesLazy() - - override fun setupPreferenceScreen(screen: PreferenceScreen) { - addRandomUAPreferenceToScreen(screen) - } - - override val client: OkHttpClient by lazy { - network.cloudflareClient.newBuilder() - .setRandomUserAgent( - preferences.getPrefUAType(), - preferences.getPrefCustomUA(), - ) - .rateLimit(1, 1) - .build() - } - - override fun headersBuilder(): Headers.Builder = Headers.Builder() - .add("Referer", "$baseUrl/") - .add("Accept-Language", "en-US,en;q=0.9") - .add("DNT", "1") - .add("Upgrade-Insecure-Requests", "1") - - override val seriesStatusSelector = ".status" - - override fun pageListRequest(chapter: SChapter): Request = - super.pageListRequest(chapter).newBuilder() - .header( - "Accept", - "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", - ) - .header("Sec-Fetch-Site", "same-origin") - .header("Sec-Fetch-Mode", "navigate") - .header("Sec-Fetch-Dest", "document") - .header("Sec-Fetch-User", "?1") - .cacheControl(CacheControl.FORCE_NETWORK) - .build() - - override fun pageListParse(document: Document): List { - countViews(document) - - val html = document.toString() - if (!html.contains("ts_rea_der_._run(\"")) { - return super.pageListParse(document) - } - - val tsReaderRawData = html - .substringAfter("ts_rea_der_._run(\"") - .substringBefore("\")") - .replace(Regex("""\D"""), "") - .chunked(4) - .map { - val tenthsAndOnes = it.chunked(2).map { - val num = it.toInt() - num / 10 + num % 10 - } - (tenthsAndOnes[0] * 10 + tenthsAndOnes[1] + 32).toChar() - } - .joinToString("") - - return json.parseToJsonElement(tsReaderRawData).jsonObject["sources"]!!.jsonArray[0].jsonObject["images"]!!.jsonArray.mapIndexed { idx, it -> - Page(idx, imageUrl = it.jsonPrimitive.content) - } - } - - override fun imageRequest(page: Page): Request = super.imageRequest(page).newBuilder() - .header("Accept", "image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8") - .header("Sec-Fetch-Dest", "image") - .header("Sec-Fetch-Mode", "no-cors") - .header("Sec-Fetch-Site", "same-origin") - .build() -} diff --git a/src/en/firstkissmanganet/build.gradle b/src/en/firstkissmanganet/build.gradle deleted file mode 100644 index c7c61fa88..000000000 --- a/src/en/firstkissmanganet/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = '1st-Kiss Manga.net' - extClass = '.FirstKissMangaNet' - themePkg = 'madara' - baseUrl = 'https://1stkissmanga.org' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/firstkissmanganet/res/mipmap-hdpi/ic_launcher.png b/src/en/firstkissmanganet/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 53308340f..000000000 Binary files a/src/en/firstkissmanganet/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/firstkissmanganet/res/mipmap-mdpi/ic_launcher.png b/src/en/firstkissmanganet/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 979753d9b..000000000 Binary files a/src/en/firstkissmanganet/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/firstkissmanganet/res/mipmap-xhdpi/ic_launcher.png b/src/en/firstkissmanganet/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 7d83a1455..000000000 Binary files a/src/en/firstkissmanganet/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/firstkissmanganet/res/mipmap-xxhdpi/ic_launcher.png b/src/en/firstkissmanganet/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index f678027d4..000000000 Binary files a/src/en/firstkissmanganet/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/firstkissmanganet/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/firstkissmanganet/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index aaf95b4e1..000000000 Binary files a/src/en/firstkissmanganet/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/firstkissmanganet/src/eu/kanade/tachiyomi/extension/en/firstkissmanganet/FirstKissMangaNet.kt b/src/en/firstkissmanganet/src/eu/kanade/tachiyomi/extension/en/firstkissmanganet/FirstKissMangaNet.kt deleted file mode 100644 index c711ffafc..000000000 --- a/src/en/firstkissmanganet/src/eu/kanade/tachiyomi/extension/en/firstkissmanganet/FirstKissMangaNet.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.firstkissmanganet - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class FirstKissMangaNet : Madara( - "1st-Kiss Manga.net", - "https://1stkissmanga.org", - "en", -) { - override val useLoadMoreRequest = LoadMoreStrategy.Never - override val useNewChapterEndpoint = false -} diff --git a/src/en/irisscans/build.gradle b/src/en/irisscans/build.gradle deleted file mode 100644 index f38f403ca..000000000 --- a/src/en/irisscans/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'Iris Scans' - extClass = '.IrisScans' - themePkg = 'mangathemesia' - baseUrl = 'https://irisscans.xyz' - overrideVersionCode = 0 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/irisscans/res/mipmap-hdpi/ic_launcher.png b/src/en/irisscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a09b40bac..000000000 Binary files a/src/en/irisscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/irisscans/res/mipmap-mdpi/ic_launcher.png b/src/en/irisscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 343358004..000000000 Binary files a/src/en/irisscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/irisscans/res/mipmap-xhdpi/ic_launcher.png b/src/en/irisscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 3b2a09b19..000000000 Binary files a/src/en/irisscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/irisscans/res/mipmap-xxhdpi/ic_launcher.png b/src/en/irisscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 478ca8880..000000000 Binary files a/src/en/irisscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/irisscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/irisscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 1dc8f4451..000000000 Binary files a/src/en/irisscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/irisscans/src/eu/kanade/tachiyomi/extension/en/irisscans/IrisScans.kt b/src/en/irisscans/src/eu/kanade/tachiyomi/extension/en/irisscans/IrisScans.kt deleted file mode 100644 index 94e05029b..000000000 --- a/src/en/irisscans/src/eu/kanade/tachiyomi/extension/en/irisscans/IrisScans.kt +++ /dev/null @@ -1,15 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.irisscans - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient - -class IrisScans : MangaThemesia( - "Iris Scans", - "https://irisscans.xyz", - "en", -) { - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) - .build() -} diff --git a/src/en/kingofscans/build.gradle b/src/en/kingofscans/build.gradle deleted file mode 100644 index 5ed583cb0..000000000 --- a/src/en/kingofscans/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'King of Scans' - extClass = '.KingOfScans' - themePkg = 'mangathemesia' - baseUrl = 'https://kingofscans.com' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/kingofscans/res/mipmap-hdpi/ic_launcher.png b/src/en/kingofscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index e414eaf0b..000000000 Binary files a/src/en/kingofscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/kingofscans/res/mipmap-mdpi/ic_launcher.png b/src/en/kingofscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 17ea760c6..000000000 Binary files a/src/en/kingofscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/kingofscans/res/mipmap-xhdpi/ic_launcher.png b/src/en/kingofscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 9c15085c2..000000000 Binary files a/src/en/kingofscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/kingofscans/res/mipmap-xxhdpi/ic_launcher.png b/src/en/kingofscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index fd5dcf15f..000000000 Binary files a/src/en/kingofscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/kingofscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/kingofscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 900f58519..000000000 Binary files a/src/en/kingofscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/kingofscans/src/eu/kanade/tachiyomi/extension/en/kingofscans/KingOfScans.kt b/src/en/kingofscans/src/eu/kanade/tachiyomi/extension/en/kingofscans/KingOfScans.kt deleted file mode 100644 index 13f8298ee..000000000 --- a/src/en/kingofscans/src/eu/kanade/tachiyomi/extension/en/kingofscans/KingOfScans.kt +++ /dev/null @@ -1,24 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.kingofscans - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.source.model.Page -import org.jsoup.nodes.Document - -class KingOfScans : MangaThemesia( - "King of Scans", - "https://kingofscans.com", - "en", - mangaUrlDirectory = "/comics", -) { - // Strip out position- and name-dependant ads. "Read first at ..." - override fun pageListParse(document: Document): List { - val pages = super.pageListParse(document) - return pages.filterIndexed { index, page -> - when (index) { - 0 -> !page.imageUrl!!.endsWith("/START-KS.jpg") - pages.lastIndex -> !page.imageUrl!!.endsWith("/END-KS.jpg") - else -> true - } - } - } -} diff --git a/src/en/mangahasu/build.gradle b/src/en/mangahasu/build.gradle deleted file mode 100644 index fa57952a7..000000000 --- a/src/en/mangahasu/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - extName = 'Mangahasu' - extClass = '.Mangahasu' - extVersionCode = 17 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/mangahasu/res/mipmap-hdpi/ic_launcher.png b/src/en/mangahasu/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cc434ca65..000000000 Binary files a/src/en/mangahasu/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangahasu/res/mipmap-mdpi/ic_launcher.png b/src/en/mangahasu/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index e4d5147b3..000000000 Binary files a/src/en/mangahasu/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangahasu/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangahasu/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 8ba900d5b..000000000 Binary files a/src/en/mangahasu/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangahasu/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangahasu/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d740a6fa9..000000000 Binary files a/src/en/mangahasu/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangahasu/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/mangahasu/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c68f6c974..000000000 Binary files a/src/en/mangahasu/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangahasu/src/eu/kanade/tachiyomi/extension/en/mangahasu/Mangahasu.kt b/src/en/mangahasu/src/eu/kanade/tachiyomi/extension/en/mangahasu/Mangahasu.kt deleted file mode 100644 index 1f1c9dd7e..000000000 --- a/src/en/mangahasu/src/eu/kanade/tachiyomi/extension/en/mangahasu/Mangahasu.kt +++ /dev/null @@ -1,369 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangahasu - -import android.util.Base64 -import eu.kanade.tachiyomi.network.GET -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 kotlinx.serialization.json.Json -import kotlinx.serialization.json.int -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonObject -import kotlinx.serialization.json.jsonPrimitive -import okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import uy.kohesive.injekt.injectLazy -import java.text.SimpleDateFormat -import java.util.Locale - -class Mangahasu : ParsedHttpSource() { - - override val name = "Mangahasu" - - override val baseUrl = "https://mangahasu.me" - - override val lang = "en" - - override val supportsLatest = true - - override val client: OkHttpClient = network.cloudflareClient - - private val json: Json by injectLazy() - - override fun headersBuilder(): Headers.Builder = super.headersBuilder() - .add("Referer", baseUrl) - - override fun popularMangaRequest(page: Int): Request = - GET("$baseUrl/most-popular.html?page=$page", headers) - - override fun latestUpdatesRequest(page: Int): Request = - GET("$baseUrl/latest-releases.html?page=$page", headers) - - // Only selects popular of all time - override fun popularMangaSelector() = "div.right div.div_item" - - override fun latestUpdatesSelector() = "div.div_item" - - override fun popularMangaFromElement(element: Element): SManga { - val manga = SManga.create() - manga.thumbnail_url = element.select("img").first()!!.attr("src") - element.select("a:has(h3.name-manga), a.name-manga").first()!!.let { - manga.setUrlWithoutDomain(it.attr("href")) - manga.title = it.text() - } - return manga - } - - override fun latestUpdatesFromElement(element: Element): SManga = - popularMangaFromElement(element) - - override fun popularMangaNextPageSelector() = "a[title = Tiếp]" - - override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/advanced-search.html".toHttpUrl().newBuilder() - url.addQueryParameter("keyword", query) - url.addQueryParameter("page", page.toString()) - - filters.forEach { filter -> - when (filter) { - is AuthorFilter -> url.addQueryParameter("author", filter.state) - is ArtistFilter -> url.addQueryParameter("artist", filter.state) - is StatusFilter -> url.addQueryParameter("status", filter.toUriPart()) - is TypeFilter -> url.addQueryParameter("typeid", filter.toUriPart()) - is GenreFilter -> { - filter.state.forEach { - when (it.state) { - Filter.TriState.STATE_INCLUDE -> url.addQueryParameter("g_i[]", it.id) - Filter.TriState.STATE_EXCLUDE -> url.addQueryParameter("g_e[]", it.id) - } - } - } - is OrderByFilter -> { - filter.state?.let { - var sortId = it.index - - // Increment for consistency - when (sortId) { - 1 -> sortId += 1 - 2 -> sortId += 2 - } - - val value = if (it.ascending) "${(sortId + 1)}" else "$sortId" - - url.addQueryParameter("orderby", value) - } - } - else -> { - // ignore - } - } - } - return GET(url.build(), headers) - } - - override fun searchMangaSelector() = latestUpdatesSelector() - - override fun searchMangaFromElement(element: Element): SManga = - popularMangaFromElement(element) - - // max 200 results - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun mangaDetailsParse(document: Document): SManga { - val infoElement = document.select(".info-c").first()!! - - val manga = SManga.create() - manga.author = isUpdating(infoElement.select(".info")[0].text()) - manga.artist = isUpdating(infoElement.select(".info")[1].text()) - manga.genre = isUpdating(infoElement.select(".info")[3].text()) - manga.status = parseStatus(infoElement.select(".info")[4].text()) - manga.description = - document.select("div.content-info:has(h3:contains(summary)) div").first()?.text() - manga.thumbnail_url = document.select("div.info-img img").attr("src") - return manga - } - - private fun parseStatus(element: String): Int = when { - element.contains("Ongoing") -> SManga.ONGOING - element.contains("Completed") -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - private fun isUpdating(string: String): String { - return if (string == "Updating...") "" else string - } - - override fun chapterListSelector() = "tbody tr" - - override fun chapterFromElement(element: Element): SChapter { - val urlElement = element.select("a").first()!! - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(urlElement.attr("href")) - urlElement.select("span.name-manga").remove() - chapter.name = urlElement.text() - - chapter.date_upload = element.select(".date-updated").last()?.text()?.let { - SimpleDateFormat("MMM dd, yyyy", Locale.US).parse(it)?.time ?: 0 - } ?: 0 - return chapter - } - - override fun prepareNewChapter(chapter: SChapter, manga: SManga) { - val basic = Regex("""Chapter\s([0-9]+)""") - when { - basic.containsMatchIn(chapter.name) -> { - basic.find(chapter.name)?.let { - chapter.chapter_number = it.groups[1]?.value!!.toFloat() - } - } - } - } - - override fun pageListParse(document: Document): List { - // Grab All Pages from site - // Some images are place holders on new chapters. - - val pageList = document.select("div.img img") - .mapIndexed { _, el -> - val pageNumber = el.attr("class").substringAfter("page").toInt() - Page(pageNumber, "", el.attr("src")) - } - .toMutableList() - - // Some images are not yet loaded onto Mangahasu's image server. - // Decode temporary URLs and replace placeholder images. - - val lstDUrls = document.select("script:containsData(lstDUrls)") - .html() - .substringAfter("lstDUrls") - .substringAfter("\"") - .substringBefore("\"") - - // Base64 = [] or empty file - // Ensures lstDUrls exists, otherwise errors will occur - if (lstDUrls.isNotEmpty() && lstDUrls != "W10=") { - val jsonRaw = String(Base64.decode(lstDUrls, Base64.DEFAULT)) - val jsonArr = json.parseToJsonElement(jsonRaw).jsonArray - - jsonArr.forEach { jsonEl -> - val jsonObj = jsonEl.jsonObject - val pageNumber = jsonObj["page"]!!.jsonPrimitive.int - - pageList.removeAll { page -> page.index == pageNumber } - pageList.add(Page(pageNumber, "", jsonObj["url"]!!.jsonPrimitive.content)) - } - } - - return pageList.sortedBy { page -> page.index } - } - - override fun imageUrlParse(document: Document) = "" - - // Filters - - override fun getFilterList() = FilterList( - AuthorFilter(), - ArtistFilter(), - OrderByFilter(), - StatusFilter(), - TypeFilter(), - GenreFilter(getGenreList()), - ) - - private class AuthorFilter : Filter.Text("Author") - - private class ArtistFilter : Filter.Text("Artist") - - private open class UriPartFilter(displayName: String, val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } - - private class TypeFilter : UriPartFilter( - "Type", - arrayOf( - Pair("Any", ""), - Pair("Manga", "10"), - Pair("Manhwa", "12"), - Pair("Manhua", "19"), - ), - ) - - private class OrderByFilter : Filter.Sort( - "Order By", - arrayOf( - "Updated", - "Views", - "Subscribers", - ), - Selection(0, false), - ) - - private class StatusFilter : UriPartFilter( - "Status", - arrayOf( - Pair("Any", ""), - Pair("Completed", "1"), - Pair("Ongoing", "2"), - ), - ) - - private class Genre(name: String, val id: String) : Filter.TriState(name) - private class GenreFilter(genres: List) : Filter.Group("Genres", genres) - - private fun getGenreList() = listOf( - Genre("4-koma", "46"), - Genre("Action", "1"), - Genre("Adaptation", "101"), - Genre("Adult", "2"), - Genre("Adventure", "3"), - Genre("Aliens", "103"), - Genre("Animals", "73"), - Genre("Anime", "57"), - Genre("Anthology", "99"), - Genre("Award Winning", "48"), - Genre("Bara", "60"), - Genre("Comedy", "4"), - Genre("Comic", "5"), - Genre("Cooking", "6"), - Genre("Crime", "92"), - Genre("Crossdressing", "86"), - Genre("Delinquents", "83"), - Genre("Demons", "51"), - Genre("Doujinshi", "7"), - Genre("Drama", "8"), - Genre("Ecchi", "9"), - Genre("Fan Colored", "107"), - Genre("Fantasy", "10"), - Genre("Full Color", "95"), - Genre("Game", "68"), - Genre("Gender Bender", "11"), - Genre("Genderswap", "81"), - Genre("Ghosts", "90"), - Genre("Gore", "100"), - Genre("Gyaru", "97"), - Genre("Harem", "12"), - Genre("Historical", "13"), - Genre("Horror", "14"), - Genre("Incest", "84"), - Genre("Isekai", "67"), - Genre("Josei", "15"), - Genre("Live Action", "59"), - Genre("Loli", "91"), - Genre("Lolicon", "16"), - Genre("Long Strip", "93"), - Genre("Mafia", "113"), - Genre("Magic", "55"), - Genre("Magical Girls", "89"), - Genre("Manga Reviews", "64"), - Genre("Martial Arts", "20"), - Genre("Mature", "21"), - Genre("Mecha", "22"), - Genre("Medical", "23"), - Genre("Military", "62"), - Genre("Monster Girls", "87"), - Genre("Monsters", "72"), - Genre("Music", "24"), - Genre("Mystery", "25"), - Genre("Ninja", "112"), - Genre("Office Workers", "80"), - Genre("Official Colored", "96"), - Genre("One shot", "26"), - Genre("Others", "114"), - Genre("Philosophical", "110"), - Genre("Police", "105"), - Genre("Post-Apocalyptic", "76"), - Genre("Psychological", "27"), - Genre("Reincarnation", "74"), - Genre("Reverse harem", "69"), - Genre("Romance", "28"), - Genre("Samurai", "108"), - Genre("School Life", "29"), - Genre("Sci-fi", "30"), - Genre("Seinen", "31"), - Genre("Seinen Supernatural", "66"), - Genre("Sexual Violence", "98"), - Genre("Shota", "104"), - Genre("Shotacon", "32"), - Genre("Shoujo", "33"), - Genre("Shoujo Ai", "34"), - Genre("Shoujoai", "63"), - Genre("Shounen", "35"), - Genre("Shounen Ai", "36"), - Genre("Shounenai", "61"), - Genre("Slice of Life", "37"), - Genre("Smut", "38"), - Genre("Sports", "39"), - Genre("Super power", "70"), - Genre("Superhero", "88"), - Genre("Supernatural", "40"), - Genre("Survival", "77"), - Genre("Thriller", "75"), - Genre("Time Travel", "78"), - Genre("Traditional Games", "111"), - Genre("Tragedy", "41"), - Genre("Uncategorized", "65"), - Genre("User Created", "102"), - Genre("Vampire", "58"), - Genre("Vampires", "82"), - Genre("Video Games", "85"), - Genre("Virtual Reality", "109"), - Genre("Web Comic", "94"), - Genre("Webtoon", "42"), - Genre("Webtoons", "56"), - Genre("Wuxia", "71"), - Genre("Yaoi", "43"), - Genre("Youkai", "106"), - Genre("Yuri", "44"), - Genre("Zombies", "79"), - ) -} diff --git a/src/en/mangarockteam/build.gradle b/src/en/mangarockteam/build.gradle deleted file mode 100644 index ff51d6bfb..000000000 --- a/src/en/mangarockteam/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Manga Rock Team' - extClass = '.MangaRockTeam' - themePkg = 'madara' - baseUrl = 'https://mangarockteam.com' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/mangarockteam/res/mipmap-hdpi/ic_launcher.png b/src/en/mangarockteam/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 478a7699a..000000000 Binary files a/src/en/mangarockteam/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangarockteam/res/mipmap-mdpi/ic_launcher.png b/src/en/mangarockteam/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 4c03e8f6b..000000000 Binary files a/src/en/mangarockteam/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangarockteam/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangarockteam/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index ba7fe6382..000000000 Binary files a/src/en/mangarockteam/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangarockteam/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangarockteam/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 0d20ad58b..000000000 Binary files a/src/en/mangarockteam/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangarockteam/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/mangarockteam/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 3ee2550d5..000000000 Binary files a/src/en/mangarockteam/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangarockteam/src/eu/kanade/tachiyomi/extension/en/mangarockteam/MangaRockTeam.kt b/src/en/mangarockteam/src/eu/kanade/tachiyomi/extension/en/mangarockteam/MangaRockTeam.kt deleted file mode 100644 index 5b1d04d25..000000000 --- a/src/en/mangarockteam/src/eu/kanade/tachiyomi/extension/en/mangarockteam/MangaRockTeam.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangarockteam - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class MangaRockTeam : Madara("Manga Rock Team", "https://mangarockteam.com", "en") diff --git a/src/en/mangatop/build.gradle b/src/en/mangatop/build.gradle deleted file mode 100644 index 1877a0d64..000000000 --- a/src/en/mangatop/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - extName = 'MangaScans' - extClass = '.MangaScans' - extVersionCode = 2 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/mangatop/res/mipmap-hdpi/ic_launcher.png b/src/en/mangatop/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a67a5f7df..000000000 Binary files a/src/en/mangatop/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangatop/res/mipmap-mdpi/ic_launcher.png b/src/en/mangatop/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index b84f8e14a..000000000 Binary files a/src/en/mangatop/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangatop/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangatop/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index f2c659ea1..000000000 Binary files a/src/en/mangatop/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangatop/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangatop/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 323f13a84..000000000 Binary files a/src/en/mangatop/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangatop/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/mangatop/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d97c8cedb..000000000 Binary files a/src/en/mangatop/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/Filters.kt b/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/Filters.kt deleted file mode 100644 index 59c17d6c9..000000000 --- a/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/Filters.kt +++ /dev/null @@ -1,131 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangatop - -import eu.kanade.tachiyomi.source.model.Filter -import okhttp3.HttpUrl - -interface UriFilter { - fun addToUri(builder: HttpUrl.Builder) -} - -open class UriMultiSelectOption(name: String, val value: String) : Filter.CheckBox(name) - -open class UriMultiSelectFilter( - name: String, - private val param: String, - private val vals: Array>, -) : Filter.Group(name, vals.map { UriMultiSelectOption(it.first, it.second) }), UriFilter { - override fun addToUri(builder: HttpUrl.Builder) { - state.filter { it.state }.forEach { - builder.addQueryParameter(param, it.value) - } - } -} - -class TypeFilter : UriMultiSelectFilter( - "Type", - "types[]", - arrayOf( - Pair("Manga", "1"), - Pair("Novel", "2"), - Pair("One Shot", "3"), - Pair("Doujinshi", "4"), - Pair("Manhwa", "5"), - Pair("Manhua", "6"), - Pair("OEL", "7"), - Pair("Light Novel", "8"), - ), -) - -class GenreFilter : UriMultiSelectFilter( - "Genre", - "genres[]", - arrayOf( - Pair("Action", "1"), - Pair("Adventure", "2"), - Pair("Avant Garde", "5"), - Pair("Award Winning", "46"), - Pair("Boys Love", "28"), - Pair("Comedy", "4"), - Pair("Drama", "8"), - Pair("Fantasy", "10"), - Pair("Girls Love", "26"), - Pair("Gourmet", "47"), - Pair("Horror", "14"), - Pair("Mystery", "7"), - Pair("Romance", "22"), - Pair("Sci-Fi", "24"), - Pair("Slice of Life", "36"), - Pair("Sports", "30"), - Pair("Supernatural", "37"), - Pair("Suspense", "45"), - Pair("Ecchi", "9"), - Pair("Erotica", "49"), - Pair("Hentai", "12"), - Pair("Adult Cast", "50"), - Pair("Anthropomorphic", "51"), - Pair("CGDCT", "52"), - Pair("Childcare", "53"), - Pair("Combat Sports", "54"), - Pair("Crossdressing", "44"), - Pair("Delinquents", "55"), - Pair("Detective", "39"), - Pair("Educational", "56"), - Pair("Gag Humor", "57"), - Pair("Gore", "58"), - Pair("Harem", "35"), - Pair("High Stakes Game", "59"), - Pair("Historical", "13"), - Pair("Idols (Female)", "60"), - Pair("Idols (Male)", "61"), - Pair("Isekai", "62"), - Pair("Iyashikei", "63"), - Pair("Love Polygon", "64"), - Pair("Magical Sex Shift", "65"), - Pair("Mahou Shoujo", "66"), - Pair("Martial Arts", "17"), - Pair("Mecha", "18"), - Pair("Medical", "67"), - Pair("Memoir", "68"), - Pair("Military", "38"), - Pair("Music", "19"), - Pair("Mythology", "6"), - Pair("Organized Crime", "69"), - Pair("Otaku Culture", "70"), - Pair("Parody", "20"), - Pair("Performing Arts", "71"), - Pair("Pets", "72"), - Pair("Psychological", "40"), - Pair("Racing", "3"), - Pair("Reincarnation", "73"), - Pair("Reverse Harem", "74"), - Pair("Romantic Subtext", "75"), - Pair("Samurai", "21"), - Pair("School", "23"), - Pair("Showbiz", "76"), - Pair("Space", "29"), - Pair("Strategy Game", "11"), - Pair("Super Power", "31"), - Pair("Survival", "77"), - Pair("Team Sports", "78"), - Pair("Time Travel", "79"), - Pair("Vampire", "32"), - Pair("Video Game", "80"), - Pair("Villainess", "81"), - Pair("Visual Arts", "82"), - Pair("Workplace", "48"), - Pair("Josei", "42"), - Pair("Kids", "15"), - Pair("Seinen", "41"), - Pair("Shoujo", "25"), - Pair("Shounen", "27"), - ), -) - -class StatusFilter : UriMultiSelectFilter( - "Status", - "status[]", - arrayOf( - Pair("Ongoing", "0"), - Pair("Completed", "1"), - ), -) diff --git a/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/MangaScans.kt b/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/MangaScans.kt deleted file mode 100644 index accf82525..000000000 --- a/src/en/mangatop/src/eu/kanade/tachiyomi/extension/en/mangatop/MangaScans.kt +++ /dev/null @@ -1,358 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangatop - -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import eu.kanade.tachiyomi.util.asJsoup -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.decodeFromStream -import okhttp3.FormBody -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.Interceptor -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import uy.kohesive.injekt.injectLazy -import java.io.IOException -import java.lang.Exception -import java.text.ParseException -import java.text.SimpleDateFormat -import java.util.Calendar -import java.util.Locale - -class MangaScans : ParsedHttpSource() { - - override val name = "MangaScans" - - override val baseUrl = "https://mangascans.to" - - override val lang = "en" - - override val supportsLatest = true - - override val id = 85127596998931837 - - override val client = network.cloudflareClient.newBuilder() - .addInterceptor(::tokenInterceptor) - .rateLimit(2) - .build() - - override fun headersBuilder() = super.headersBuilder() - .add("Referer", "$baseUrl/") - - private val json: Json by injectLazy() - - private val dateFormat = SimpleDateFormat("MMM d, yyyy", Locale.ENGLISH) - - private var storedToken: String? = null - - // From Akuma - private fun tokenInterceptor(chain: Interceptor.Chain): Response { - val request = chain.request() - - if (request.method == "POST" && request.header("X-CSRF-TOKEN") == null) { - val newRequest = request.newBuilder() - val token = getToken() - val response = chain.proceed( - newRequest - .addHeader("X-CSRF-TOKEN", token) - .build(), - ) - - if (response.code == 419) { - response.close() - storedToken = null // reset the token - val newToken = getToken() - return chain.proceed( - newRequest - .addHeader("X-CSRF-TOKEN", newToken) - .build(), - ) - } - - return response - } - - return chain.proceed(request) - } - - private fun getToken(): String { - if (storedToken.isNullOrEmpty()) { - val request = GET(baseUrl, headers) - val response = client.newCall(request).execute() - - val document = response.asJsoup() - document.updateToken() - } - - return storedToken!! - } - - // ============================== Popular =============================== - - override fun popularMangaRequest(page: Int): Request = GET(baseUrl, headers) - - override fun popularMangaParse(response: Response): MangasPage { - val document = response.asJsoup() - document.updateToken() - - val mangaList = document.select(popularMangaSelector()) - .map(::popularMangaFromElement) - - return MangasPage(mangaList, false) - } - - override fun popularMangaSelector(): String = "aside div > article" - - override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { - thumbnail_url = element.selectFirst("img")!!.imgAttr() - with(element.selectFirst("a:has(h3)")!!) { - setUrlWithoutDomain(attr("abs:href")) - title = text() - } - } - - override fun popularMangaNextPageSelector(): String? = null - - // =============================== Latest =============================== - - override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/latest?page=$page", headers) - - override fun latestUpdatesParse(response: Response): MangasPage { - val document = response.asJsoup() - document.updateToken() - - val mangaList = document.select(latestUpdatesSelector()) - .map(::latestUpdatesFromElement) - - val hasNextPage = document.selectFirst(latestUpdatesNextPageSelector()) != null - - return MangasPage(mangaList, hasNextPage) - } - - override fun latestUpdatesSelector(): String = "div > article.manga-item" - - override fun latestUpdatesFromElement(element: Element): SManga = - popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector(): String = "ul.pagination > li.active + li:has(a)" - - // =============================== Search =============================== - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val filterList = filters.ifEmpty { getFilterList() } - val url = "$baseUrl/search".toHttpUrl().newBuilder().apply { - addQueryParameter("q", query) - filterList.filterIsInstance().forEach { - it.addToUri(this) - } - addQueryParameter("page", page.toString()) - }.build() - - return GET(url, headers) - } - - override fun searchMangaParse(response: Response): MangasPage = - latestUpdatesParse(response) - - override fun searchMangaSelector(): String = - throw UnsupportedOperationException() - - override fun searchMangaFromElement(element: Element): SManga = - throw UnsupportedOperationException() - - override fun searchMangaNextPageSelector(): String = - throw UnsupportedOperationException() - - // =============================== Filters ============================== - - override fun getFilterList(): FilterList = FilterList( - TypeFilter(), - GenreFilter(), - StatusFilter(), - ) - - // =========================== Manga Details ============================ - - override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { - thumbnail_url = document.selectFirst("picture img")!!.imgAttr() - with(document.selectFirst(".manga-info")!!) { - title = selectFirst("h1.page-heading")!!.text() - author = selectFirst("ul > li:has(span:contains(Authors))")?.ownText() - genre = select("ul > li:has(span:contains(Genres)) a").joinToString { it.text() } - status = selectFirst(".text-info").parseStatus() - description = selectFirst("#manga-description")?.text() - ?.split(".") - ?.filterNot { it.contains("MangaTop") } - ?.joinToString(".") - ?.trim() - } - } - - private fun Element?.parseStatus(): Int = when (this?.text()?.lowercase()) { - "ongoing" -> SManga.ONGOING - "completed" -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - // ============================== Chapters ============================== - - override fun chapterListParse(response: Response): List { - val document = response.asJsoup() - document.updateToken() - - val mangaName = document.selectFirst("script:containsData(mangaName)") - ?.data() - ?.substringAfter("mangaName") - ?.substringAfter("'") - ?.substringBefore("'") - ?: throw Exception("Failed to get form data") - - val postHeaders = apiHeadersBuilder().apply { - set("Referer", response.request.url.toString()) - }.build() - - val postBody = FormBody.Builder().apply { - add("mangaIdx", response.request.url.toString().substringAfterLast("-")) - add("mangaName", mangaName) - }.build() - - val postResponse = client.newCall( - POST("$baseUrl/chapter-list", postHeaders, postBody), - ).execute() - - return super.chapterListParse(postResponse) - } - - override fun chapterListSelector() = "li" - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - element.selectFirst(".text-muted")?.also { - date_upload = it.text().parseDate() - } - name = element.selectFirst("span:not(.text-muted)")!!.text() - setUrlWithoutDomain(element.selectFirst("a")!!.attr("abs:href")) - } - - private fun String.parseDate(): Long { - return if (this.contains("ago")) { - this.parseRelativeDate() - } else { - try { - dateFormat.parse(this)!!.time - } catch (_: ParseException) { - 0L - } - } - } - - private fun String.parseRelativeDate(): Long { - val now = Calendar.getInstance().apply { - set(Calendar.HOUR_OF_DAY, 0) - set(Calendar.MINUTE, 0) - set(Calendar.SECOND, 0) - set(Calendar.MILLISECOND, 0) - } - - val relativeDate = this.split(" ").firstOrNull() - ?.toIntOrNull() - ?: return 0L - - when { - "second" in this -> now.add(Calendar.SECOND, -relativeDate) // parse: 30 seconds ago - "minute" in this -> now.add(Calendar.MINUTE, -relativeDate) // parses: "42 minutes ago" - "hour" in this -> now.add(Calendar.HOUR, -relativeDate) // parses: "1 hour ago" and "2 hours ago" - "day" in this -> now.add(Calendar.DAY_OF_YEAR, -relativeDate) // parses: "2 days ago" - "week" in this -> now.add(Calendar.WEEK_OF_YEAR, -relativeDate) // parses: "2 weeks ago" - "month" in this -> now.add(Calendar.MONTH, -relativeDate) // parses: "2 months ago" - "year" in this -> now.add(Calendar.YEAR, -relativeDate) // parse: "2 years ago" - } - return now.timeInMillis - } - - // =============================== Pages ================================ - - override fun pageListRequest(chapter: SChapter): Request { - val chapterId = chapter.url.substringBeforeLast(".html") - .substringAfterLast("-") - - val postHeaders = apiHeadersBuilder().apply { - set("Referer", baseUrl + chapter.url) - }.build() - - val postBody = FormBody.Builder().apply { - add("chapterIdx", chapterId) - }.build() - - return POST("$baseUrl/chapter-resources", postHeaders, postBody) - } - - @Serializable - class PageListResponse( - val data: PageListDataDto, - ) { - @Serializable - class PageListDataDto( - val resources: List, - ) { - @Serializable - class PageDto( - val name: Int, - val thumb: String, - ) - } - } - - override fun pageListParse(response: Response): List { - return response.parseAs().data.resources.map { - Page(it.name, imageUrl = it.thumb) - } - } - - override fun pageListParse(document: Document): List = - throw UnsupportedOperationException() - - override fun imageUrlParse(document: Document) = "" - - override fun imageRequest(page: Page): Request { - val imgHeaders = headersBuilder().apply { - add("Accept", "image/avif,image/webp,*/*") - add("Host", page.imageUrl!!.toHttpUrl().host) - }.build() - - return GET(page.imageUrl!!, imgHeaders) - } - - // ============================= Utilities ============================== - - private fun Document.updateToken() { - storedToken = this.selectFirst("head meta[name*=csrf-token]") - ?.attr("content") - ?: throw IOException("Failed to update token") - } - - private inline fun Response.parseAs(): T = use { - json.decodeFromStream(it.body.byteStream()) - } - - private fun apiHeadersBuilder() = headersBuilder().apply { - add("Accept", "*/*") - add("Host", baseUrl.toHttpUrl().host) - add("Origin", baseUrl) - add("X-Requested-With", "XMLHttpRequest") - } - - private fun Element.imgAttr(): String = when { - hasAttr("data-lazy-src") -> attr("abs:data-lazy-src") - hasAttr("data-src") -> attr("abs:data-src") - else -> attr("abs:src") - } -} diff --git a/src/en/manhwafull/build.gradle b/src/en/manhwafull/build.gradle deleted file mode 100644 index 68ba74834..000000000 --- a/src/en/manhwafull/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'Manhwafull' - extClass = '.Manhwafull' - themePkg = 'madara' - baseUrl = 'https://manhwafull.com' - overrideVersionCode = 1 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/manhwafull/res/mipmap-hdpi/ic_launcher.png b/src/en/manhwafull/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 6a2e33d96..000000000 Binary files a/src/en/manhwafull/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafull/res/mipmap-mdpi/ic_launcher.png b/src/en/manhwafull/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 7be67b915..000000000 Binary files a/src/en/manhwafull/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafull/res/mipmap-xhdpi/ic_launcher.png b/src/en/manhwafull/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 937c7d1fb..000000000 Binary files a/src/en/manhwafull/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafull/res/mipmap-xxhdpi/ic_launcher.png b/src/en/manhwafull/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 43334dc2c..000000000 Binary files a/src/en/manhwafull/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafull/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/manhwafull/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c02533943..000000000 Binary files a/src/en/manhwafull/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/manhwafull/src/eu/kanade/tachiyomi/extension/en/manhwafull/Manhwafull.kt b/src/en/manhwafull/src/eu/kanade/tachiyomi/extension/en/manhwafull/Manhwafull.kt deleted file mode 100644 index 9227a477a..000000000 --- a/src/en/manhwafull/src/eu/kanade/tachiyomi/extension/en/manhwafull/Manhwafull.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.manhwafull - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class Manhwafull : Madara("Manhwafull", "https://manhwafull.com", "en", SimpleDateFormat("MM/dd/yyyy", Locale.ENGLISH)) diff --git a/src/en/myshojo/build.gradle b/src/en/myshojo/build.gradle deleted file mode 100644 index 7f71e8333..000000000 --- a/src/en/myshojo/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'MyShojo' - extClass = '.MyShojo' - themePkg = 'mangathemesia' - baseUrl = 'https://myshojo.com' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/myshojo/res/mipmap-hdpi/ic_launcher.png b/src/en/myshojo/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ba8e47c2f..000000000 Binary files a/src/en/myshojo/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/myshojo/res/mipmap-mdpi/ic_launcher.png b/src/en/myshojo/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index a87176d17..000000000 Binary files a/src/en/myshojo/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/myshojo/res/mipmap-xhdpi/ic_launcher.png b/src/en/myshojo/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index b8b46e8a3..000000000 Binary files a/src/en/myshojo/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/myshojo/res/mipmap-xxhdpi/ic_launcher.png b/src/en/myshojo/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index d5865f8f0..000000000 Binary files a/src/en/myshojo/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/myshojo/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/myshojo/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 6ba96f2ff..000000000 Binary files a/src/en/myshojo/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/myshojo/src/eu/kanade/tachiyomi/extension/en/myshojo/MyShojo.kt b/src/en/myshojo/src/eu/kanade/tachiyomi/extension/en/myshojo/MyShojo.kt deleted file mode 100644 index 0cfec29b1..000000000 --- a/src/en/myshojo/src/eu/kanade/tachiyomi/extension/en/myshojo/MyShojo.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.myshojo - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class MyShojo : MangaThemesia("MyShojo", "https://myshojo.com", "en") diff --git a/src/en/todaymic/build.gradle b/src/en/todaymic/build.gradle deleted file mode 100644 index b021bfeaa..000000000 --- a/src/en/todaymic/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Todaymic' - extClass = '.Todaymic' - themePkg = 'madara' - baseUrl = 'https://todaymic.com' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/todaymic/res/mipmap-hdpi/ic_launcher.png b/src/en/todaymic/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ed0d1af77..000000000 Binary files a/src/en/todaymic/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/todaymic/res/mipmap-mdpi/ic_launcher.png b/src/en/todaymic/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 6f2a32cc4..000000000 Binary files a/src/en/todaymic/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/todaymic/res/mipmap-xhdpi/ic_launcher.png b/src/en/todaymic/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 1c7715fcc..000000000 Binary files a/src/en/todaymic/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/todaymic/res/mipmap-xxhdpi/ic_launcher.png b/src/en/todaymic/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 31614f210..000000000 Binary files a/src/en/todaymic/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/todaymic/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/todaymic/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 8b19bf81d..000000000 Binary files a/src/en/todaymic/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/todaymic/src/eu/kanade/tachiyomi/extension/en/todaymic/Todaymic.kt b/src/en/todaymic/src/eu/kanade/tachiyomi/extension/en/todaymic/Todaymic.kt deleted file mode 100644 index 6f34be622..000000000 --- a/src/en/todaymic/src/eu/kanade/tachiyomi/extension/en/todaymic/Todaymic.kt +++ /dev/null @@ -1,10 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.todaymic - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class Todaymic : Madara("Todaymic", "https://todaymic.com", "en") { - override val filterNonMangaItems = false - override val useNewChapterEndpoint = true - override val useLoadMoreRequest = LoadMoreStrategy.Always - override val mangaDetailsSelectorDescription = ".manga-about > p:nth-child(2)" -} diff --git a/src/es/tresdaosnet/build.gradle b/src/es/tresdaosnet/build.gradle deleted file mode 100644 index 1ebe41ac5..000000000 --- a/src/es/tresdaosnet/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Tres Daos Net' - extClass = '.TresDaosNet' - themePkg = 'madara' - baseUrl = 'https://tresdaos.net' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/tresdaosnet/res/mipmap-hdpi/ic_launcher.png b/src/es/tresdaosnet/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 8b1f78f56..000000000 Binary files a/src/es/tresdaosnet/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/tresdaosnet/res/mipmap-mdpi/ic_launcher.png b/src/es/tresdaosnet/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 441fb844a..000000000 Binary files a/src/es/tresdaosnet/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/tresdaosnet/res/mipmap-xhdpi/ic_launcher.png b/src/es/tresdaosnet/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 4d68a0d72..000000000 Binary files a/src/es/tresdaosnet/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/tresdaosnet/res/mipmap-xxhdpi/ic_launcher.png b/src/es/tresdaosnet/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 6abf41814..000000000 Binary files a/src/es/tresdaosnet/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/tresdaosnet/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/tresdaosnet/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index da5c43c5e..000000000 Binary files a/src/es/tresdaosnet/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/tresdaosnet/src/eu/kanade/tachiyomi/extension/es/tresdaosnet/TresDaosNet.kt b/src/es/tresdaosnet/src/eu/kanade/tachiyomi/extension/es/tresdaosnet/TresDaosNet.kt deleted file mode 100644 index 1fe60a525..000000000 --- a/src/es/tresdaosnet/src/eu/kanade/tachiyomi/extension/es/tresdaosnet/TresDaosNet.kt +++ /dev/null @@ -1,11 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.tresdaosnet - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class TresDaosNet : Madara( - "Tres Daos Net", - "https://tresdaos.net", - "es", -) { - override val useLoadMoreRequest = LoadMoreStrategy.Always -} diff --git a/src/fr/scanmanga/.gitignore b/src/fr/scanmanga/.gitignore deleted file mode 100644 index 2c34b6bff..000000000 --- a/src/fr/scanmanga/.gitignore +++ /dev/null @@ -1 +0,0 @@ -local.properties diff --git a/src/fr/scanmanga/build.gradle b/src/fr/scanmanga/build.gradle deleted file mode 100644 index 23aee9935..000000000 --- a/src/fr/scanmanga/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - extName = 'Scan-Manga' - extClass = '.ScanManga' - extVersionCode = 12 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/fr/scanmanga/res/mipmap-hdpi/ic_launcher.png b/src/fr/scanmanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 0983fdf43..000000000 Binary files a/src/fr/scanmanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/scanmanga/res/mipmap-mdpi/ic_launcher.png b/src/fr/scanmanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 978a9f71c..000000000 Binary files a/src/fr/scanmanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/scanmanga/res/mipmap-xhdpi/ic_launcher.png b/src/fr/scanmanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5d716298d..000000000 Binary files a/src/fr/scanmanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/scanmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/fr/scanmanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 9f545740a..000000000 Binary files a/src/fr/scanmanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/scanmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/fr/scanmanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 9f26c3dd3..000000000 Binary files a/src/fr/scanmanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanManga.kt b/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanManga.kt deleted file mode 100644 index a63c7a78f..000000000 --- a/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanManga.kt +++ /dev/null @@ -1,248 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.scanmanga - -import android.util.Base64 -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.source.online.HttpSource -import eu.kanade.tachiyomi.util.asJsoup -import keiyoushi.utils.parseAs -import okhttp3.CookieJar -import okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.Response -import java.util.zip.Inflater - -class ScanManga : HttpSource() { - override val name = "Scan-Manga" - - override val baseUrl = "https://m.scan-manga.com" - private val baseImageUrl = "https://static.scan-manga.com/img/manga" - - override val lang = "fr" - - override val supportsLatest = true - - override fun headersBuilder(): Headers.Builder = super.headersBuilder() - .add("Accept-Language", "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7") - .set("User-Agent", "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Mobile Safari/537.36") - - // Popular - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/TOP-Manga-Webtoon-36.html", headers) - } - - override fun popularMangaParse(response: Response): MangasPage { - val mangas = response.asJsoup().select("#carouselTOPContainer > div.top").map { element -> - SManga.create().apply { - val titleElement = element.selectFirst("a.atop")!! - - title = titleElement.text() - setUrlWithoutDomain(titleElement.attr("href")) - thumbnail_url = element.selectFirst("img")?.attr("data-original") - } - } - - return MangasPage(mangas, false) - } - - // Latest - override fun latestUpdatesRequest(page: Int): Request = GET(baseUrl, headers) - - override fun latestUpdatesParse(response: Response): MangasPage { - val document = response.asJsoup() - - val mangas = document.select("#content_news .publi").map { element -> - SManga.create().apply { - val mangaElement = element.selectFirst("a.l_manga")!! - - title = mangaElement.text() - setUrlWithoutDomain(mangaElement.attr("href")) - - thumbnail_url = element.selectFirst("img")?.attr("src") - } - } - - return MangasPage(mangas, false) - } - - // Search - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/api/search/quick.json" - .toHttpUrl().newBuilder() - .addQueryParameter("term", query) - .build() - .toString() - - val newHeaders = headers.newBuilder() - .add("Content-type", "application/json; charset=UTF-8") - .build() - - return GET(url, newHeaders) - } - - override fun searchMangaParse(response: Response): MangasPage { - val json = response.body.string() - if (json == "[]") { return MangasPage(emptyList(), false) } - - return MangasPage( - json.parseAs().title?.map { - SManga.create().apply { - title = it.nom_match - setUrlWithoutDomain(it.url) - thumbnail_url = "$baseImageUrl/${it.image}" - } - } ?: emptyList(), - false, - ) - } - - // Details - override fun mangaDetailsParse(response: Response): SManga { - val document = response.asJsoup() - - return SManga.create().apply { - title = document.select("h1.main_title[itemprop=name]").text() - author = document.select("div[itemprop=author]").text() - description = document.selectFirst("div.titres_desc[itemprop=description]")?.text() - genre = document.selectFirst("div.titres_souspart span[itemprop=genre]")?.text() - - val statutText = document.selectFirst("div.titres_souspart")?.ownText() - status = when { - statutText?.contains("En cours", ignoreCase = true) == true -> SManga.ONGOING - statutText?.contains("Terminé", ignoreCase = true) == true -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - thumbnail_url = document.select("div.full_img_serie img[itemprop=image]").attr("src") - } - } - - // Chapters - override fun chapterListParse(response: Response): List { - val document = response.asJsoup() - return document.select("div.chapt_m").map { element -> - val linkEl = element.selectFirst("td.publimg span.i a")!! - val titleEl = element.selectFirst("td.publititle") - - val chapterName = linkEl.text() - val extraTitle = titleEl?.text() - - SChapter.create().apply { - name = if (!extraTitle.isNullOrEmpty()) "$chapterName - $extraTitle" else chapterName - setUrlWithoutDomain(linkEl.absUrl("href")) - } - } - } - - // Pages - private fun decodeHunter(obfuscatedJs: String): String { - val regex = Regex("""eval\(function\(h,u,n,t,e,r\)\{.*?\}\("([^"]+)",\d+,"([^"]+)",(\d+),(\d+),\d+\)\)""") - val (encoded, mask, intervalStr, optionStr) = regex.find(obfuscatedJs)?.destructured - ?: error("Failed to match obfuscation pattern: $obfuscatedJs") - - val interval = intervalStr.toInt() - val option = optionStr.toInt() - val delimiter = mask[option] - val tokens = encoded.split(delimiter).filter { it.isNotEmpty() } - val reversedMap = mask.withIndex().associate { it.value to it.index } - - return buildString { - for (token in tokens) { - // Reverse the hashIt() operation: convert masked characters back to digits - val digitString = token.map { c -> - reversedMap[c]?.toString() ?: error("Invalid masked character: $c") - }.joinToString("") - - // Convert from base `option` to decimal - val number = digitString.toIntOrNull(option) - ?: error("Failed to parse token: $digitString as base $option") - - // Reverse the shift done during encodeIt() - val originalCharCode = number - interval - - append(originalCharCode.toChar()) - } - } - } - - private fun dataAPI(data: String, idc: Int): UrlPayload { - // Step 1: Base64 decode the input - val compressedBytes = Base64.decode(data, Base64.NO_WRAP or Base64.NO_PADDING) - - // Step 2: Inflate (zlib decompress) - val inflater = Inflater() - inflater.setInput(compressedBytes) - val outputBuffer = ByteArray(512 * 1024) // 512 KB buffer, should be more than enough - val decompressedLength = inflater.inflate(outputBuffer) - inflater.end() - - val inflated = String(outputBuffer, 0, decompressedLength) - - // Step 3: Remove trailing hex string and reverse - val hexIdc = idc.toString(16) - val cleaned = inflated.removeSuffix(hexIdc) - val reversed = cleaned.reversed() - - // Step 4: Base64 decode and parse JSON - val finalJsonStr = String(Base64.decode(reversed, Base64.DEFAULT)) - - return finalJsonStr.parseAs() - } - - override fun pageListParse(response: Response): List { - val document = response.asJsoup() - val packedScript = document.selectFirst("script:containsData(h,u,n,t,e,r)")!!.data() - - val unpackedScript = decodeHunter(packedScript) - val parametersRegex = Regex("""sml = '([^']+)';\n?.*var sme = '([^']+)'""") - - val (sml, sme) = parametersRegex.find(unpackedScript)?.destructured - ?: error("Failed to extract parameters from script.") - - val chapterInfoRegex = Regex("""const idc = (\d+)""") - val (chapterId) = chapterInfoRegex.find(packedScript)?.destructured - ?: error("Failed to extract chapter ID.") - - val mediaType = "application/json; charset=UTF-8".toMediaType() - val requestBody = """{"a":"$sme","b":"$sml"}""" - - val documentUrl = document.baseUri().toHttpUrl() - - val pageListRequest = POST( - "$baseUrl/api/lel/$chapterId.json", - headers.newBuilder() - .add("Origin", "${documentUrl.scheme}://${documentUrl.host}") - .add("Referer", documentUrl.toString()) - .add("Token", "yf") - .build(), - requestBody.toRequestBody(mediaType), - ) - - val lelResponse = client.newBuilder().cookieJar(CookieJar.NO_COOKIES).build() - .newCall(pageListRequest).execute().use { response -> - if (!response.isSuccessful) { error("Unexpected error while fetching lel.") } - dataAPI(response.body.string(), chapterId.toInt()) - } - - return lelResponse.generateImageUrls().map { Page(it.first, imageUrl = it.second) } - } - - // Page - override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() - - override fun imageRequest(page: Page): Request { - val imgHeaders = headers.newBuilder() - .add("Origin", baseUrl) - .build() - - return GET(page.imageUrl!!, imgHeaders) - } -} diff --git a/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanMangaDto.kt b/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanMangaDto.kt deleted file mode 100644 index 234af3a8c..000000000 --- a/src/fr/scanmanga/src/eu/kanade/tachiyomi/extension/fr/scanmanga/ScanMangaDto.kt +++ /dev/null @@ -1,41 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.scanmanga - -import kotlinx.serialization.Serializable - -@Serializable -class Page( - val f: String, // filename - val e: String, // extension -) - -@Serializable -class UrlPayload( - private val dN: String, - private val s: String, - private val v: String, - private val c: String, - private val p: Map, -) { - fun generateImageUrls(): List> { - val baseUrl = "https://$dN/$s/$v/$c" - return p.entries - .mapNotNull { (key, page) -> - key.toIntOrNull()?.let { pageIndex -> - pageIndex to "$baseUrl/${page.f}.${page.e}" - } - } - .sortedBy { it.first } // sort by page index - } -} - -@Serializable -class MangaSearchDto( - val title: List?, -) - -@Serializable -class MangaItemDto( - val nom_match: String, - val url: String, - val image: String, -) diff --git a/src/fr/starboundscans/build.gradle b/src/fr/starboundscans/build.gradle deleted file mode 100644 index f4aaf426b..000000000 --- a/src/fr/starboundscans/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Starbound Scans' - extClass = '.StarboundScans' - themePkg = 'madara' - baseUrl = 'https://starboundscans.com' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/fr/starboundscans/res/mipmap-hdpi/ic_launcher.png b/src/fr/starboundscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ae8e1557c..000000000 Binary files a/src/fr/starboundscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/starboundscans/res/mipmap-mdpi/ic_launcher.png b/src/fr/starboundscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index f49f6d2ac..000000000 Binary files a/src/fr/starboundscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/starboundscans/res/mipmap-xhdpi/ic_launcher.png b/src/fr/starboundscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dce67a556..000000000 Binary files a/src/fr/starboundscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/starboundscans/res/mipmap-xxhdpi/ic_launcher.png b/src/fr/starboundscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a29d96e48..000000000 Binary files a/src/fr/starboundscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/starboundscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/fr/starboundscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 4d4a40d30..000000000 Binary files a/src/fr/starboundscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt b/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt deleted file mode 100644 index 95ba09594..000000000 --- a/src/fr/starboundscans/src/eu/kanade/tachiyomi/extension/fr/starboundscans/StarboundScans.kt +++ /dev/null @@ -1,80 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.starboundscans - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.util.asJsoup -import keiyoushi.utils.tryParse -import okhttp3.Headers -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale - -class StarboundScans : Madara( - "Starbound Scans", - "https://starboundscans.com", - "fr", - dateFormat = SimpleDateFormat("d MMMM yyyy", Locale.FRENCH), -) { - override val useNewChapterEndpoint = true - override val useLoadMoreRequest = LoadMoreStrategy.Never - override val versionId = 2 - - override val client = network.cloudflareClient - - override fun headersBuilder(): Headers.Builder = super.headersBuilder() - .add("Referer", "$baseUrl/") - - override val mangaDetailsSelectorTitle = "h1" - override val mangaDetailsSelectorThumbnail = ".project-cover" - override val mangaDetailsSelectorDescription = ".card-body .black-orion-article-content p" - override val mangaDetailsSelectorStatus = ".info-item:contains(Statut) .info-value" - override val mangaDetailsSelectorAuthor = ".info-item:contains(Auteur) a" - override val mangaDetailsSelectorArtist = ".info-item:contains(Auteur) a" - override val mangaDetailsSelectorGenre = ".info-item:contains(Genres) .genre-tag" - - private val customDateFormat = SimpleDateFormat("d MMMM yyyy", Locale.FRENCH) - - override fun chapterListParse(response: Response): List { - val document = response.asJsoup() - return document.select(".chapter-item").mapNotNull { element -> - val link = element.selectFirst("a.chapter-link")!! - val href = link.attr("abs:href") - - if (href == "#" || href.isEmpty() || element.text().contains("VIP") || element.text().contains("Réservé")) { - return@mapNotNull null - } - - SChapter.create().apply { - val urlWithSuffix = if (href.contains("?")) { - "$href&style=list" - } else { - "$href?style=list" - } - setUrlWithoutDomain(urlWithSuffix) - - val rawName = link.selectFirst("h3")!!.text() - name = rawName.replace("NEW", "").trim() - - val dateText = element.selectFirst(".chapter-meta")!!.text() - date_upload = customDateFormat.tryParse(dateText) - } - } - } - - private fun Element.imgAttr(): String { - return when { - hasAttr("data-src") -> attr("abs:data-src") - else -> attr("abs:src") - } - } - - override fun pageListParse(document: Document): List { - return document.select("img.wp-manga-chapter-img").mapIndexed { index, element -> - val imageUrl = element.imgAttr() - Page(index, url = document.location(), imageUrl = imageUrl) - } - } -} diff --git a/src/id/comicsekai/build.gradle b/src/id/comicsekai/build.gradle deleted file mode 100644 index 964ea3fad..000000000 --- a/src/id/comicsekai/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'Comicsekai' - extClass = '.Comicsekai' - themePkg = 'mangathemesia' - baseUrl = 'http://www.comicsekai.com' - overrideVersionCode = 0 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/comicsekai/src/eu/kanade/tachiyomi/extension/id/comicsekai/Comicsekai.kt b/src/id/comicsekai/src/eu/kanade/tachiyomi/extension/id/comicsekai/Comicsekai.kt deleted file mode 100644 index 1de0e6c77..000000000 --- a/src/id/comicsekai/src/eu/kanade/tachiyomi/extension/id/comicsekai/Comicsekai.kt +++ /dev/null @@ -1,27 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.comicsekai - -import android.util.Base64 -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.source.model.Page -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonPrimitive -import org.jsoup.nodes.Document - -class Comicsekai : MangaThemesia("Comicsekai", "http://www.comicsekai.com", "id") { - override fun pageListParse(document: Document): List { - // "ts_reader.run({" in base64 - val script = document.selectFirst("script[src^=data:text/javascript;base64,dHNfcmVhZGVyLnJ1bih7]") - ?: return super.pageListParse(document) - val data = Base64.decode(script.attr("src").substringAfter("base64,"), Base64.DEFAULT).toString(Charsets.UTF_8) - val imageListJson = JSON_IMAGE_LIST_REGEX.find(data)?.destructured?.toList()?.get(0).orEmpty() - val imageList = try { - json.parseToJsonElement(imageListJson).jsonArray - } catch (_: IllegalArgumentException) { - emptyList() - } - - return imageList.mapIndexed { i, jsonEl -> - Page(i, imageUrl = jsonEl.jsonPrimitive.content) - } - } -} diff --git a/src/id/katakomik/build.gradle b/src/id/katakomik/build.gradle deleted file mode 100644 index ed2e89047..000000000 --- a/src/id/katakomik/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'KataKomik' - extClass = '.KataKomik' - themePkg = 'mangathemesia' - baseUrl = 'https://katakomik.my.id' - overrideVersionCode = 1 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/katakomik/res/mipmap-hdpi/ic_launcher.png b/src/id/katakomik/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 54d840c4d..000000000 Binary files a/src/id/katakomik/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/katakomik/res/mipmap-mdpi/ic_launcher.png b/src/id/katakomik/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 15290866e..000000000 Binary files a/src/id/katakomik/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/katakomik/res/mipmap-xhdpi/ic_launcher.png b/src/id/katakomik/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index adee8a72e..000000000 Binary files a/src/id/katakomik/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/katakomik/res/mipmap-xxhdpi/ic_launcher.png b/src/id/katakomik/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index fb18b18d9..000000000 Binary files a/src/id/katakomik/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/katakomik/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/katakomik/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 1fd1dfe43..000000000 Binary files a/src/id/katakomik/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/katakomik/src/eu/kanade/tachiyomi/extension/id/katakomik/KataKomik.kt b/src/id/katakomik/src/eu/kanade/tachiyomi/extension/id/katakomik/KataKomik.kt deleted file mode 100644 index eb14d3b3f..000000000 --- a/src/id/katakomik/src/eu/kanade/tachiyomi/extension/id/katakomik/KataKomik.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.katakomik - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class KataKomik : MangaThemesia("KataKomik", "https://katakomik.my.id", "id") diff --git a/src/id/komiklovers/build.gradle b/src/id/komiklovers/build.gradle deleted file mode 100644 index eda7380b0..000000000 --- a/src/id/komiklovers/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Komik Lovers' - extClass = '.KomikLovers' - themePkg = 'mangathemesia' - baseUrl = 'https://komiklovers.com' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/komiklovers/src/eu/kanade/tachiyomi/extension/id/komiklovers/KomikLovers.kt b/src/id/komiklovers/src/eu/kanade/tachiyomi/extension/id/komiklovers/KomikLovers.kt deleted file mode 100644 index 8b502ce7c..000000000 --- a/src/id/komiklovers/src/eu/kanade/tachiyomi/extension/id/komiklovers/KomikLovers.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.komiklovers - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class KomikLovers : MangaThemesia( - "Komik Lovers", - "https://komiklovers.com", - "id", - "/komik", -) { - override val hasProjectPage = true -} diff --git a/src/id/mangakyo/build.gradle b/src/id/mangakyo/build.gradle deleted file mode 100644 index be69380d0..000000000 --- a/src/id/mangakyo/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'Mangakyo' - extClass = '.Mangakyo' - themePkg = 'mangathemesia' - baseUrl = 'https://mangakyo.vip' - overrideVersionCode = 4 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/mangakyo/res/mipmap-hdpi/ic_launcher.png b/src/id/mangakyo/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 88e9a2170..000000000 Binary files a/src/id/mangakyo/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangakyo/res/mipmap-mdpi/ic_launcher.png b/src/id/mangakyo/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 06f89e6ca..000000000 Binary files a/src/id/mangakyo/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangakyo/res/mipmap-xhdpi/ic_launcher.png b/src/id/mangakyo/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index cac62f053..000000000 Binary files a/src/id/mangakyo/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangakyo/res/mipmap-xxhdpi/ic_launcher.png b/src/id/mangakyo/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a42b9cffe..000000000 Binary files a/src/id/mangakyo/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangakyo/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/mangakyo/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 0061eafe5..000000000 Binary files a/src/id/mangakyo/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangakyo/src/eu/kanade/tachiyomi/extension/id/mangakyo/Mangakyo.kt b/src/id/mangakyo/src/eu/kanade/tachiyomi/extension/id/mangakyo/Mangakyo.kt deleted file mode 100644 index 363174e3b..000000000 --- a/src/id/mangakyo/src/eu/kanade/tachiyomi/extension/id/mangakyo/Mangakyo.kt +++ /dev/null @@ -1,26 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.mangakyo - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient -import java.text.SimpleDateFormat -import java.util.Locale - -class Mangakyo : MangaThemesia( - "Mangakyo", - "https://mangakyo.vip", - "id", - "/komik", - SimpleDateFormat("MMM d, yyyy", Locale("id")), -) { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) - .build() - - override val seriesTitleSelector = ".ts-breadcrumb li:last-child span" - override val seriesAuthorSelector = ".infotable tr:contains(Pengarang) td:last-child" - override val seriesDescriptionSelector = ".entry-content[itemprop=description] p:not(:contains(melapor ke fanspage))" - override val seriesAltNameSelector = ".infotable tr:contains(Alternatif) td:last-child" - override val seriesTypeSelector = ".infotable tr:contains(Tipe) td:last-child" -} diff --git a/src/id/mangayu/build.gradle b/src/id/mangayu/build.gradle deleted file mode 100644 index aa22d8c49..000000000 --- a/src/id/mangayu/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -ext { - extName = 'MangaYu' - extClass = '.MangaYu' - themePkg = 'mangathemesia' - baseUrl = 'https://mangayu.id' - overrideVersionCode = 0 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/mangayu/res/mipmap-hdpi/ic_launcher.png b/src/id/mangayu/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 1544e7f8e..000000000 Binary files a/src/id/mangayu/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangayu/res/mipmap-mdpi/ic_launcher.png b/src/id/mangayu/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 99644c10c..000000000 Binary files a/src/id/mangayu/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangayu/res/mipmap-xhdpi/ic_launcher.png b/src/id/mangayu/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index d97b6b8d7..000000000 Binary files a/src/id/mangayu/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangayu/res/mipmap-xxhdpi/ic_launcher.png b/src/id/mangayu/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index c891574d4..000000000 Binary files a/src/id/mangayu/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangayu/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/mangayu/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 8d20ea60d..000000000 Binary files a/src/id/mangayu/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangayu/src/eu/kanade/tachiyomi/extension/id/mangayu/MangaYu.kt b/src/id/mangayu/src/eu/kanade/tachiyomi/extension/id/mangayu/MangaYu.kt deleted file mode 100644 index 821ced8a5..000000000 --- a/src/id/mangayu/src/eu/kanade/tachiyomi/extension/id/mangayu/MangaYu.kt +++ /dev/null @@ -1,18 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.mangayu - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient -import java.text.SimpleDateFormat -import java.util.Locale - -class MangaYu : MangaThemesia( - "MangaYu", - "https://mangayu.id", - "id", - dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("id")), -) { - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(20, 5) - .build() -} diff --git a/src/id/masterkomik/build.gradle b/src/id/masterkomik/build.gradle deleted file mode 100644 index 2b6f9d4e8..000000000 --- a/src/id/masterkomik/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Tenshi.id' - extClass = '.TenshiId' - themePkg = 'mangathemesia' - baseUrl = 'https://01.tenshiku.asia' - overrideVersionCode = 7 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/masterkomik/res/mipmap-hdpi/ic_launcher.png b/src/id/masterkomik/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 4349665cb..000000000 Binary files a/src/id/masterkomik/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/masterkomik/res/mipmap-mdpi/ic_launcher.png b/src/id/masterkomik/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 6fc32d526..000000000 Binary files a/src/id/masterkomik/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/masterkomik/res/mipmap-xhdpi/ic_launcher.png b/src/id/masterkomik/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6e38f07f7..000000000 Binary files a/src/id/masterkomik/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/masterkomik/res/mipmap-xxhdpi/ic_launcher.png b/src/id/masterkomik/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 1cce10d9e..000000000 Binary files a/src/id/masterkomik/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/masterkomik/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/masterkomik/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 68f9b7861..000000000 Binary files a/src/id/masterkomik/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/masterkomik/src/eu/kanade/tachiyomi/extension/id/masterkomik/TenshiId.kt b/src/id/masterkomik/src/eu/kanade/tachiyomi/extension/id/masterkomik/TenshiId.kt deleted file mode 100644 index 98c4855af..000000000 --- a/src/id/masterkomik/src/eu/kanade/tachiyomi/extension/id/masterkomik/TenshiId.kt +++ /dev/null @@ -1,30 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.masterkomik - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient -import java.text.SimpleDateFormat -import java.util.Locale - -class TenshiId : MangaThemesia( - "Tenshi.id", - "https://01.tenshiku.asia", - "id", - dateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale("id", "ID")), - mangaUrlDirectory = "/komik", -) { - - // MasterKomik changed to Tenshi.id - override val id: Long = 3146720114171452298 - - override val seriesArtistSelector: String = ".imptdt-artist-sub-2 i .js-button-custom" - override val seriesAuthorSelector: String = ".imptdt-author-sub-2 i .js-button-custom" - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(4) - .build() - - override val projectPageString = "/project-list" - - override val hasProjectPage = true -} diff --git a/src/id/pojokmanga/build.gradle b/src/id/pojokmanga/build.gradle deleted file mode 100644 index 3f2d74fd5..000000000 --- a/src/id/pojokmanga/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Pojok Manga' - extClass = '.PojokManga' - themePkg = 'madara' - baseUrl = 'https://pojokmanga.info' - overrideVersionCode = 7 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/pojokmanga/res/mipmap-hdpi/ic_launcher.png b/src/id/pojokmanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 7f0a70826..000000000 Binary files a/src/id/pojokmanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/pojokmanga/res/mipmap-mdpi/ic_launcher.png b/src/id/pojokmanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 56d5a240a..000000000 Binary files a/src/id/pojokmanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/pojokmanga/res/mipmap-xhdpi/ic_launcher.png b/src/id/pojokmanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e7b5ccde2..000000000 Binary files a/src/id/pojokmanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/pojokmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/id/pojokmanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 77f3a22de..000000000 Binary files a/src/id/pojokmanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/pojokmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/pojokmanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index e282e9a1b..000000000 Binary files a/src/id/pojokmanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/pojokmanga/src/eu/kanade/tachiyomi/extension/id/pojokmanga/PojokManga.kt b/src/id/pojokmanga/src/eu/kanade/tachiyomi/extension/id/pojokmanga/PojokManga.kt deleted file mode 100644 index 02a09b47c..000000000 --- a/src/id/pojokmanga/src/eu/kanade/tachiyomi/extension/id/pojokmanga/PojokManga.kt +++ /dev/null @@ -1,106 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.pojokmanga - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import eu.kanade.tachiyomi.source.model.Filter -import eu.kanade.tachiyomi.source.model.FilterList -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.OkHttpClient -import okhttp3.Request -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.concurrent.TimeUnit - -class PojokManga : Madara("Pojok Manga", "https://pojokmanga.info", "id", SimpleDateFormat("MMM dd, yyyy", Locale.US)) { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(10, 2, TimeUnit.SECONDS) - .build() - - override val useNewChapterEndpoint = true - - override val mangaSubString = "komik" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - var url = "$baseUrl/${searchPage(page)}".toHttpUrl().newBuilder() - url.addQueryParameter("s", query) - url.addQueryParameter("post_type", "wp-manga") - filters.forEach { filter -> - when (filter) { - is AuthorFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("author", filter.state) - } - } - is ArtistFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("artist", filter.state) - } - } - is YearFilter -> { - if (filter.state.isNotBlank()) { - url.addQueryParameter("release", filter.state) - } - } - is StatusFilter -> { - filter.state.forEach { - if (it.state) { - url.addQueryParameter("status[]", it.id) - } - } - } - is OrderByFilter -> { - if (filter.state != 0) { - url.addQueryParameter("m_orderby", filter.toUriPart()) - } - } - is AdultContentFilter -> { - url.addQueryParameter("adult", filter.toUriPart()) - } - is GenreConditionFilter -> { - url.addQueryParameter("op", filter.toUriPart()) - } - is GenreList -> { - filter.state - .filter { it.state } - .let { list -> - if (list.isNotEmpty()) { list.forEach { genre -> url.addQueryParameter("genre[]", genre.id) } } - } - } - is ProjectFilter -> { - if (filter.toUriPart() == "project-filter-on") { - url = "$baseUrl/project/page/$page".toHttpUrl().newBuilder() - } - } - else -> {} - } - } - return GET(url.build(), headers) - } - - override fun searchMangaSelector() = "div.c-tabs-item__content, div.page-item-detail" - - override val mangaDetailsSelectorTag = "#toNotBeUsed" - - private class ProjectFilter : UriPartFilter( - "Filter Project", - arrayOf( - Pair("Show all manga", ""), - Pair("Show only project manga", "project-filter-on"), - ), - ) - - override fun getFilterList(): FilterList { - val filters = super.getFilterList().toMutableList() - - filters += listOf( - Filter.Separator(), - Filter.Header("NOTE: cant be used with other filter!"), - Filter.Header("$name Project List page"), - ProjectFilter(), - ) - - return FilterList(filters) - } -} diff --git a/src/id/tukangkomik/build.gradle b/src/id/tukangkomik/build.gradle deleted file mode 100644 index ee16eb9a5..000000000 --- a/src/id/tukangkomik/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'TukangKomik' - extClass = '.TukangKomik' - themePkg = 'mangathemesia' - baseUrl = 'https://tukangkomik.co' - overrideVersionCode = 2 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/tukangkomik/res/mipmap-hdpi/ic_launcher.png b/src/id/tukangkomik/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 5442ca993..000000000 Binary files a/src/id/tukangkomik/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/tukangkomik/res/mipmap-mdpi/ic_launcher.png b/src/id/tukangkomik/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 99d84e075..000000000 Binary files a/src/id/tukangkomik/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/tukangkomik/res/mipmap-xhdpi/ic_launcher.png b/src/id/tukangkomik/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 6aa4af65d..000000000 Binary files a/src/id/tukangkomik/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/tukangkomik/res/mipmap-xxhdpi/ic_launcher.png b/src/id/tukangkomik/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index eccc68c1a..000000000 Binary files a/src/id/tukangkomik/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/tukangkomik/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/tukangkomik/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c94a19b5a..000000000 Binary files a/src/id/tukangkomik/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/tukangkomik/src/eu/kanade/tachiyomi/extension/id/tukangkomik/TukangKomik.kt b/src/id/tukangkomik/src/eu/kanade/tachiyomi/extension/id/tukangkomik/TukangKomik.kt deleted file mode 100644 index fd721f59c..000000000 --- a/src/id/tukangkomik/src/eu/kanade/tachiyomi/extension/id/tukangkomik/TukangKomik.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.tukangkomik - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class TukangKomik : MangaThemesia("TukangKomik", "https://tukangkomik.co", "id") diff --git a/src/id/yuramanga/build.gradle b/src/id/yuramanga/build.gradle deleted file mode 100644 index 8a3bfdfcd..000000000 --- a/src/id/yuramanga/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'YuraManga' - extClass = '.YuraManga' - themePkg = 'zmanga' - baseUrl = 'https://www.yuramanga.my.id' - overrideVersionCode = 38 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/yuramanga/res/mipmap-hdpi/ic_launcher.png b/src/id/yuramanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 5fef0b03d..000000000 Binary files a/src/id/yuramanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/yuramanga/res/mipmap-mdpi/ic_launcher.png b/src/id/yuramanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 301dd3297..000000000 Binary files a/src/id/yuramanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/yuramanga/res/mipmap-xhdpi/ic_launcher.png b/src/id/yuramanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 2c43739e9..000000000 Binary files a/src/id/yuramanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/yuramanga/res/mipmap-xxhdpi/ic_launcher.png b/src/id/yuramanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 3fb171d26..000000000 Binary files a/src/id/yuramanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/yuramanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/yuramanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 3f0ad40a6..000000000 Binary files a/src/id/yuramanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/yuramanga/src/eu/kanade/tachiyomi/extension/id/yuramanga/YuraManga.kt b/src/id/yuramanga/src/eu/kanade/tachiyomi/extension/id/yuramanga/YuraManga.kt deleted file mode 100644 index 65be0f41f..000000000 --- a/src/id/yuramanga/src/eu/kanade/tachiyomi/extension/id/yuramanga/YuraManga.kt +++ /dev/null @@ -1,34 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.yuramanga - -import eu.kanade.tachiyomi.multisrc.zmanga.ZManga -import eu.kanade.tachiyomi.source.model.Page -import org.jsoup.nodes.Document -import java.io.IOException -import java.text.SimpleDateFormat -import java.util.Locale - -class YuraManga : ZManga( - "YuraManga", - "https://www.yuramanga.my.id", - "id", - SimpleDateFormat("dd/MM/yyyy", Locale.ROOT), -) { - // Moved from Madara to ZManga - override val versionId = 3 - - override val client = super.client.newBuilder() - .addInterceptor { chain -> - val response = chain.proceed(chain.request()) - if (response.request.url.pathSegments.contains("login")) { - throw IOException("Please log in to the WebView to continue") - } - response - } - .build() - - override fun pageListParse(document: Document): List { - return document.select("div.reader-area img.lazyload").mapIndexed { i, img -> - Page(i, "", img.attr("abs:data-src")) - } - } -} diff --git a/src/pt/valkyriescan/build.gradle b/src/pt/valkyriescan/build.gradle deleted file mode 100644 index 2668f51d7..000000000 --- a/src/pt/valkyriescan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Valkyrie Scan' - extClass = '.ValkyrieScan' - themePkg = 'madara' - baseUrl = 'https://valkyriescan.com' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/valkyriescan/src/eu/kanade/tachiyomi/extension/pt/valkyriescan/ValkyrieScan.kt b/src/pt/valkyriescan/src/eu/kanade/tachiyomi/extension/pt/valkyriescan/ValkyrieScan.kt deleted file mode 100644 index ca30cc10d..000000000 --- a/src/pt/valkyriescan/src/eu/kanade/tachiyomi/extension/pt/valkyriescan/ValkyrieScan.kt +++ /dev/null @@ -1,24 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.valkyriescan - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.interceptor.rateLimit -import okhttp3.OkHttpClient -import java.text.SimpleDateFormat -import java.util.Locale -import java.util.concurrent.TimeUnit - -class ValkyrieScan : Madara( - "Valkyrie Scan", - "https://valkyriescan.com", - "pt-BR", - SimpleDateFormat("dd/MM/yyyy", Locale("pt", "BR")), -) { - - override val client: OkHttpClient = super.client.newBuilder() - .rateLimit(1, 2, TimeUnit.SECONDS) - .build() - - override val useNewChapterEndpoint = true - - override val popularMangaUrlSelector = "div.post-title a:not([target])" -}