diff --git a/multisrc/overrides/foolslide/ajianoscantrad/src/AjiaNoScantrad.kt b/multisrc/overrides/foolslide/ajianoscantrad/src/AjiaNoScantrad.kt deleted file mode 100644 index 0a32b24d0..000000000 --- a/multisrc/overrides/foolslide/ajianoscantrad/src/AjiaNoScantrad.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.ajianoscantrad - -import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide - -class AjiaNoScantrad : FoolSlide("Ajia no Scantrad", "https://www.ajianoscantrad.fr", "fr", "/reader") diff --git a/multisrc/overrides/foolslide/fallenworldorder/src/FallenWorldOrder.kt b/multisrc/overrides/foolslide/fallenworldorder/src/FallenWorldOrder.kt deleted file mode 100644 index 5d7a24700..000000000 --- a/multisrc/overrides/foolslide/fallenworldorder/src/FallenWorldOrder.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.it.fallenworldorder - -import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide - -class FallenWorldOrder : FoolSlide("Fall World Reader", "https://faworeader.altervista.org", "it", "/slide") diff --git a/multisrc/overrides/foolslide/storminheaven/src/StormInHeaven.kt b/multisrc/overrides/foolslide/storminheaven/src/StormInHeaven.kt deleted file mode 100644 index 2072fc19a..000000000 --- a/multisrc/overrides/foolslide/storminheaven/src/StormInHeaven.kt +++ /dev/null @@ -1,5 +0,0 @@ -package eu.kanade.tachiyomi.extension.it.storminheaven - -import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide - -class StormInHeaven : FoolSlide("Storm in Heaven", "https://www.storm-in-heaven.net", "it", "/reader-sih") diff --git a/multisrc/overrides/madara/atmsubs/src/ATMSubs.kt b/multisrc/overrides/madara/atmsubs/src/ATMSubs.kt deleted file mode 100644 index efd6dc9f5..000000000 --- a/multisrc/overrides/madara/atmsubs/src/ATMSubs.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.atmsubs - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class ATMSubs : Madara("ATM-Subs", "https://atm-subs.fr", "fr", SimpleDateFormat("d MMMM yyyy", Locale("fr"))) diff --git a/multisrc/overrides/madara/doujinyosh/src/DoujinYosh.kt b/multisrc/overrides/madara/doujinyosh/src/DoujinYosh.kt deleted file mode 100644 index 24f8eefe0..000000000 --- a/multisrc/overrides/madara/doujinyosh/src/DoujinYosh.kt +++ /dev/null @@ -1,96 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.doujinyosh - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class DoujinYosh : Madara("DoujinYosh", "https://doujinyosh.work", "id") { - // source issue, doing this limits results to one page but not doing it returns no results at all - override fun searchPage(page: Int) = "" - override fun getGenreList() = listOf( - Genre("4 Koma", "4koma"), - Genre("Adult", "adult"), - Genre("Ahegao", "ahegao"), - Genre("Anal", "anal"), - Genre("Animal", "animal"), - Genre("Artist CG", "artist-cg"), - Genre("Big Breast", "big-breast"), - Genre("Big Penis", "big-penis"), - Genre("Bikini", "bikini"), - Genre("Black Mail", "black-mail"), - Genre("Blowjob", "blowjob"), - Genre("Body Swap", "body-swap"), - Genre("Bondage", "bondage"), - Genre("Cheating", "cheating"), - Genre("Crossdressing", "crossdressing"), - Genre("DILF", "dilf"), - Genre("Dark Skin", "dark-skin"), - Genre("Defloration", "defloration"), - Genre("Demon Girl", "demon-girl"), - Genre("Doujin", "doujin"), - Genre("Drugs", "drugs"), - Genre("Drunk", "drunk"), - Genre("Elf", "elf"), - Genre("Famele Only", "famele-only"), - Genre("Femdom", "femdom"), - Genre("Filming", "filming"), - Genre("Footjob", "footjob"), - Genre("Full Color", "full-color"), - Genre("Furry", "furry"), - Genre("Futanari", "futanari"), - Genre("Glasses", "glasses"), - Genre("Gore", "gore"), - Genre("Group", "group"), - Genre("Gyaru", "gyaru"), - Genre("Harem", "harem"), - Genre("Humiliation", "humiliation"), - Genre("Impregnation", "impregnation"), - Genre("Incest", "incest"), - Genre("Inverted Nipples", "inverted-nipples"), - Genre("Kemomimi", "kemomimi"), - Genre("Lactation", "lactation"), - Genre("Loli", "loli"), - Genre("Lolipai", "lolipai"), - Genre("MILF", "milf"), - Genre("Maid", "maid"), - Genre("Male Only", "male-only"), - Genre("Miko", "miko"), - Genre("Mind Break", "mind-break"), - Genre("Mind Control", "mind-control"), - Genre("Monster", "monster"), - Genre("Monster Girl", "monster-girl"), - Genre("Multi-Work Series", "multi-work-series"), - Genre("Nakadashi", "nakadashi"), - Genre("Netorare", "netorare"), - Genre("Otona (R18)", "otona"), - Genre("Oyakodon", "oyakodon"), - Genre("Paizuri", "paizuri"), - Genre("Pantyhose", "pantyhose"), - Genre("Pregnant", "pregnant"), - Genre("Prostitution", "prostitution"), - Genre("Rape", "rape"), - Genre("School Uniform", "school-uniform"), - Genre("Sex Toy", "sex-toy"), - Genre("Shota", "shota"), - Genre("Sister", "sister"), - Genre("Sleep", "sleep"), - Genre("Slime", "slime"), - Genre("Small Breast", "small-breast"), - Genre("Sole Female", "sole-female"), - Genre("Sole Male", "sole-male"), - Genre("Stocking", "stocking"), - Genre("Story Arc", "story-arc"), - Genre("Sweating", "sweating"), - Genre("Swimsuit", "swimsuit"), - Genre("Teacher", "teacher"), - Genre("Tentacles", "tentacles"), - Genre("Tomboy", "tomboy"), - Genre("Tomgirl", "tomgirl"), - Genre("Torture", "torture"), - Genre("Twins", "twins"), - Genre("Virginity", "virginity"), - Genre("Webtoon", "webtoon"), - Genre("XRay", "xray"), - Genre("Yandere", "yandere"), - Genre("Yaoi", "yaoi"), - Genre("Yuri", "yuri") - ) -} diff --git a/multisrc/overrides/madara/justforfun/src/JustForFun.kt b/multisrc/overrides/madara/justforfun/src/JustForFun.kt deleted file mode 100644 index 07ac3db1f..000000000 --- a/multisrc/overrides/madara/justforfun/src/JustForFun.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.ru.justforfun - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class JustForFun : Madara( - "Just For Fun", - "https://just-for-fun.ru", - "ru", - dateFormat = SimpleDateFormat("yy.MM.dd", Locale.US) -) \ No newline at end of file diff --git a/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt b/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt deleted file mode 100644 index 6b05165b0..000000000 --- a/multisrc/overrides/madara/mangaarabonline/src/MangaArabOnline.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.ar.mangaarabonline - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class MangaArabOnline : Madara("Manga Arab Online مانجا عرب اون لاين", "https://mangaarabonline.com", "ar", SimpleDateFormat("MMM d, yyyy", Locale.forLanguageTag("ar"))) diff --git a/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt b/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt deleted file mode 100644 index 6507f09b6..000000000 --- a/multisrc/overrides/madara/mangazukiclub/src/MangazukiClubFactory.kt +++ /dev/null @@ -1,14 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.mangazukiclub - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.source.Source -import eu.kanade.tachiyomi.source.SourceFactory - -class MangazukiClubFactory : SourceFactory { - override fun createSources(): List = listOf( - MangazukiClubJP(), - MangazukiClubKO(), - ) -} -class MangazukiClubJP : Madara("Mangazuki.club", "https://mangazuki.club", "ja") -class MangazukiClubKO : Madara("Mangazuki.club", "https://mangazuki.club", "ko") diff --git a/multisrc/overrides/madara/mangazukionline/src/MangazukiOnline.kt b/multisrc/overrides/madara/mangazukionline/src/MangazukiOnline.kt deleted file mode 100644 index 307c0bc03..000000000 --- a/multisrc/overrides/madara/mangazukionline/src/MangazukiOnline.kt +++ /dev/null @@ -1,8 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangazukionline - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import okhttp3.OkHttpClient - -class MangazukiOnline : Madara("Mangazuki.online", "http://mangazukinew.online", "en") { - override val client: OkHttpClient = super.client.newBuilder().followRedirects(true).build() -} diff --git a/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt b/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt deleted file mode 100644 index ee913c34d..000000000 --- a/multisrc/overrides/madara/nazarickscans/src/NazarickScans.kt +++ /dev/null @@ -1,11 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.nazarickscans - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.GET - -class NazarickScans : Madara("Nazarick Scans", "https://nazarickscans.com", "en") { - override fun popularMangaRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers) - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/manga/page/$page/?m_orderby=trending", headers) - override fun popularMangaNextPageSelector(): String? = null - override fun latestUpdatesNextPageSelector(): String? = null -} diff --git a/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt b/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt deleted file mode 100644 index 3f71ca77b..000000000 --- a/multisrc/overrides/madara/spookyscanlations/src/SpookyScanlations.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.spookyscanlations - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class SpookyScanlations : Madara("Spooky Scanlations", "https://spookyscanlations.xyz", "es", SimpleDateFormat("MMMM dd, yyyy", Locale("es"))) diff --git a/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt b/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt deleted file mode 100644 index d2b6adf42..000000000 --- a/multisrc/overrides/madara/toonpoint/src/ToonPoint.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.toonpoint - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class ToonPoint : Madara("ToonPoint", "https://toonpoint.com", "en") { - override val userAgentRandomizer = "" -} diff --git a/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt b/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt deleted file mode 100644 index 9292601e3..000000000 --- a/multisrc/overrides/madara/tsubakinoscan/src/TsubakiNoScan.kt +++ /dev/null @@ -1,12 +0,0 @@ -package eu.kanade.tachiyomi.extension.fr.tsubakinoscan - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class TsubakiNoScan : Madara( - "Tsubaki No Scan", - "https://tsubakinoscan.com", - "fr", - dateFormat = SimpleDateFormat("dd/MM/yy", Locale.US) -) diff --git a/multisrc/overrides/madara/wescans/src/WeScans.kt b/multisrc/overrides/madara/wescans/src/WeScans.kt deleted file mode 100644 index eafdfc340..000000000 --- a/multisrc/overrides/madara/wescans/src/WeScans.kt +++ /dev/null @@ -1,15 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.wescans - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.FilterList -import okhttp3.Request - -class WeScans : Madara("WeScans", "https://wescans.xyz", "en") { - override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/manhua/manga/?m_orderby=views", headers) - override fun popularMangaNextPageSelector(): String? = null - override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/manhua/manga/?m_orderby=latest", headers) - override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/manhua/?s=$query&post_type=wp-manga") - override fun searchMangaNextPageSelector(): String? = null - override fun getFilterList(): FilterList = FilterList() -} diff --git a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/wpcomics/comiclatest/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 20242bb2b..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/wpcomics/comiclatest/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 6955bf125..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 61836be19..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 761bd69e2..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index a1bd16cdf..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/res/web_hi_res_512.png b/multisrc/overrides/wpcomics/comiclatest/res/web_hi_res_512.png deleted file mode 100644 index 278bbf254..000000000 Binary files a/multisrc/overrides/wpcomics/comiclatest/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/wpcomics/comiclatest/src/ComicLatest.kt b/multisrc/overrides/wpcomics/comiclatest/src/ComicLatest.kt deleted file mode 100644 index b9ced9d8c..000000000 --- a/multisrc/overrides/wpcomics/comiclatest/src/ComicLatest.kt +++ /dev/null @@ -1,75 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.comiclatest - -import eu.kanade.tachiyomi.multisrc.wpcomics.WPComics -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.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.util.asJsoup -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale - -class ComicLatest : WPComics("ComicLatest", "https://comiclatest.com", "en", SimpleDateFormat("MM/dd/yyyy", Locale.US), null) { - // Hot only has one page - override val popularPath = "popular-comics" - - override fun popularMangaFromElement(element: Element) = SManga.create().apply { - element.select("h3 a").let { - title = it.text() - setUrlWithoutDomain(it.attr("href")) - } - thumbnail_url = element.select("img").attr("data-original") - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - filters.forEach { filter -> - when (filter) { - is AuthorFilter -> { - val author = filter.state.trim().replace(" ", "-").toLowerCase() - return GET("$baseUrl/author/$author?page=$page", headers) - } - } - } - - return GET("$baseUrl/search?keyword=$query&page=$page", headers) - } - - override fun searchMangaSelector() = "div.item div.box_img > a[title]" - - // For whatever reason, errors with author search if this isn't overridden - override fun searchMangaFromElement(element: Element): SManga { - return SManga.create().apply { - title = element.attr("title") - setUrlWithoutDomain(element.attr("href")) - } - } - - override fun chapterListParse(response: Response): List { - val chapters = mutableListOf() - - fun parseChapters(document: Document) { - document.select(chapterListSelector()).map { chapters.add(chapterFromElement(it)) } - document.select("ul.pagination a[rel=next]").firstOrNull()?.let { a -> - parseChapters(client.newCall(GET(a.attr("abs:href"), headers)).execute().asJsoup()) - } - } - - parseChapters(response.asJsoup()) - return chapters - } - - override fun pageListRequest(chapter: SChapter) = GET("$baseUrl${chapter.url}/all", headers) - - private class AuthorFilter : Filter.Text("Author") - - override fun getFilterList() = FilterList( - Filter.Header("NOTE: Cannot be used with search"), - Filter.Separator(), - AuthorFilter() - ) -} diff --git a/multisrc/overrides/wpmangastream/chiotaku/src/ChiOtaku.kt b/multisrc/overrides/wpmangastream/chiotaku/src/ChiOtaku.kt deleted file mode 100644 index e2cf88516..000000000 --- a/multisrc/overrides/wpmangastream/chiotaku/src/ChiOtaku.kt +++ /dev/null @@ -1,16 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.chiotaku - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import okhttp3.OkHttpClient -import java.util.concurrent.TimeUnit - -class ChiOtaku : WPMangaStream("ChiOtaku", "https://chiotaku.com", "id") { - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() -} diff --git a/multisrc/overrides/wpmangastream/komikgo/src/KomikGO.kt b/multisrc/overrides/wpmangastream/komikgo/src/KomikGO.kt deleted file mode 100644 index b1bc14b0d..000000000 --- a/multisrc/overrides/wpmangastream/komikgo/src/KomikGO.kt +++ /dev/null @@ -1,238 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.komikgo - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import eu.kanade.tachiyomi.source.model.Filter -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import java.util.concurrent.TimeUnit -import okhttp3.OkHttpClient - -class KomikGO : WPMangaStream("Komik GO", "https://komikgo.com", "id") { - // Formerly "Komik GO (WP Manga Stream)" - override val id = 1070674823324721554 - - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() - - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/page/$page?s&post_type=wp-manga&m_orderby=views", headers) - } - - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/page/$page?s&post_type=wp-manga&m_orderby=latest", headers) - } - - override fun popularMangaSelector() = "div.c-tabs-item__content" - - override fun popularMangaFromElement(element: Element): SManga { - val manga = SManga.create() - manga.thumbnail_url = element.select("div.tab-thumb > a > img").attr("data-src") - element.select("div.tab-thumb > a").first().let { - manga.setUrlWithoutDomain(it.attr("href")) - manga.title = it.attr("title") - } - return manga - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/page/$page".toHttpUrlOrNull()!!.newBuilder() - url.addQueryParameter("post_type", "wp-manga") - val pattern = "\\s+".toRegex() - val q = query.replace(pattern, "+") - if (query.isNotEmpty()) { - url.addQueryParameter("s", q) - } else { - url.addQueryParameter("s", "") - } - - var orderBy: String - - (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> - when (filter) { -// is Status -> url.addQueryParameter("manga_status", arrayOf("", "completed", "ongoing")[filter.state]) - is GenreListFilter -> { - val genreInclude = mutableListOf() - filter.state.forEach { - if (it.state == 1) { - genreInclude.add(it.id) - } - } - if (genreInclude.isNotEmpty()) { - genreInclude.forEach { genre -> - url.addQueryParameter("genre[]", genre) - } - } - } - is StatusList -> { - val statuses = mutableListOf() - filter.state.forEach { - if (it.state == 1) { - statuses.add(it.id) - } - } - if (statuses.isNotEmpty()) { - statuses.forEach { status -> - url.addQueryParameter("status[]", status) - } - } - } - - is SortBy -> { - orderBy = filter.toUriPart() - url.addQueryParameter("m_orderby", orderBy) - } - is TextField -> url.addQueryParameter(filter.key, filter.state) - } - } - - return GET(url.toString(), headers) - } - - override fun popularMangaNextPageSelector() = "#navigation-ajax" - - override fun mangaDetailsParse(document: Document): SManga { - val infoElement = document.select("div.site-content").first() - - val manga = SManga.create() - manga.author = infoElement.select("div.author-content")?.text() - manga.artist = infoElement.select("div.artist-content")?.text() - - val genres = mutableListOf() - infoElement.select("div.genres-content a").forEach { element -> - val genre = element.text() - genres.add(genre) - } - manga.genre = genres.joinToString(", ") - manga.status = parseStatus(infoElement.select("div.post-status > div:nth-child(2) div").text()) - - manga.description = document.select("div.description-summary")?.text() - manga.thumbnail_url = document.select("div.summary_image > a > img").attr("data-src") - - return manga - } - - override fun chapterListSelector() = "li.wp-manga-chapter" - - override fun chapterFromElement(element: Element): SChapter { - val urlElement = element.select("a").first() - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(urlElement.attr("href")) - chapter.name = urlElement.text() - chapter.date_upload = parseChapterDate(element.select("span.chapter-release-date i").text()) - return chapter - } - - override fun pageListParse(document: Document): List { - return document.select("div.reading-content * img").mapIndexed { i, img -> - Page(i, "", img.imgAttr()) - } - } - - private class TextField(name: String, val key: String) : Filter.Text(name) - - private class SortBy : UriPartFilter( - "Sort by", - arrayOf( - Pair("Relevance", ""), - Pair("Latest", "latest"), - Pair("A-Z", "alphabet"), - Pair("Rating", "rating"), - Pair("Trending", "trending"), - Pair("Most View", "views"), - Pair("New", "new-manga") - ) - ) - - private class Status(name: String, val id: String = name) : Filter.TriState(name) - private class StatusList(statuses: List) : Filter.Group("Status", statuses) - - override fun getFilterList() = FilterList( - TextField("Author", "author"), - TextField("Year", "release"), - SortBy(), - StatusList(getStatusList()), - GenreListFilter(getGenreList()) - ) - - private fun getStatusList() = listOf( - Status("Completed", "end"), - Status("Ongoing", "on-going"), - Status("Canceled", "canceled"), - Status("Onhold", "on-hold") - ) - - override fun getGenreList(): List = listOf( - Genre("Adventure", "Adventure"), - Genre("Action", "action"), - Genre("Adventure", "adventure"), - Genre("Cars", "cars"), - Genre("4-Koma", "4-koma"), - Genre("Comedy", "comedy"), - Genre("Completed", "completed"), - Genre("Cooking", "cooking"), - Genre("Dementia", "dementia"), - Genre("Demons", "demons"), - Genre("Doujinshi", "doujinshi"), - Genre("Drama", "drama"), - Genre("Ecchi", "ecchi"), - Genre("Fantasy", "fantasy"), - Genre("Game", "game"), - Genre("Gender Bender", "gender-bender"), - Genre("Harem", "harem"), - Genre("Historical", "historical"), - Genre("Horror", "horror"), - Genre("Isekai", "isekai"), - Genre("Josei", "josei"), - Genre("Kids", "kids"), - Genre("Magic", "magic"), - Genre("Manga", "manga"), - Genre("Manhua", "manhua"), - Genre("Manhwa", "manhwa"), - Genre("Martial Arts", "martial-arts"), - Genre("Mature", "mature"), - Genre("Mecha", "mecha"), - Genre("Military", "military"), - Genre("Music", "music"), - Genre("Mystery", "mystery"), - Genre("Old Comic", "old-comic"), - Genre("One Shot", "one-shot"), - Genre("Oneshot", "oneshot"), - Genre("Parodi", "parodi"), - Genre("Parody", "parody"), - Genre("Police", "police"), - Genre("Psychological", "psychological"), - Genre("Romance", "romance"), - Genre("Samurai", "samurai"), - Genre("School", "school"), - Genre("School Life", "school-life"), - Genre("Sci-Fi", "sci-fi"), - Genre("Seinen", "seinen"), - Genre("Shoujo", "shoujo"), - Genre("Shoujo Ai", "shoujo-ai"), - Genre("Shounen", "shounen"), - Genre("Shounen ai", "shounen-ai"), - Genre("Slice of Life", "slice-of-life"), - Genre("Sports", "sports"), - Genre("Super Power", "super-power"), - Genre("Supernatural", "supernatural"), - Genre("Thriller", "thriller"), - Genre("Tragedy", "tragedy"), - Genre("Vampire", "vampire"), - Genre("Webtoons", "webtoons"), - Genre("Yaoi", "yaoi"), - Genre("Yuri", "yuri") - ) -} diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 1a0ef3006..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 897179399..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5e757d10b..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index df42c7263..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 0b8da509e..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/res/web_hi_res_512.png b/multisrc/overrides/wpmangastream/komikindowpms/res/web_hi_res_512.png deleted file mode 100644 index 70368ee6c..000000000 Binary files a/multisrc/overrides/wpmangastream/komikindowpms/res/web_hi_res_512.png and /dev/null differ diff --git a/multisrc/overrides/wpmangastream/komikindowpms/src/KomikIndoWPMS.kt b/multisrc/overrides/wpmangastream/komikindowpms/src/KomikIndoWPMS.kt deleted file mode 100644 index 2d675ca6a..000000000 --- a/multisrc/overrides/wpmangastream/komikindowpms/src/KomikIndoWPMS.kt +++ /dev/null @@ -1,20 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.komikindowpms - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import java.util.concurrent.TimeUnit -import okhttp3.OkHttpClient - -class KomikIndoWPMS : WPMangaStream("Komik Indo", "https://www.komikindo.web.id", "id") { - // Formerly "Komik Indo (WP Manga Stream)" - override val id = 1481562643469779882 - - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() - -} diff --git a/multisrc/overrides/wpmangastream/komikru/src/KomikRu.kt b/multisrc/overrides/wpmangastream/komikru/src/KomikRu.kt deleted file mode 100644 index 7ee5cac0f..000000000 --- a/multisrc/overrides/wpmangastream/komikru/src/KomikRu.kt +++ /dev/null @@ -1,19 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.komikru - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import java.text.SimpleDateFormat -import java.util.Locale -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import java.util.concurrent.TimeUnit -import okhttp3.OkHttpClient - -class KomikRu : WPMangaStream("KomikRu", "https://komikru.com", "id", SimpleDateFormat("MMMM dd, yyyy", Locale.forLanguageTag("id"))) { - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() - -} diff --git a/multisrc/overrides/wpmangastream/mangap/src/MangaP.kt b/multisrc/overrides/wpmangastream/mangap/src/MangaP.kt deleted file mode 100644 index 5bd5139bd..000000000 --- a/multisrc/overrides/wpmangastream/mangap/src/MangaP.kt +++ /dev/null @@ -1,16 +0,0 @@ -package eu.kanade.tachiyomi.extension.ar.mangap - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import okhttp3.OkHttpClient -import java.util.concurrent.TimeUnit - -class MangaP : WPMangaStream("MangaP", "https://mangap.me", "ar") { - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() -} diff --git a/multisrc/overrides/wpmangastream/mangashiro/src/MangaShiro.kt b/multisrc/overrides/wpmangastream/mangashiro/src/MangaShiro.kt deleted file mode 100644 index ab16ace24..000000000 --- a/multisrc/overrides/wpmangastream/mangashiro/src/MangaShiro.kt +++ /dev/null @@ -1,16 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.mangashiro - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import okhttp3.OkHttpClient -import java.util.concurrent.TimeUnit - -class MangaShiro : WPMangaStream("MangaShiro", "https://mangashiro.co", "id") { - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() -} diff --git a/multisrc/overrides/wpmangastream/matakomik/src/Matakomik.kt b/multisrc/overrides/wpmangastream/matakomik/src/Matakomik.kt deleted file mode 100644 index 5c8be3260..000000000 --- a/multisrc/overrides/wpmangastream/matakomik/src/Matakomik.kt +++ /dev/null @@ -1,24 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.matakomik - -import eu.kanade.tachiyomi.multisrc.wpmangastream.WPMangaStream -import eu.kanade.tachiyomi.source.model.Page -import org.jsoup.nodes.Document -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -import java.util.concurrent.TimeUnit -import okhttp3.OkHttpClient - -class Matakomik : WPMangaStream("Matakomik", "https://matakomik.com", "id") { - private val rateLimitInterceptor = RateLimitInterceptor(4) - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .connectTimeout(10, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addNetworkInterceptor(rateLimitInterceptor) - .build() - - override fun pageListParse(document: Document): List { - return document.select("div#readerarea a").mapIndexed { i, a -> - Page(i, "", a.attr("abs:href")) - } - } -} diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlideGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlideGenerator.kt index fa4d57a5b..97c5ed5a3 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlideGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/foolslide/FoolSlideGenerator.kt @@ -29,8 +29,6 @@ class FoolSlideGenerator : ThemeSourceGenerator { SingleLang("Iskultrip Scans", "https://maryfaye.net", "en"), SingleLang("Anata no Motokare", "https://motokare.xyz", "en", className = "AnataNoMotokare"), SingleLang("Yuri-ism", "https://www.yuri-ism.net", "en", className = "YuriIsm"), - SingleLang("Ajia no Scantrad", "https://www.ajianoscantrad.fr", "fr", className = "AjiaNoScantrad"), - SingleLang("Storm in Heaven", "https://www.storm-in-heaven.net", "it", className = "StormInHeaven"), SingleLang("LupiTeam", "https://lupiteam.net", "it"), SingleLang("Zandy no Fansub", "https://zandynofansub.aishiteru.org", "en"), SingleLang("Kirishima Fansub", "https://www.kirishimafansub.net", "es"), @@ -38,7 +36,6 @@ class FoolSlideGenerator : ThemeSourceGenerator { MultiLang("HNI-Scantrad", "https://hni-scantrad.com", listOf("fr", "en"), className = "HNIScantradFactory", pkgName = "hniscantrad", overrideVersionCode = 1), SingleLang("The Phoenix Scans", "https://www.phoenixscans.com", "it", className = "PhoenixScans"), SingleLang("GTO The Great Site", "https://www.gtothegreatsite.net", "it", className = "GTO"), - SingleLang("Fall World Reader", "https://faworeader.altervista.org", "it", className = "FallenWorldOrder"), SingleLang("NIFTeam", "http://read-nifteam.info", "it"), SingleLang("TuttoAnimeManga", "https://tuttoanimemanga.net", "it"), SingleLang("Tortuga Ceviri", "http://tortuga-ceviri.com", "tr"), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt index 800d61a2b..7f4f945a7 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/madara/MadaraGenerator.kt @@ -16,7 +16,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("24hRomance", "https://24hromance.com", "en", className = "Romance24h"), SingleLang("Adonis Fansub", "https://manga.adonisfansub.com", "tr"), SingleLang("AkuManga", "https://akumanga.com", "ar"), - SingleLang("AlianzaMarcial", "https://alianzamarcial.xyz", "es"), SingleLang("AllPornComic", "https://allporncomic.com", "en", isNsfw = true), SingleLang("Aloalivn", "https://aloalivn.com", "en", overrideVersionCode = 2), SingleLang("AniMangaEs", "https://animangaes.com", "en", overrideVersionCode = 1), @@ -29,7 +28,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Arthur Scan", "https://arthurscan.xyz", "pt-BR"), SingleLang("Astral Library", "https://www.astrallibrary.net", "en", overrideVersionCode = 1), SingleLang("Atikrost", "https://atikrost.com", "tr"), - SingleLang("ATM-Subs", "https://atm-subs.fr", "fr", className = "ATMSubs"), SingleLang("AYATOON", "https://ayatoon.com", "tr"), SingleLang("Azora", "https://azoramanga.com", "ar", overrideVersionCode = 1), SingleLang("BL Manhwa Club", "https://blmanhwa.club", "pt-BR", isNsfw = true, className = "BlManhwaClub"), @@ -56,10 +54,8 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("DiamondFansub", "https://diamondfansub.com", "tr"), SingleLang("Disaster Scans", "https://disasterscans.com", "en", overrideVersionCode = 1), SingleLang("DoujinHentai", "https://doujinhentai.net", "es", isNsfw = true), - SingleLang("DoujinYosh", "https://doujinyosh.work", "id"), SingleLang("Dream Manga", "https://en.ruyamanga.com", "en", overrideVersionCode = 1), SingleLang("Drope Scan", "https://dropescan.com", "pt-BR", overrideVersionCode = 1), - SingleLang("Einherjar Scan", "https://einherjarscans.space", "en"), SingleLang("FDM Scan", "https://fdmscan.com", "pt-BR", overrideVersionCode = 1), SingleLang("1st Kiss", "https://1stkissmanga.com", "en", className = "FirstKissManga", overrideVersionCode = 1), SingleLang("1st Kiss Manhua", "https://1stkissmanhua.com", "en", className = "FirstKissManhua"), @@ -85,8 +81,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("IsekaiScanManga (unoriginal)", "https://isekaiscanmanga.com", "en", className = "IsekaiScanManga"), SingleLang("Its Your Right Manhua", "https://itsyourightmanhua.com/", "en"), SingleLang("JJutsuScans", "https://jjutsuscans.com", "en", overrideVersionCode = 1), - SingleLang("Just For Fun", "https://just-for-fun.ru", "ru"), - SingleLang("KingzManga", "https://kingzmanga.com", "ar"), SingleLang("KisekiManga", "https://kisekimanga.com", "en"), SingleLang("Kissmanga.in", "https://kissmanga.in", "en", className= "KissmangaIn"), SingleLang("KlikManga", "https://klikmanga.com", "id"), @@ -95,14 +89,12 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Levelerscans", "https://levelerscans.xyz", "en"), SingleLang("Lily Manga", "https://lilymanga.com", "en"), SingleLang("LovableSubs", "https://lovablesubs.com", "tr"), - SingleLang("Manga18 Fun", "https://manga18.fun", "en"), SingleLang("Manga18 Fx", "https://manga18fx.com", "en"), SingleLang("Manga347", "https://manga347.com", "en", overrideVersionCode = 2), SingleLang("مانجا العاشق", "https://3asq.org", "ar", className = "Manga3asq"), SingleLang("Manga3S", "https://manga3s.com", "en"), SingleLang("Manga68", "https://manga68.com", "en"), SingleLang("Manga Action", "https://manga-action.com", "ar", overrideVersionCode = 1), - SingleLang("Manga Arab Online مانجا عرب اون لاين", "https://mangaarabonline.com", "ar", className = "MangaArabOnline"), SingleLang("مانجا عرب تيم Manga Arab Team", "https://mangaarabteam.com", "ar", className = "MangaArabTeam"), SingleLang("MangaBaz", "https://mangabaz.com", "tr"), SingleLang("Manga Bin", "https://mangabin.com/", "en"), @@ -153,10 +145,7 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("MangaWT", "https://mangawt.com", "tr"), SingleLang("MangaYaku", "https://mangayaku.com", "id", overrideVersionCode = 1), SingleLang("MangaYosh", "https://mangayosh.xyz", "id"), - MultiLang("Mangazuki.club", "https://mangazuki.club", listOf("ja", "ko"), - className = "MangazukiClubFactory"), SingleLang("Mangazuki.me", "https://mangazuki.me", "en", className = "MangazukiMe", overrideVersionCode = 1), - SingleLang("Mangazuki.online", "http://mangazukinew.online", "en", className = "MangazukiOnline"), SingleLang("Mangceh", "https://mangceh.com", "id", isNsfw = true), SingleLang("ManhuaBox", "https://manhuabox.net", "en"), SingleLang("Manhua ES", "https://manhuaes.com", "en", overrideVersionCode = 4), @@ -181,13 +170,11 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("MG Komik", "https://mgkomik.my.id", "id"), SingleLang("Midnight Mess Scans", "https://midnightmess.org", "en", isNsfw = true, overrideVersionCode = 1), SingleLang("Milftoon", "https://milftoon.xxx", "en", isNsfw = true, overrideVersionCode = 2), - SingleLang("Miracle Scans", "https://miraclescans.com", "en"), SingleLang("Mixed Manga", "https://mixedmanga.com", "en"), SingleLang("MMScans", "https://mm-scans.com/", "en", overrideVersionCode = 1), SingleLang("Mode Scanlator", "https://modescanlator.com", "pt-BR"), SingleLang("Mundo Wuxia", "https://mundowuxia.com", "es"), SingleLang("Mystical Merries", "https://mysticalmerries.com", "en"), - SingleLang("Nazarick Scans", "https://nazarickscans.com", "en"), SingleLang("NeatManga", "https://neatmanga.com", "en"), SingleLang("NekoScan", "https://nekoscan.com", "en", overrideVersionCode = 1), SingleLang("Neox Scanlator", "https://neoxscans.net", "pt-BR", overrideVersionCode = 4), @@ -197,7 +184,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Nitro Scans", "https://nitroscans.com", "en"), SingleLang("NovelMic", "https://novelmic.com", "en"), SingleLang("Off Scan", "https://offscan.top", "pt-BR", overrideVersionCode = 1), - SingleLang("مانجا اولاو", "https://olaoe.giize.com", "ar", className = "OlaoeManga"), SingleLang("OnManga", "https://onmanga.com", "en"), SingleLang("Origami Orpheans", "https://origami-orpheans.com.br", "pt-BR", overrideVersionCode = 1), SingleLang("Paean Scans", "https://paeanscans.com", "en"), @@ -205,10 +191,8 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Platinum Crown", "https://platinumscans.com", "en"), SingleLang("Pojok Manga", "https://pojokmanga.com", "id", overrideVersionCode = 1), SingleLang("PornComix", "https://www.porncomixonline.net", "en", isNsfw = true, overrideVersionCode = 1), - SingleLang("Prime Manga", "https://primemanga.com", "en"), SingleLang("Projeto Scanlator", "https://projetoscanlator.com", "pt-BR", overrideVersionCode = 1), SingleLang("QueensManga ملكات المانجا", "https://queensmanga.com", "ar", className = "QueensManga"), - SingleLang("Raider Scans", "https://raiderscans.com", "en"), SingleLang("Random Translations", "https://randomtranslations.com", "en"), SingleLang("RawDEX", "https://rawdex.net", "ko", isNsfw = true), SingleLang("Raw Mangas", "https://rawmangas.net", "ja", isNsfw = true, overrideVersionCode = 1), @@ -229,7 +213,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Sleepy Translations", "https://sleepytranslations.com/", "en"), SingleLang("SocialWeebs", "https://socialweebs.in/", "en"), SingleLang("SoloScanlation", "https://soloscanlation.site", "en"), - SingleLang("Spooky Scanlations", "https://spookyscanlations.xyz", "es"), SingleLang("StageComics", "https://stagecomics.com", "pt-BR", overrideVersionCode = 1), SingleLang("Sugar Babies", "https://sugarbscan.com", "en"), SingleLang("Sweet Time Scan", "https://sweetscan.net", "pt-BR"), @@ -238,12 +221,10 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("ToonGod", "https://www.toongod.com", "en"), SingleLang("Toonily", "https://toonily.com", "en", isNsfw = true, overrideVersionCode = 2), SingleLang("Toonily.net", "https://toonily.net", "en", isNsfw = true, className = "ToonilyNet", overrideVersionCode = 1), - SingleLang("ToonPoint", "https://toonpoint.com", "en"), SingleLang("Top Manhua", "https://topmanhua.com", "en"), SingleLang("TritiniaScans", "https://tritinia.com", "en", overrideVersionCode = 1), SingleLang("TruyenTranhAudio.com", "https://truyentranhaudio.com", "vi", className = "TruyenTranhAudioCom"), SingleLang("TruyenTranhAudio.online", "https://truyentranhaudio.online", "vi", className = "TruyenTranhAudioOnline"), - SingleLang("Tsubaki No Scan", "https://tsubakinoscan.com", "fr"), SingleLang("Tsundoku Traduções", "https://tsundokutraducoes.com.br", "pt-BR", pkgName = "tsundokutraducoes", className = "TsundokuTraducoes", overrideVersionCode = 1), SingleLang("Türkçe Manga", "https://turkcemanga.com", "tr", className = "TurkceManga"), SingleLang("Twilight Scans", "https://twilightscans.com", "en", overrideVersionCode = 1), @@ -257,7 +238,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("WebToonily", "https://webtoonily.com", "en"), SingleLang("WebtoonUK", "https://webtoon.uk", "en"), SingleLang("WebtoonXYZ", "https://www.webtoon.xyz", "en"), - SingleLang("WeScans", "https://wescans.xyz", "en"), SingleLang("WoopRead", "https://woopread.com", "en"), SingleLang("WuxiaWorld", "https://wuxiaworld.site", "en"), SingleLang("Yaoi Fan Clube", "https://yaoifanclube.com.br", "pt-BR", isNsfw = true), @@ -265,7 +245,6 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("Yokai Jump", "https://yokaijump.fr", "fr"), SingleLang("Yuri Verso", "https://yuri.live", "pt-BR", overrideVersionCode = 1), SingleLang("Zin Translator", "https://zinmanga.com", "en"), - SingleLang("ZManga", "https://zmanga.org", "es"), SingleLang("Sleeping Knight Scans", "https://skscans.com", "en", overrideVersionCode = 2), MultiLang("Leviatan Scans", "https://leviatanscans.com", listOf("en", "es"), className = "LeviatanScansFactory", overrideVersionCode = 3), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt index cd4636a33..7fa4223f0 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt @@ -44,7 +44,6 @@ class MMRCMSSources { SourceData.Single("Scan VF", "https://www.scan-vf.net", "fr"), SourceData.Single("Scan OP", "https://scan-op.cc", "fr"), SourceData.Single("Komikid", "https://www.komikid.com", "id"), - SourceData.Single("Nikushima", "http://azbivo.webd.pro", "pl"), SourceData.Single("MangaHanta", "http://mangahanta.com", "tr", overrideVersionCode = 1), SourceData.Single("Fallen Angels Scans", "https://truyen.fascans.com", "vi"), SourceData.Single("LeoManga", "https://leomanga.me", "es", overrideVersionCode = 1), @@ -88,6 +87,7 @@ class MMRCMSSources { // SourceData("tr", "Epikmanga", "https://www.epikmanga.com"), // SourceData("en", "Hatigarm Scans", "https://hatigarmscans.net"), // Went offline +// SourceData.Single("Nikushima", "http://azbivo.webd.pro", "pl"), // SourceData("ru", "Japit Comics", "https://j-comics.ru"), // SourceData("es", "Universo Yuri", "https://universoyuri.com"), // SourceData("pl", "Dracaena", "https://dracaena.webd.pl/czytnik"), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpcomics/WPComicsGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpcomics/WPComicsGenerator.kt index 48c3826a3..0d68cad78 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpcomics/WPComicsGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpcomics/WPComicsGenerator.kt @@ -13,7 +13,6 @@ class WPComicsGenerator : ThemeSourceGenerator { override val baseVersionCode: Int = 1 override val sources = listOf( - SingleLang("ComicLatest", "https://comiclatest.com", "en", overrideVersionCode = 1), MultiLang("MangaSum", "https://mangasum.com", listOf("en", "ja")), SingleLang("NetTruyen", "https://www.nettruyen.com", "vi", overrideVersionCode = 1), SingleLang("NhatTruyen", "http://nhattruyen.com", "vi", overrideVersionCode = 1), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangastream/WPMangaStreamGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangastream/WPMangaStreamGenerator.kt index f2004d407..af412663d 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangastream/WPMangaStreamGenerator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/wpmangastream/WPMangaStreamGenerator.kt @@ -14,32 +14,25 @@ class WPMangaStreamGenerator : ThemeSourceGenerator { override val sources = listOf( SingleLang("Asura Scans", "override url", "en", overrideVersionCode = 1), SingleLang("KlanKomik", "https://klankomik.com", "id"), - SingleLang("ChiOtaku", "https://chiotaku.com", "id"), - SingleLang("MangaShiro", "https://mangashiro.co", "id"), SingleLang("MasterKomik", "https://masterkomik.com", "id"), SingleLang("Kaisar Komik", "https://kaisarkomik.com", "id"), SingleLang("Rawkuma", "https://rawkuma.com/", "ja"), - SingleLang("MangaP", "https://mangap.me", "ar"), SingleLang("Boosei", "https://boosei.com", "id"), SingleLang("Mangakyo", "https://www.mangakyo.me", "id"), SingleLang("Sekte Komik", "https://sektekomik.com", "id", overrideVersionCode = 2), SingleLang("Komik Station", "https://komikstation.com", "id"), - SingleLang("Komik Indo", "https://www.komikindo.web.id", "id", className = "KomikIndoWPMS"), SingleLang("Non-Stop Scans", "https://www.nonstopscans.com", "en", className = "NonStopScans"), SingleLang("KomikIndo.co", "https://komikindo.co", "id", className = "KomikindoCo"), SingleLang("Readkomik", "https://readkomik.com", "en", className = "ReadKomik"), SingleLang("MangaIndonesia", "https://mangaindonesia.net", "id"), SingleLang("Liebe Schnee Hiver", "https://www.liebeschneehiver.com", "tr"), - SingleLang("KomikRu", "https://komikru.com", "id"), SingleLang("GURU Komik", "https://gurukomik.com", "id"), SingleLang("Shea Manga", "https://sheamanga.my.id", "id"), SingleLang("Komik AV", "https://komikav.com", "id"), SingleLang("Komik Cast", "https://komikcast.com", "id", overrideVersionCode = 6), SingleLang("West Manga", "https://westmanga.info", "id"), - SingleLang("Komik GO", "https://komikgo.com", "id", overrideVersionCode = 1), SingleLang("MangaSwat", "https://mangaswat.com", "ar"), SingleLang("Manga Raw.org", "https://mangaraw.org", "ja", className = "MangaRawOrg", overrideVersionCode = 1), - SingleLang("Matakomik", "https://matakomik.com", "id"), SingleLang("Manga Pro Z", "https://mangaproz.com", "ar"), SingleLang("Silence Scan", "https://silencescan.net", "pt-BR", overrideVersionCode = 1), SingleLang("Kuma Scans (Kuma Translation)", "https://kumascans.com", "en", className = "KumaScans"), diff --git a/src/ar/andromedascans/AndroidManifest.xml b/src/ar/andromedascans/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/ar/andromedascans/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/ar/andromedascans/build.gradle b/src/ar/andromedascans/build.gradle deleted file mode 100644 index 6c2b4e28d..000000000 --- a/src/ar/andromedascans/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'AndromedaScans' - pkgNameSuffix = 'ar.andromedascans' - extClass = '.AndromedaScans' - extVersionCode = 1 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/ar/andromedascans/res/mipmap-hdpi/ic_launcher.png b/src/ar/andromedascans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100755 index 3270a284d..000000000 Binary files a/src/ar/andromedascans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/andromedascans/res/mipmap-mdpi/ic_launcher.png b/src/ar/andromedascans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100755 index 77bec6d1a..000000000 Binary files a/src/ar/andromedascans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/andromedascans/res/mipmap-xhdpi/ic_launcher.png b/src/ar/andromedascans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100755 index e3ecfc492..000000000 Binary files a/src/ar/andromedascans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/andromedascans/res/mipmap-xxhdpi/ic_launcher.png b/src/ar/andromedascans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100755 index cda525643..000000000 Binary files a/src/ar/andromedascans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/andromedascans/res/mipmap-xxxhdpi/ic_launcher.png b/src/ar/andromedascans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100755 index 40aa17f5b..000000000 Binary files a/src/ar/andromedascans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/andromedascans/res/web_hi_res_512.png b/src/ar/andromedascans/res/web_hi_res_512.png deleted file mode 100755 index 7dc236422..000000000 Binary files a/src/ar/andromedascans/res/web_hi_res_512.png and /dev/null differ diff --git a/src/ar/andromedascans/src/eu/kanade/tachiyomi/extension/ar/andromedascans/AndromedaScans.kt b/src/ar/andromedascans/src/eu/kanade/tachiyomi/extension/ar/andromedascans/AndromedaScans.kt deleted file mode 100644 index 8544fe439..000000000 --- a/src/ar/andromedascans/src/eu/kanade/tachiyomi/extension/ar/andromedascans/AndromedaScans.kt +++ /dev/null @@ -1,89 +0,0 @@ -package eu.kanade.tachiyomi.extension.ar.andromedascans - -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.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import okhttp3.MediaType.Companion.toMediaTypeOrNull -import okhttp3.Request -import okhttp3.RequestBody.Companion.toRequestBody -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale - -class AndromedaScans : ParsedHttpSource() { - override val name = "AndromedaScans" - - override val baseUrl = "https://andromedax.net" - - override val supportsLatest = true - - override val lang = "ar" - - override fun popularMangaRequest(page: Int) = GET("$baseUrl/projects", headers) - - override fun popularMangaSelector() = "div.flexbox2-content" - - override fun popularMangaFromElement(element: Element) = SManga.create().apply { - setUrlWithoutDomain(element.select("a").attr("href")) - title = element.select("a").attr("title") - thumbnail_url = element.select("img").attr("abs:src").substringBeforeLast("resize") - } - - override fun popularMangaNextPageSelector(): String? = null - - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/page/$page", headers) - - override fun latestUpdatesSelector() = "div.flexbox3-item" - - override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector() = "[rel=next]" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val type = "application/x-www-form-urlencoded; charset=UTF-8" - val body = "action=data_fetch&keyword=$query".toRequestBody(type.toMediaTypeOrNull()) - - return POST("$baseUrl/wp-admin/admin-ajax.php", headers, body) - } - - override fun searchMangaSelector() = "div.searchbox" - - override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) - - override fun searchMangaNextPageSelector(): String? = null - - override fun mangaDetailsParse(document: Document) = SManga.create().apply { - author = document.select("ul.series-infolist span")[3].text() - genre = document.select("div.series-genres > a[rel=tag]").joinToString { it.text() } - description = document.select("div.series-synops").text().trim() - } - - override fun chapterListSelector() = "ul.series-chapterlist > li" - - override fun chapterFromElement(element: Element) = SChapter.create().apply { - setUrlWithoutDomain(element.select("a").attr("href")) - name = element.select("span").first().ownText() - date_upload = dateFormat.parse(element.select("span.date").text())?.time ?: 0 - } - - companion object { - val dateFormat by lazy { - SimpleDateFormat("MMMM dd, yyyy", Locale.US) - } - } - - override fun pageListParse(document: Document): List { - return document.select("noscript > img:not([alt=Andromeda Scans])").mapIndexed { i, element -> - Page(i, "", element.attr("abs:src")) - } - } - - override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used") - - override fun getFilterList() = FilterList() -} diff --git a/src/ar/mangazen/AndroidManifest.xml b/src/ar/mangazen/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/ar/mangazen/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/ar/mangazen/build.gradle b/src/ar/mangazen/build.gradle deleted file mode 100644 index e55e74a6b..000000000 --- a/src/ar/mangazen/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'MangaZen' - pkgNameSuffix = 'ar.mangazen' - extClass = '.MangaZen' - extVersionCode = 1 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/ar/mangazen/res/mipmap-hdpi/ic_launcher.png b/src/ar/mangazen/res/mipmap-hdpi/ic_launcher.png deleted file mode 100755 index f0f45cb6b..000000000 Binary files a/src/ar/mangazen/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/mangazen/res/mipmap-mdpi/ic_launcher.png b/src/ar/mangazen/res/mipmap-mdpi/ic_launcher.png deleted file mode 100755 index d1e28e8bf..000000000 Binary files a/src/ar/mangazen/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/mangazen/res/mipmap-xhdpi/ic_launcher.png b/src/ar/mangazen/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100755 index 2de05349e..000000000 Binary files a/src/ar/mangazen/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/mangazen/res/mipmap-xxhdpi/ic_launcher.png b/src/ar/mangazen/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100755 index 4b0a43847..000000000 Binary files a/src/ar/mangazen/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/mangazen/res/mipmap-xxxhdpi/ic_launcher.png b/src/ar/mangazen/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100755 index 47c9f27a5..000000000 Binary files a/src/ar/mangazen/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/mangazen/res/web_hi_res_512.png b/src/ar/mangazen/res/web_hi_res_512.png deleted file mode 100755 index 1bb9d873b..000000000 Binary files a/src/ar/mangazen/res/web_hi_res_512.png and /dev/null differ diff --git a/src/ar/mangazen/src/eu/kanade/tachiyomi/extension/ar/mangazen/MangaZen.kt b/src/ar/mangazen/src/eu/kanade/tachiyomi/extension/ar/mangazen/MangaZen.kt deleted file mode 100644 index 7c6586602..000000000 --- a/src/ar/mangazen/src/eu/kanade/tachiyomi/extension/ar/mangazen/MangaZen.kt +++ /dev/null @@ -1,86 +0,0 @@ -package eu.kanade.tachiyomi.extension.ar.mangazen - -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale - -class MangaZen : ParsedHttpSource() { - - override val baseUrl = "https://manga-zen.com" - - override val lang = "ar" - - override val name = "MangaZen" - - override val supportsLatest = true - - override fun popularMangaRequest(page: Int) = GET("$baseUrl/قائمة-المانجا/page/$page", headers) - - override fun popularMangaSelector() = "a[title][alt]" - - override fun popularMangaFromElement(element: Element) = SManga.create().apply { - setUrlWithoutDomain(element.attr("href")) - title = element.attr("title") - thumbnail_url = element.select("img").attr("abs:src").substringBeforeLast("?quality") - } - - override fun popularMangaNextPageSelector() = "div.pagination:not(:has(span:last-child))" - - override fun latestUpdatesRequest(page: Int) = GET("$baseUrl/قائمة-المانجا/page/$page/?order=update", headers) - - override fun latestUpdatesSelector() = popularMangaSelector() - - override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET("$baseUrl/قائمة-المانجا/page/$page/?title=$query", headers) - - override fun searchMangaSelector() = popularMangaSelector() - - override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun mangaDetailsParse(document: Document) = SManga.create().apply { - description = document.select("div.desc").text() - genre = document.select("div.genre-info > a[itemprop=genre]").joinToString { it.text() } - status = parseStatus(document.select("div.spe").first().text()) - } - - private fun parseStatus(status: String) = when { - status.contains("مستمر") -> SManga.ONGOING - else -> SManga.COMPLETED - } - - override fun chapterListSelector() = "div.epsleft" - - override fun chapterFromElement(element: Element) = SChapter.create().apply { - setUrlWithoutDomain(element.select("a").attr("href")) - name = element.select("a").text().trim() - date_upload = dateFormat.parse(element.select("span.date").text().trim())?.time ?: 0 - } - - companion object { - val dateFormat by lazy { - SimpleDateFormat("MMM dd, yyyy", Locale("ar")) - } - } - - override fun pageListParse(document: Document): List { - return document.select("noscript > img#imagech").mapIndexed { i, element -> - Page(i, "", element.attr("abs:src")) - } - } - - override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not Used") - - override fun getFilterList() = FilterList() -} diff --git a/src/id/bacamanga/AndroidManifest.xml b/src/id/bacamanga/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/id/bacamanga/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/id/bacamanga/build.gradle b/src/id/bacamanga/build.gradle deleted file mode 100644 index 9afdbf8bb..000000000 --- a/src/id/bacamanga/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Baca Manga' - pkgNameSuffix = 'id.bacamanga' - extClass = '.BacaManga' - extVersionCode = 3 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/bacamanga/res/mipmap-hdpi/ic_launcher.png b/src/id/bacamanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 2ad31a785..000000000 Binary files a/src/id/bacamanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/bacamanga/res/mipmap-mdpi/ic_launcher.png b/src/id/bacamanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c155cca26..000000000 Binary files a/src/id/bacamanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/bacamanga/res/mipmap-xhdpi/ic_launcher.png b/src/id/bacamanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 4040725a3..000000000 Binary files a/src/id/bacamanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/bacamanga/res/mipmap-xxhdpi/ic_launcher.png b/src/id/bacamanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index a01ed8600..000000000 Binary files a/src/id/bacamanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/bacamanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/bacamanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index bdae49d3c..000000000 Binary files a/src/id/bacamanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/bacamanga/res/web_hi_res_512.png b/src/id/bacamanga/res/web_hi_res_512.png deleted file mode 100644 index af6bfc36e..000000000 Binary files a/src/id/bacamanga/res/web_hi_res_512.png and /dev/null differ diff --git a/src/id/bacamanga/src/eu/kanade/tachiyomi/extension/id/bacamanga/BacaManga.kt b/src/id/bacamanga/src/eu/kanade/tachiyomi/extension/id/bacamanga/BacaManga.kt deleted file mode 100644 index 09f878f5a..000000000 --- a/src/id/bacamanga/src/eu/kanade/tachiyomi/extension/id/bacamanga/BacaManga.kt +++ /dev/null @@ -1,273 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.bacamanga - -import com.google.gson.JsonParser -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 okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element - -class BacaManga : ParsedHttpSource() { - - override val name = "BacaManga" - override val baseUrl = "https://bacamanga.cc" - override val lang = "id" - override val supportsLatest = true - override val client: OkHttpClient = network.cloudflareClient - - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/komik-populer/page/$page/", headers) - } - - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/manga/page/$page/", headers) - } - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = if (query.isNotBlank()) { - val url = "$baseUrl/page/$page".toHttpUrlOrNull()!!.newBuilder() - val pattern = "\\s+".toRegex() - val q = query.replace(pattern, "+") - if (query.isNotEmpty()) { - url.addQueryParameter("s", q) - } else { - url.addQueryParameter("s", "") - } - url.toString() - } else { - val url = "$baseUrl/daftar-komik/page/$page".toHttpUrlOrNull()!!.newBuilder() - var orderBy: String - (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> - when (filter) { - is Status -> url.addQueryParameter("status", arrayOf("", "ongoing", "completed")[filter.state]) - is GenreList -> { - val genreInclude = mutableListOf() - filter.state.forEach { - if (it.state == 1) { - genreInclude.add(it.id) - } - } - if (genreInclude.isNotEmpty()) { - genreInclude.forEach { genre -> - url.addQueryParameter("genre[]", genre) - } - } - } - is SortBy -> { - orderBy = filter.toUriPart() - url.addQueryParameter("order", orderBy) - } - } - } - url.toString() - } - return GET(url, headers) - } - - override fun popularMangaSelector() = "div.animepost" - override fun latestUpdatesSelector() = popularMangaSelector() - override fun searchMangaSelector() = popularMangaSelector() - - override fun popularMangaFromElement(element: Element): SManga { - val manga = SManga.create() - manga.thumbnail_url = element.select("img").attr("data-lazy-src") - manga.setUrlWithoutDomain(element.select(".bigor > a").attr("href")) - manga.title = element.select(".bigor .tt h2").text() - return manga - } - - override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) - override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) - - override fun popularMangaNextPageSelector() = "a.next.page-numbers" - override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun mangaDetailsParse(document: Document): SManga { - val infoElement = document.select(".infox").first() - val sepName = infoElement.select(".spe > span:nth-child(4)").last() - val manga = SManga.create() - manga.author = infoElement.select(".spe span:contains(Pengarang)").text().replace("Pengarang: ", "").trim() - manga.artist = sepName.ownText() - val genres = mutableListOf() - infoElement.select(".genre-info > a").forEach { element -> - val genre = element.text() - genres.add(genre) - } - manga.genre = genres.joinToString(", ") - manga.status = parseStatus(infoElement.select(".spe span:contains(Status)").text()) - manga.description = document.select("div[^itemprop]").last().text() - manga.thumbnail_url = document.select(".thumb noscript img").first().attr("src") - - return manga - } - - private fun parseStatus(element: String): Int = when { - - element.toLowerCase().contains("berjalan") -> SManga.ONGOING - element.toLowerCase().contains("tamat") -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - override fun chapterListSelector() = "div#chapter_list ul li" - - override fun chapterFromElement(element: Element): SChapter { - val urlElement = element.select(".lchx a").first() - val timeElement = element.select("span.rightoff").first() - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(urlElement.attr("href")) - chapter.name = urlElement.text() - chapter.date_upload = 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 { - val pages = mutableListOf() - val scriptToParse = document.select("script[src*=cache]").first().attr("src") - val slideaid = client.newCall(GET(scriptToParse, headers)).execute().body!!.string() - val imagesList = slideaid.substringAfter("var imgch").substringBefore(";").substringAfter("=").trim() - val img_url = slideaid.substringAfter("#chimg").substringBefore("onError").substringAfter("src=\"").substringBefore("'").trim() - val json = JsonParser().parse(imagesList).asJsonArray - json.forEachIndexed { i, url -> - val url_clean = url.toString().removeSurrounding("\"") - // BASE URL HARD CODED - pages.add(Page(i, "", "$img_url$url_clean")) - } - return pages - } - - override fun imageUrlParse(document: Document) = "" - - override fun imageRequest(page: Page): Request { - val headers = Headers.Builder() - headers.apply { - add("Referer", baseUrl) - add("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LGMS323 Build/KOT49I.MS32310c) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.100 Mobile Safari/537.36") - } - - if (page.imageUrl!!.contains("i0.wp.com")) { - headers.apply { - add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3") - } - } - return GET(page.imageUrl!!, headers.build()) - } - - private class SortBy : UriPartFilter( - "Sort by", - arrayOf( - Pair("Default", ""), - Pair("A-Z", "title"), - Pair("Z-A", "titlereverse"), - Pair("Latest Update", "update"), - Pair("Latest Added", "latest"), - Pair("Popular", "popular") - ) - ) - - private class Status : UriPartFilter( - "Status", - arrayOf( - Pair("All", ""), - Pair("Ongoing", "Ongoing"), - Pair("Completed", "Completed") - ) - ) - - private class Genre(name: String, val id: String = name) : Filter.TriState(name) - private class GenreList(genres: List) : Filter.Group("Genres", genres) - - override fun getFilterList() = FilterList( - Filter.Header("NOTE: Ignored if using text search!"), - Filter.Separator(), - SortBy(), - Filter.Separator(), - Status(), - Filter.Separator(), - GenreList(getGenreList()) - ) - - private fun getGenreList() = listOf( - Genre("Action", "action"), - Genre("Adult", "adult"), - Genre("Adventure", "adventure"), - Genre("Comedy", "comedy"), - Genre("Demon", "demon"), - Genre("Demons", "demons"), - Genre("Doujinshi", "doujinshi"), - Genre("Drama", "drama"), - Genre("Ecchi", "ecchi"), - Genre("Fantasy", "fantasy"), - Genre("Game", "game"), - Genre("Gender Bender", "gender-bender"), - Genre("Genres: Action", "genres-action"), - Genre("Gore", "gore"), - Genre("Harem", "harem"), - Genre("Historical", "historical"), - Genre("Horor", "horor"), - Genre("Horror", "horror"), - Genre("Isekai", "isekai"), - Genre("Josei", "josei"), - Genre("Lolicon", "lolicon"), - Genre("Magic", "magic"), - Genre("Manhua", "manhua"), - Genre("Martial Art", "martial-art"), - Genre("Martial Arts", "martial-arts"), - Genre("Mature", "mature"), - Genre("Mecha", "mecha"), - Genre("Medical", "medical"), - Genre("Military", "military"), - Genre("Mistery", "mistery"), - Genre("Music", "music"), - Genre("Mystery", "mystery"), - Genre("Project", "project"), - Genre("Psychological", "psychological"), - Genre("Reincarnation", "reincarnation"), - Genre("Romance", "romance"), - Genre("School", "school"), - Genre("School Life", "school-life"), - Genre("school of life", "school-of-life"), - Genre("Sci-fi", "sci-fi"), - Genre("Seinen", "seinen"), - Genre("sepernatural", "sepernatural"), - Genre("Shotacon", "shotacon"), - Genre("Shoujo", "shoujo"), - Genre("Shoujo Ai", "shoujo-ai"), - Genre("Shounen", "shounen"), - Genre("Shounen Ai", "shounen-ai"), - Genre("Slice of Life", "slice-of-life"), - Genre("Smut", "smut"), - Genre("Sports", "sports"), - Genre("Super Power", "super-power"), - Genre("Supernatural", "supernatural"), - Genre("Thriller", "thriller"), - Genre("Tragedy", "tragedy"), - Genre("Webtoons", "webtoons"), - Genre("Worn and Torn Newbie", "worn-and-torn-newbie"), - Genre("Yuri", "yuri") - ) - - private open class UriPartFilter(displayName: String, val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } -} diff --git a/src/id/mangaindo/AndroidManifest.xml b/src/id/mangaindo/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/id/mangaindo/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/id/mangaindo/build.gradle b/src/id/mangaindo/build.gradle deleted file mode 100644 index ac69c2104..000000000 --- a/src/id/mangaindo/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Manga Indo' - pkgNameSuffix = 'id.mangaindo' - extClass = '.MangaIndo' - extVersionCode = 1 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/mangaindo/res/mipmap-hdpi/ic_launcher.png b/src/id/mangaindo/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 84c09979d..000000000 Binary files a/src/id/mangaindo/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangaindo/res/mipmap-mdpi/ic_launcher.png b/src/id/mangaindo/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 292c253b7..000000000 Binary files a/src/id/mangaindo/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangaindo/res/mipmap-xhdpi/ic_launcher.png b/src/id/mangaindo/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 9772c4c72..000000000 Binary files a/src/id/mangaindo/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangaindo/res/mipmap-xxhdpi/ic_launcher.png b/src/id/mangaindo/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index dddee1cf9..000000000 Binary files a/src/id/mangaindo/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangaindo/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/mangaindo/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index d55ab708d..000000000 Binary files a/src/id/mangaindo/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/mangaindo/res/web_hi_res_512.png b/src/id/mangaindo/res/web_hi_res_512.png deleted file mode 100644 index 0877a426d..000000000 Binary files a/src/id/mangaindo/res/web_hi_res_512.png and /dev/null differ diff --git a/src/id/mangaindo/src/eu/kanade/tachiyomi/extension/id/mangaindo/MangaIndo.kt b/src/id/mangaindo/src/eu/kanade/tachiyomi/extension/id/mangaindo/MangaIndo.kt deleted file mode 100644 index e54dc157c..000000000 --- a/src/id/mangaindo/src/eu/kanade/tachiyomi/extension/id/mangaindo/MangaIndo.kt +++ /dev/null @@ -1,153 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.mangaindo - -import com.github.salomonbrys.kotson.fromJson -import com.github.salomonbrys.kotson.get -import com.github.salomonbrys.kotson.int -import com.google.gson.Gson -import com.google.gson.JsonObject -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.ParsedHttpSource -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.text.SimpleDateFormat -import java.util.Locale - -class MangaIndo : ParsedHttpSource() { - - override val name = "Manga Indo" - - override val baseUrl = "https://mangaindo.web.id" - - override val lang = "id" - - override val supportsLatest = true - - override val client: OkHttpClient = network.cloudflareClient - - private val gson = Gson() - - // Popular - - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/api/cpt/products/?limit=20&page=$page", headers) - } - - override fun popularMangaParse(response: Response): MangasPage = searchMangaParse(response) - - override fun popularMangaSelector() = throw UnsupportedOperationException("Not used") - - override fun popularMangaFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used") - - override fun popularMangaNextPageSelector() = throw UnsupportedOperationException("Not used") - - // Latest - - override fun latestUpdatesRequest(page: Int): Request { - return GET(baseUrl, headers) - } - - override fun latestUpdatesParse(response: Response): MangasPage { - return MangasPage(super.latestUpdatesParse(response).mangas.distinctBy { it.url }, false) - } - - override fun latestUpdatesSelector() = "li.rpwe-li a" - - override fun latestUpdatesFromElement(element: Element): SManga { - return SManga.create().apply { - title = element.text().substringBeforeLast("–").trim() - setUrlWithoutDomain(element.attr("href").substringBeforeLast("-indonesia")) - } - } - - override fun latestUpdatesNextPageSelector(): String? = null - - // Search - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - return GET("$baseUrl/api/cpt/products/?limit=20&page=$page&post_title=$query", headers) - } - - override fun searchMangaParse(response: Response): MangasPage { - return gson.fromJson(response.body!!.string()).let { json -> - val mangas = json["data"].asJsonArray.map { data -> - SManga.create().apply { - title = data["post"]["post_title"].asString - url = "/${data["post"]["post_name"].asString}/" - thumbnail_url = data["acf"]["m-cover"]["value"].asString - } - } - MangasPage(mangas, json["page"].int < json["total_page"].int && json["data"].asJsonArray.count() == 20) - } - } - - override fun searchMangaSelector() = throw UnsupportedOperationException("Not used") - - override fun searchMangaFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used") - - override fun searchMangaNextPageSelector() = throw UnsupportedOperationException("Not used") - - // Details - - override fun mangaDetailsParse(document: Document): SManga { - return document.select("div#main").let { info -> - SManga.create().apply { - title = info.select("h2").text() - author = info.select("span#m-author").text() - artist = info.select("span#m-artist").text() - status = info.select("span#m-status").text().toStatus() - genre = info.select("span#m-genre a").joinToString { it.text() } - description = info.select("span#m-synopsis").text() - thumbnail_url = info.select("div#m-cover img").attr("abs:src") - } - } - } - - private fun String?.toStatus() = when { - this == null -> SManga.UNKNOWN - this.contains("Ongoing", ignoreCase = true) -> SManga.ONGOING - this.contains("Completed", ignoreCase = true) -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - // Chapters - - override fun chapterListSelector() = "ul.lcp_catlist li" - - override fun chapterFromElement(element: Element): SChapter { - return SChapter.create().apply { - element.select("a").let { - name = it.text() - setUrlWithoutDomain(it.attr("href")) - } - date_upload = parseChapterDate(element.select("span").text()) - } - } - - private fun parseChapterDate(date: String): Long { - return try { - SimpleDateFormat("MMM dd, yyyy", Locale.getDefault()).parse(date)?.time ?: 0L - } catch (e: Exception) { - 0L - } - } - - // Pages - - override fun pageListParse(document: Document): List { - return document.select("div.entry-content img").mapIndexed { i, img -> - Page(i, "", img.attr("abs:src")) - } - } - - override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used") - - override fun getFilterList() = FilterList() -} diff --git a/src/id/neumanga/AndroidManifest.xml b/src/id/neumanga/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/id/neumanga/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/id/neumanga/build.gradle b/src/id/neumanga/build.gradle deleted file mode 100644 index 0923f6d8e..000000000 --- a/src/id/neumanga/build.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Neumanga' - pkgNameSuffix = 'id.neumanga' - extClass = '.Neumanga' - extVersionCode = 3 - libVersion = '1.2' -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/neumanga/res/mipmap-hdpi/ic_launcher.png b/src/id/neumanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 690a9c3fc..000000000 Binary files a/src/id/neumanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/neumanga/res/mipmap-mdpi/ic_launcher.png b/src/id/neumanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index eca876f71..000000000 Binary files a/src/id/neumanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/neumanga/res/mipmap-xhdpi/ic_launcher.png b/src/id/neumanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 18b3a8784..000000000 Binary files a/src/id/neumanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/neumanga/res/mipmap-xxhdpi/ic_launcher.png b/src/id/neumanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 64734d04a..000000000 Binary files a/src/id/neumanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/neumanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/neumanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index eb7ba7b61..000000000 Binary files a/src/id/neumanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/neumanga/res/web_hi_res_512.png b/src/id/neumanga/res/web_hi_res_512.png deleted file mode 100644 index a4b465378..000000000 Binary files a/src/id/neumanga/res/web_hi_res_512.png and /dev/null differ diff --git a/src/id/neumanga/src/eu/kanade/tachiyomi/extension/id/neumanga/Neumanga.kt b/src/id/neumanga/src/eu/kanade/tachiyomi/extension/id/neumanga/Neumanga.kt deleted file mode 100644 index b81dbb50b..000000000 --- a/src/id/neumanga/src/eu/kanade/tachiyomi/extension/id/neumanga/Neumanga.kt +++ /dev/null @@ -1,251 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.neumanga - -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 okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.Request -import org.json.JSONArray -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.security.SecureRandom -import java.security.cert.X509Certificate -import javax.net.ssl.SSLContext -import javax.net.ssl.X509TrustManager - -class Neumanga : ParsedHttpSource() { - - override val name = "Neumanga" - - override val baseUrl = "https://neumanga.tv" - - override val lang = "id" - - override val supportsLatest = true - - private val trustManager = object : X509TrustManager { - override fun getAcceptedIssuers(): Array { - return emptyArray() - } - - override fun checkClientTrusted(chain: Array, authType: String) { - } - - override fun checkServerTrusted(chain: Array, authType: String) { - } - } - - private val sslContext = SSLContext.getInstance("SSL").apply { - init(null, arrayOf(trustManager), SecureRandom()) - } - - override val client = super.client.newBuilder() - .sslSocketFactory(sslContext.socketFactory, trustManager) - .build() - - override fun popularMangaSelector() = "div#gov-result div.bolx" - - override fun latestUpdatesSelector() = "div#gov-result div.bolx" - - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/advanced_search?sortby=rating&advpage=$page", headers) - } - - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/advanced_search?sortby=latest&advpage=$page", headers) - } - - private fun mangaFromElement(query: String, element: Element): SManga { - val manga = SManga.create() - element.select(query).first().let { - manga.setUrlWithoutDomain(it.attr("href")) - manga.title = it.text() - } - return manga - } - - override fun popularMangaFromElement(element: Element): SManga { - return mangaFromElement("h2 a", element) - } - - override fun latestUpdatesFromElement(element: Element): SManga { - return mangaFromElement("h2 a", element) - } - - override fun popularMangaNextPageSelector() = "div#gov-result ul.pagination li.active + li a" - - override fun latestUpdatesNextPageSelector() = "div#gov-result ul.pagination li.active + li a" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - val url = "$baseUrl/advanced_search".toHttpUrlOrNull()!!.newBuilder() - .addQueryParameter("advpage", page.toString()) - .addQueryParameter("name_search_mode", "contain") - .addQueryParameter("artist_search_mode", "contain") - .addQueryParameter("author_search_mode", "contain") - .addQueryParameter("year_search_mode", "on") - .addQueryParameter("rating_search_mode", "is") - .addQueryParameter("name_search_query", query) - - (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> - when (filter) { - is Status -> url.addQueryParameter("manga_status", arrayOf("", "completed", "ongoing")[filter.state]) - is GenreList -> { - val genreInclude = mutableListOf() - val genreExclude = mutableListOf() - filter.state.forEach { - if (it.state == 1) { - genreInclude.add(it.id) - } else if (it.state == 2) { - genreExclude.add(it.id) - } - } - url.addQueryParameter("genre1", JSONArray(genreInclude).toString()) - url.addQueryParameter("genre2", JSONArray(genreExclude).toString()) - } - is SelectField -> url.addQueryParameter(filter.key, filter.values[filter.state]) - is TextField -> url.addQueryParameter(filter.key, filter.state) - } - } - return GET(url.toString(), headers) - } - - override fun searchMangaSelector() = "div#gov-result div.bolx" - - override fun searchMangaFromElement(element: Element): SManga { - return mangaFromElement("h2 a", element) - } - - override fun searchMangaNextPageSelector() = "div#gov-result ul.pagination li.active + li a" - - override fun mangaDetailsParse(document: Document): SManga { - val mangaInformationWrapper = document.select("#main .info").first() - - val manga = SManga.create() - manga.author = mangaInformationWrapper.select("span a[href*=author_search_mode]").first().text() - manga.artist = mangaInformationWrapper.select("span a[href*=artist_search_mode]").first().text() - manga.genre = mangaInformationWrapper.select("a[href*=genre]").joinToString { it.text() } - manga.thumbnail_url = mangaInformationWrapper.select("img.imagemg").first().attr("src") - manga.description = document.select(".summary").first().textNodes()[1].toString() - manga.status = parseStatus(mangaInformationWrapper.select("span a[href*=manga_status]").first().text()) - - return manga - } - - private fun parseStatus(status: String) = when { - status.contains("ongoing") -> SManga.ONGOING - status.contains("completed") -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - override fun chapterListSelector() = ".chapter .item:first-child .item-content a" - - override fun chapterFromElement(element: Element): SChapter { - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(element.attr("href") + "/1") - chapter.name = element.select("h3").text() - return chapter - } - - override fun pageListParse(document: Document): List { - val pages = mutableListOf() - document.select(".readnav select.page").first()?.getElementsByTag("option")?.forEach { - pages.add(Page(pages.size, it.attr("value"))) - } - pages.getOrNull(0)?.imageUrl = imageUrlParse(document) - return pages - } - - override fun imageUrlParse(document: Document) = document.select(".readarea img.imagechap").attr("src") - - private class Status : Filter.TriState("Completed") - private class TextField(name: String, val key: String) : Filter.Text(name) - private class Genre(name: String, val id: String = name) : Filter.TriState(name) - private class GenreList(genres: List) : Filter.Group("Genres", genres) - private class SelectField(name: String, val key: String, values: Array, state: Int = 0) : Filter.Select(name, values, state) - - override fun getFilterList() = FilterList( - SelectField("Sort", "sortby", arrayOf("rating", "name", "views", "latest")), - TextField("Author", "author_search_query"), - TextField("Artist", "artist_search_query"), - TextField("Release Year", "year_value"), - Status(), - GenreList(getGenreList()) - ) - - private fun getGenreList() = listOf( - Genre("Adventure", "Adventure"), - Genre("Demons", "Demons"), - Genre("fighting", "fighting"), - Genre("Horor", "Horor"), - Genre("legend", "legend"), - Genre("Manhua", "Manhua"), - Genre("Mecha", "Mecha"), - Genre("Romance", "Romance"), - Genre("neco", "neco"), - Genre("Seinen", "Seinen"), - Genre("Slice Of Life", "Slice Of Life"), - Genre("Superhero", "Superhero"), - Genre("Tragedy", "Tragedy"), - Genre("Vampire", "Vampire"), - Genre("Supernatural", "Supernatural"), - Genre("Shoujo", "Shoujo"), - Genre("Smut", "Smut"), - Genre("School", "School"), - Genre("Oneshot", "Oneshot"), - Genre("Miatery", "Miatery"), - Genre("Manhwa", "Manhwa"), - Genre("live School", "live School"), - Genre("Horror", "Horror"), - Genre("Game", "Game"), - Genre("Antihero", "Antihero"), - Genre("Action", "Action"), - Genre("Comedy", "Comedy"), - Genre("Drama", "Drama"), - Genre("Ecchi", "Ecchi"), - Genre("Action. Adventure", "Action. Adventure"), - Genre("Gender Bender", "Gender Bender"), - Genre("Inaka", "Inaka"), - Genre("Lolicon", "Lolicon"), - Genre("Adult", "Adult"), - Genre("Cooking", "Cooking"), - Genre("Harem", "Harem"), - Genre("Isekai", "Isekai"), - Genre("Magic", "Magic"), - Genre("Music", "Music"), - Genre("Martial Arts", "Martial Arts"), - Genre("Project", "Project"), - Genre("sci fi", "sci fi"), - Genre("Shounen", "Shounen"), - Genre("Military", "Military"), - Genre("Martial Art", "Martial Art"), - Genre("Over Power", "Over Power"), - Genre("School Life", "School Life"), - Genre("Shoujo Ai", "Shoujo Ai"), - Genre("sport", "sport"), - Genre("Supranatural", "Supranatural"), - Genre("Webtoon", "Webtoon"), - Genre("Webtoons", "Webtoons"), - Genre("Suspense", "Suspense"), - Genre("Sports", "Sports"), - Genre("Yuri", "Yuri"), - Genre("Thriller", "Thriller"), - Genre("Super Power", "Super Power"), - Genre("ShounenS", "ShounenS"), - Genre("Sci-fi", "Sci-fi"), - Genre("Psychological", "Psychological"), - Genre("Mystery", "Mystery"), - Genre("Mature", "Mature"), - Genre("Manga", "Manga"), - Genre("Josei", "Josei"), - Genre("Historical", "Historical"), - Genre("Fantasy", "Fantasy"), - Genre("Dachima", "Dachima"), - Genre("Advanture", "Advanture"), - Genre("Echi", "Echi"), - Genre("4-Koma", "4-Koma") - ) -} diff --git a/src/pt/mundohentai/AndroidManifest.xml b/src/pt/mundohentai/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/pt/mundohentai/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/pt/mundohentai/build.gradle b/src/pt/mundohentai/build.gradle deleted file mode 100644 index bfc49afcf..000000000 --- a/src/pt/mundohentai/build.gradle +++ /dev/null @@ -1,17 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'Mundo Hentai' - pkgNameSuffix = 'pt.mundohentai' - extClass = '.MundoHentai' - extVersionCode = 2 - libVersion = '1.2' - containsNsfw = true -} - -dependencies { - implementation project(':lib-ratelimit') -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/mundohentai/res/mipmap-hdpi/ic_launcher.png b/src/pt/mundohentai/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 18d25dc5e..000000000 Binary files a/src/pt/mundohentai/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mundohentai/res/mipmap-mdpi/ic_launcher.png b/src/pt/mundohentai/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ef17dc53d..000000000 Binary files a/src/pt/mundohentai/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mundohentai/res/mipmap-xhdpi/ic_launcher.png b/src/pt/mundohentai/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index d267b6da8..000000000 Binary files a/src/pt/mundohentai/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mundohentai/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/mundohentai/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 473e8a61f..000000000 Binary files a/src/pt/mundohentai/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mundohentai/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/mundohentai/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index e5ca2f39e..000000000 Binary files a/src/pt/mundohentai/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/mundohentai/res/web_hi_res_512.png b/src/pt/mundohentai/res/web_hi_res_512.png deleted file mode 100644 index fbbafb352..000000000 Binary files a/src/pt/mundohentai/res/web_hi_res_512.png and /dev/null differ diff --git a/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt b/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt deleted file mode 100644 index ebeb3f314..000000000 --- a/src/pt/mundohentai/src/eu/kanade/tachiyomi/extension/pt/mundohentai/MundoHentai.kt +++ /dev/null @@ -1,193 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.mundohentai - -import eu.kanade.tachiyomi.annotations.Nsfw -import eu.kanade.tachiyomi.lib.ratelimit.RateLimitInterceptor -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 okhttp3.Headers -import okhttp3.HttpUrl.Companion.toHttpUrlOrNull -import okhttp3.OkHttpClient -import okhttp3.Request -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.util.concurrent.TimeUnit - -@Nsfw -class MundoHentai : ParsedHttpSource() { - - override val name = "Mundo Hentai" - - override val baseUrl = "https://mundohentaioficial.com" - - override val lang = "pt-BR" - - override val supportsLatest = false - - override val client: OkHttpClient = network.cloudflareClient.newBuilder() - .addInterceptor(RateLimitInterceptor(1, 1, TimeUnit.SECONDS)) - .build() - - override fun headersBuilder(): Headers.Builder = Headers.Builder() - .add("User-Agent", USER_AGENT) - .add("Referer", baseUrl) - - private fun genericMangaFromElement(element: Element): SManga = - SManga.create().apply { - title = element.select("div.menu a.title").text() - thumbnail_url = element.attr("style") - .substringAfter("url(\"") - .substringBefore("\")") - url = element.select("a.absolute").attr("href") - } - - // The source does not have a popular list page, so we use the Doujin list instead. - override fun popularMangaRequest(page: Int): Request { - val newHeaders = headersBuilder() - .set("Referer", if (page == 1) baseUrl else "$baseUrl/tipo/doujin/${page - 1}") - .build() - - val pageStr = if (page != 1) "/$page" else "" - return GET("$baseUrl/tipo/doujin$pageStr", newHeaders) - } - - override fun popularMangaSelector(): String = "ul.post-list li div.card:has(a.absolute[href^=/])" - - override fun popularMangaFromElement(element: Element): SManga = genericMangaFromElement(element) - - override fun popularMangaNextPageSelector() = "div.buttons:not(:has(a.selected + a.material-icons))" - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - if (query.isNotEmpty()) { - val url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder() - .addQueryParameter("q", query) - .toString() - - return GET(url, headers) - } - - val tagFilter = filters[1] as TagFilter - val tagSlug = tagFilter.values[tagFilter.state].slug - - val newHeaders = headersBuilder() - .set("Referer", if (page == 1) "$baseUrl/categories" else "$baseUrl/tags/$tagSlug/${page - 1}") - .build() - - val pageStr = if (page != 1) "/$page" else "" - return GET("$baseUrl/tags/$tagSlug$pageStr", newHeaders) - } - - override fun searchMangaSelector() = popularMangaSelector() + ":not(:has(div.right-tape))" - - override fun searchMangaFromElement(element: Element): SManga = genericMangaFromElement(element) - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - override fun mangaDetailsParse(document: Document): SManga { - val post = document.select("div.post") - - return SManga.create().apply { - author = post.select("div.tags div.tag:contains(Artista:) a.value").text() - genre = post.select("div.tags div.tag:contains(Tags:) a.value").joinToString { it.text() } - description = post.select("div.tags div.tag:contains(Tipo:)").text() - .plus("\n" + post.select("div.tags div.tag:contains(Cor:)").text()) - status = SManga.COMPLETED - thumbnail_url = post.select("div.cover img").attr("src") - } - } - - override fun chapterListSelector(): String = "div.post header.data div.float-buttons a.read" - - override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { - name = "Capítulo" - scanlator = element.parent().parent() - .select("div.tags div.tag:contains(Tradutor:) a.value") - .text() - chapter_number = 1f - url = element.attr("href") - } - - override fun pageListRequest(chapter: SChapter): Request { - val newHeader = headersBuilder() - .set("Referer", "$baseUrl${chapter.url}".substringBeforeLast("/")) - .build() - - return GET(baseUrl + chapter.url, newHeader) - } - - override fun pageListParse(document: Document): List { - return document.select("div.gallery > img") - .mapIndexed { i, el -> - Page(i, document.location(), el.attr("src")) - } - } - - override fun imageUrlParse(document: Document) = "" - - override fun imageRequest(page: Page): Request { - val newHeaders = headersBuilder() - .set("Referer", page.url) - .build() - - return GET(page.imageUrl!!, newHeaders) - } - - override fun getFilterList(): FilterList = FilterList( - Filter.Header("Os filtros são ignorados na busca!"), - TagFilter(getTags()) - ) - - data class Tag(val name: String, val slug: String) { - override fun toString(): String = name - } - - private class TagFilter(tags: Array) : Filter.Select("Tag", tags) - - private fun getTags(): Array = arrayOf( - Tag("-- Selecione --", ""), - Tag("Ahegao", "ahegao"), - Tag("Anal", "anal"), - Tag("Biquíni", "biquini"), - Tag("Chubby", "chubby"), - Tag("Colegial", "colegial"), - Tag("Creampie", "creampie"), - Tag("Dark Skin", "dark-skin"), - Tag("Dupla Penetração", "dupla-penetracao"), - Tag("Espanhola", "espanhola"), - Tag("Exibicionismo", "exibicionismo"), - Tag("Footjob", "footjob"), - Tag("Furry", "furry"), - Tag("Futanari", "futanari"), - Tag("Grupal", "grupal"), - Tag("Incesto", "incesto"), - Tag("Lingerie", "lingerie"), - Tag("MILF", "milf"), - Tag("Maiô", "maio"), - Tag("Masturbação", "masturbacao"), - Tag("Netorare", "netorare"), - Tag("Oral", "oral"), - Tag("Peitinhos", "peitinhos"), - Tag("Preservativo", "preservativo"), - Tag("Professora", "professora"), - Tag("Sex Toys", "sex-toys"), - Tag("Tentáculos", "tentaculos"), - Tag("Yaoi", "yaoi") - ) - - override fun latestUpdatesRequest(page: Int): Request = throw UnsupportedOperationException("Not used") - - override fun latestUpdatesSelector(): String = throw UnsupportedOperationException("Not used") - - override fun latestUpdatesFromElement(element: Element): SManga = throw UnsupportedOperationException("Not used") - - override fun latestUpdatesNextPageSelector(): String = throw UnsupportedOperationException("Not used") - - companion object { - private const val USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + - "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36" - } -}