diff --git a/src/ar/vexmanga/build.gradle b/src/ar/vexmanga/build.gradle deleted file mode 100644 index 747a94688..000000000 --- a/src/ar/vexmanga/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Vex Manga' - extClass = '.VexManga' - themePkg = 'mangathemesia' - baseUrl = 'https://vexmanga.com' - overrideVersionCode = 3 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/ar/vexmanga/res/mipmap-hdpi/ic_launcher.png b/src/ar/vexmanga/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index d29e1c721..000000000 Binary files a/src/ar/vexmanga/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/vexmanga/res/mipmap-mdpi/ic_launcher.png b/src/ar/vexmanga/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index fad535468..000000000 Binary files a/src/ar/vexmanga/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/vexmanga/res/mipmap-xhdpi/ic_launcher.png b/src/ar/vexmanga/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 948a8a97e..000000000 Binary files a/src/ar/vexmanga/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/vexmanga/res/mipmap-xxhdpi/ic_launcher.png b/src/ar/vexmanga/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 2c525ee19..000000000 Binary files a/src/ar/vexmanga/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/vexmanga/res/mipmap-xxxhdpi/ic_launcher.png b/src/ar/vexmanga/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 8ceff41dd..000000000 Binary files a/src/ar/vexmanga/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/ar/vexmanga/src/eu/kanade/tachiyomi/extension/ar/vexmanga/VexManga.kt b/src/ar/vexmanga/src/eu/kanade/tachiyomi/extension/ar/vexmanga/VexManga.kt deleted file mode 100644 index 18ee3c486..000000000 --- a/src/ar/vexmanga/src/eu/kanade/tachiyomi/extension/ar/vexmanga/VexManga.kt +++ /dev/null @@ -1,74 +0,0 @@ -package eu.kanade.tachiyomi.extension.ar.vexmanga - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import kotlinx.serialization.json.jsonArray -import kotlinx.serialization.json.jsonPrimitive -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import java.lang.IllegalArgumentException -import java.util.Calendar - -class VexManga : MangaThemesia( - "فيكس مانجا", - "https://vexmanga.com", - "ar", -) { - override fun searchMangaSelector() = ".listarchives .latest-recom, .listupd .latest-series, ${super.searchMangaSelector()}" - override val sendViewCount = false - override fun chapterListSelector() = ".ulChapterList > a, ${super.chapterListSelector()}" - - override val seriesArtistSelector = - ".tsinfo .imptdt:contains(الرسام) i, ${super.seriesArtistSelector}" - override val seriesAuthorSelector = - ".tsinfo .imptdt:contains(المؤلف) i, ${super.seriesAuthorSelector}" - override val seriesStatusSelector = - ".tsinfo .imptdt:contains(الحالة) i, ${super.seriesStatusSelector}" - override val seriesTypeSelector = - ".tsinfo .imptdt:contains(النوع) i, ${super.seriesTypeSelector}" - - override fun String?.parseStatus() = when { - this == null -> SManga.UNKNOWN - this.contains("مستمر", ignoreCase = true) -> SManga.ONGOING - this.contains("مكتمل", ignoreCase = true) -> SManga.COMPLETED - this.contains("متوقف", ignoreCase = true) -> SManga.ON_HIATUS - else -> SManga.UNKNOWN - } - - override fun chapterFromElement(element: Element) = SChapter.create().apply { - setUrlWithoutDomain(element.attr("href")) - name = element.select(".chapternum").text() - date_upload = element.select(".chapterdate").text().parseRelativeDate() - } - - private fun String.parseRelativeDate(): Long { - val number = Regex("""(\d+)""").find(this)?.value?.toIntOrNull() ?: return 0 - val cal = Calendar.getInstance() - - return when { - this.contains("أيام", true) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis - this.contains("ساعة", true) -> cal.apply { add(Calendar.HOUR, -number) }.timeInMillis - this.contains("دقائق", true) -> cal.apply { add(Calendar.MINUTE, -number) }.timeInMillis - this.contains("أسبوعين", true) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number * 7) }.timeInMillis - this.contains("أشهر", true) -> cal.apply { add(Calendar.MONTH, -number) }.timeInMillis - else -> 0 - } - } - - override fun pageListParse(document: Document): List { - val docString = document.toString() - val imageListJson = JSON_IMAGE_LIST_REGEX.find(docString)?.destructured?.toList()?.get(0).orEmpty() - val imageList = try { - json.parseToJsonElement(imageListJson).jsonArray - } catch (_: IllegalArgumentException) { - emptyList() - } - val scriptPages = imageList.mapIndexed { i, jsonEl -> - Page(i, document.location(), jsonEl.jsonPrimitive.content) - } - - return scriptPages - } -} diff --git a/src/en/mangasaki/build.gradle b/src/en/mangasaki/build.gradle deleted file mode 100644 index 1e5f38003..000000000 --- a/src/en/mangasaki/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -ext { - extName = 'MangaSaki' - extClass = '.MangaSaki' - extVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 74db1be02..000000000 Binary files a/src/en/mangasaki/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index c134edf80..000000000 Binary files a/src/en/mangasaki/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangasaki/res/mipmap-xhdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index e8567e7b1..000000000 Binary files a/src/en/mangasaki/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index c16147bf7..000000000 Binary files a/src/en/mangasaki/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangasaki/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/mangasaki/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index bdafb0050..000000000 Binary files a/src/en/mangasaki/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt b/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt deleted file mode 100644 index a7b40629e..000000000 --- a/src/en/mangasaki/src/eu/kanade/tachiyomi/extension/en/mangasaki/MangaSaki.kt +++ /dev/null @@ -1,265 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.mangasaki - -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 eu.kanade.tachiyomi.util.asJsoup -import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString -import kotlinx.serialization.json.Json -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import uy.kohesive.injekt.injectLazy -import java.text.ParseException -import java.text.SimpleDateFormat -import java.util.Locale - -class MangaSaki : ParsedHttpSource() { - - override val name = "MangaSaki" - - override val baseUrl = "https://www.mangasaki.org" - - override val lang = "en" - - override val supportsLatest = true - - // popular - override fun popularMangaRequest(page: Int): Request { - return GET("$baseUrl/directory/hot?page=${page - 1}", headers) - } - - override fun popularMangaSelector() = ".directory_list tbody tr" - - override fun popularMangaFromElement(element: Element): SManga { - val manga = SManga.create() - val titleElement = element.selectFirst("td a img")!! - manga.title = titleElement.attr("title") - manga.setUrlWithoutDomain(element.selectFirst("td a")!!.attr("href")) - manga.thumbnail_url = titleElement.attr("src") - - return manga - } - - override fun popularMangaNextPageSelector() = "li.pager-next a" - - // latest - override fun latestUpdatesRequest(page: Int): Request { - return GET("$baseUrl/directory/new?page=${page - 1}", headers) - } - - override fun latestUpdatesSelector() = popularMangaSelector() - - override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) - - override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() - - // search - private var searchMode: Boolean = false - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - return if (query.isNotEmpty()) { - searchMode = true - GET("$baseUrl/search/node/$query?page=${page - 1}", headers) - } else { - searchMode = false - var url = "$baseUrl/tags/" - filters.forEach { filter -> - when (filter) { - is GenreFilter -> { - url += "${filter.toUriPart()}?page=${page - 1}" - } - else -> {} - } - } - GET(url, headers) - } - } - - override fun searchMangaSelector(): String { - return if (!searchMode) { - "div.view-content div.views-row" - } else { - "ol.search-results li.search-result" - } - } - - override fun searchMangaFromElement(element: Element): SManga { - val manga = SManga.create() - if (!searchMode) { - manga.title = element.select("div.views-field-title a").text() - manga.setUrlWithoutDomain(element.select("div.views-field-title a").attr("href")) - manga.thumbnail_url = element.select("div.views-field-field-image2 img").attr("src") - } else { - // The site doesn't show thumbnails when using search - val titleElement = element.select("h3.title a") - manga.title = titleElement.text() - manga.setUrlWithoutDomain(titleElement.attr("href")) - } - - return manga - } - - override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() - - // manga details - override fun mangaDetailsParse(document: Document): SManga { - val manga = SManga.create() - manga.author = document.selectFirst("div.field-name-field-author div.field-item")?.text() - manga.genre = document.select("div.field-name-field-genres ul li a").joinToString { it.text() } - manga.description = document.select("div.field-name-body div.field-item p").text() - manga.thumbnail_url = document.select("div.field-name-field-image2 div.field-item img").attr("src") - - val statusText = document.select("div.field-name-field-status div.field-item").text() - manga.status = when { - statusText.contains("Ongoing", true) -> SManga.ONGOING - statusText.contains("Complete", true) -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - - return manga - } - - // chapters - override fun chapterListRequest(manga: SManga) = chapterListRequest(manga.url, 1) - - private fun chapterListRequest(url: String, page: Int): Request { - return GET("$baseUrl$url?page=${page - 1}", headers) - } - - override fun chapterListParse(response: Response): List { - var document = response.asJsoup() - val chapters = document.select(chapterListSelector()).map(::chapterFromElement).toMutableList() - var nextPage = 2 - - while (document.select(latestUpdatesNextPageSelector()).isNotEmpty()) { - val dirtyPage = document.select("div#block-search-form form#search-block-form").attr("action") - val cleaningIndex = dirtyPage.lastIndexOf("?") - val cleanPage = dirtyPage.substring(0, cleaningIndex) - document = client.newCall(chapterListRequest(cleanPage, nextPage)).execute().asJsoup() - chapters.addAll(document.select(chapterListSelector()).map(::chapterFromElement)) - nextPage++ - } - - return chapters - } - - override fun chapterListSelector() = ".chlist tbody tr" - - private val dateFormat = SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) - - override fun chapterFromElement(element: Element): SChapter { - val chapter = SChapter.create() - chapter.setUrlWithoutDomain(element.select("a").attr("href")) - chapter.name = element.select("a").text() - chapter.date_upload = try { - element.select("td").last()?.text()?.let { - dateFormat.parse(it)?.time ?: 0L - } ?: 0L - } catch (_: ParseException) { - 0L - } - - return chapter - } - - // pages - override fun pageListParse(document: Document): List { - val jsonString = document.select("script:containsData(showmanga)").first()!!.data() - .substringAfter("(Drupal.settings, ") - .substringBeforeLast(");") - - return parseJSON(jsonString).mapIndexed { i, it -> - Page(i, imageUrl = it) - } - } - - override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException() - - override fun getFilterList() = FilterList( - Filter.Header("NOTE: Ignored if using text search!"), - Filter.Separator(), - GenreFilter(), - ) - - private class GenreFilter : UriPartFilter( - "Category", - arrayOf( - Pair("Action", "action"), - Pair("Adult", "adult"), - Pair("Adventure", "adventure"), - Pair("Comedy", "comedy"), - Pair("Crime", "crime"), - Pair("Drama", "drama"), - Pair("Dungeons", "dungeons"), - Pair("Ecchi", "ecchi"), - Pair("Fantasy", "fantasy"), - Pair("GenderBender", "genderbender"), - Pair("Gender Bender", "gender-bender"), - Pair("Harem", "harem"), - Pair("Hentai", "hentai"), - Pair("Historical", "historical"), - Pair("Horror", "horror"), - Pair("Isekai", "isekai"), - Pair("Josei", "josei"), - Pair("Lolicon", "lolicon"), - Pair("Magical Girls", "magical-girls"), - Pair("MartialArts", "martialarts"), - Pair("Martial Arts", "martial-arts"), - Pair("Mature", "mature"), - Pair("Mecha", "mecha"), - Pair("Medical", "medical"), - Pair("N/A", "na"), - Pair("Philosophical", "philosophical"), - Pair("Psychological", "psychological"), - Pair("SchoolLife", "schoollife"), - Pair("School Life", "school-life"), - Pair("Sci-fi", "sci-fi"), - Pair("Sci-fi Shounen", "sci-fi-shounen"), - Pair("Seinen", "seinen"), - Pair("Shotacon", "shotacon"), - Pair("Shoujo", "shoujo"), - Pair("ShoujoAi", "shoujoai"), - Pair("Shoujo Ai", "shoujo-ai"), - Pair("Shounen", "shounen"), - Pair("ShounenAi", "shounenai"), - Pair("Shounen-Ai", "shounen-ai"), - Pair("SliceofLife", "slicelife"), - Pair("Slice of Life", "slice-life"), - Pair("Smut", "smut"), - Pair("Sports", "sports"), - Pair("Superhero", "superhero"), - Pair("Supernatural", "supernatural"), - Pair("System", "system"), - Pair("Thriller", "thriller"), - Pair("Tragedy", "tragedy"), - Pair("Webtoons", "webtoons"), - Pair("Wuxia", "wuxia"), - Pair("Yuri", "yuri"), - ), - ) - - private val json: Json by injectLazy() - - private fun parseJSON(jsonString: String): List { - val jsonData = json.decodeFromString(jsonString) - return jsonData.showmanga.paths.filter { it.contains("mangasaki") } - } - - private open class UriPartFilter(displayName: String, private val vals: Array>) : - Filter.Select(displayName, vals.map { it.first }.toTypedArray()) { - fun toUriPart() = vals[state].second - } - - @Serializable - class JSONData(val showmanga: ShowMangaData) - - @Serializable - class ShowMangaData(val paths: List) -} diff --git a/src/en/snowscans/build.gradle b/src/en/snowscans/build.gradle deleted file mode 100644 index bb9276be7..000000000 --- a/src/en/snowscans/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Snow Scans' - extClass = '.SnowScans' - themePkg = 'mangathemesia' - baseUrl = 'https://snowscans.com' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/snowscans/res/mipmap-hdpi/ic_launcher.png b/src/en/snowscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index c29aae92a..000000000 Binary files a/src/en/snowscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/snowscans/res/mipmap-mdpi/ic_launcher.png b/src/en/snowscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 4cc2fbf6a..000000000 Binary files a/src/en/snowscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/snowscans/res/mipmap-xhdpi/ic_launcher.png b/src/en/snowscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 2dd22037f..000000000 Binary files a/src/en/snowscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/snowscans/res/mipmap-xxhdpi/ic_launcher.png b/src/en/snowscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 5c727f5ee..000000000 Binary files a/src/en/snowscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/snowscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/snowscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index bee7c966e..000000000 Binary files a/src/en/snowscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/snowscans/src/eu/kanade/tachiyomi/extension/en/snowscans/SnowScans.kt b/src/en/snowscans/src/eu/kanade/tachiyomi/extension/en/snowscans/SnowScans.kt deleted file mode 100644 index e5fb54d6a..000000000 --- a/src/en/snowscans/src/eu/kanade/tachiyomi/extension/en/snowscans/SnowScans.kt +++ /dev/null @@ -1,10 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.snowscans - -import eu.kanade.tachiyomi.multisrc.mangathemesia.MangaThemesia - -class SnowScans : MangaThemesia( - "Snow Scans", - "https://snowscans.com", - "en", - mangaUrlDirectory = "/series", -) diff --git a/src/en/xmanhwa/build.gradle b/src/en/xmanhwa/build.gradle deleted file mode 100644 index d773e7588..000000000 --- a/src/en/xmanhwa/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Xmanhwa' - extClass = '.Xmanhwa' - themePkg = 'madara' - baseUrl = 'https://www.xmanhwa.me' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/en/xmanhwa/res/mipmap-hdpi/ic_launcher.png b/src/en/xmanhwa/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 8af471ea6..000000000 Binary files a/src/en/xmanhwa/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/xmanhwa/res/mipmap-mdpi/ic_launcher.png b/src/en/xmanhwa/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 0d904a422..000000000 Binary files a/src/en/xmanhwa/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/xmanhwa/res/mipmap-xhdpi/ic_launcher.png b/src/en/xmanhwa/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 4503c0009..000000000 Binary files a/src/en/xmanhwa/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/xmanhwa/res/mipmap-xxhdpi/ic_launcher.png b/src/en/xmanhwa/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 01ae073fd..000000000 Binary files a/src/en/xmanhwa/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/xmanhwa/res/mipmap-xxxhdpi/ic_launcher.png b/src/en/xmanhwa/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index dfdc6565f..000000000 Binary files a/src/en/xmanhwa/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/en/xmanhwa/src/eu/kanade/tachiyomi/extension/en/xmanhwa/Xmanhwa.kt b/src/en/xmanhwa/src/eu/kanade/tachiyomi/extension/en/xmanhwa/Xmanhwa.kt deleted file mode 100644 index 0d20a95cb..000000000 --- a/src/en/xmanhwa/src/eu/kanade/tachiyomi/extension/en/xmanhwa/Xmanhwa.kt +++ /dev/null @@ -1,14 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.xmanhwa - -import eu.kanade.tachiyomi.multisrc.madara.Madara - -class Xmanhwa : Madara( - "Xmanhwa", - "https://www.xmanhwa.me", - "en", -) { - override val useLoadMoreRequest = LoadMoreStrategy.Never - override val useNewChapterEndpoint = true - - override val filterNonMangaItems = false -} diff --git a/src/es/apolltoons/build.gradle b/src/es/apolltoons/build.gradle deleted file mode 100644 index 98cae778b..000000000 --- a/src/es/apolltoons/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Apolltoons' - extClass = '.Apolltoons' - themePkg = 'madara' - baseUrl = 'https://apolltoons.xyz' - overrideVersionCode = 0 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/es/apolltoons/res/mipmap-hdpi/ic_launcher.png b/src/es/apolltoons/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index ff10d56b7..000000000 Binary files a/src/es/apolltoons/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/apolltoons/res/mipmap-mdpi/ic_launcher.png b/src/es/apolltoons/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 9c9da2ed3..000000000 Binary files a/src/es/apolltoons/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/apolltoons/res/mipmap-xhdpi/ic_launcher.png b/src/es/apolltoons/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 5fe58ac55..000000000 Binary files a/src/es/apolltoons/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/apolltoons/res/mipmap-xxhdpi/ic_launcher.png b/src/es/apolltoons/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 32188cbeb..000000000 Binary files a/src/es/apolltoons/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/apolltoons/res/mipmap-xxxhdpi/ic_launcher.png b/src/es/apolltoons/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 93862831c..000000000 Binary files a/src/es/apolltoons/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/es/apolltoons/src/eu/kanade/tachiyomi/extension/es/apolltoons/Apolltoons.kt b/src/es/apolltoons/src/eu/kanade/tachiyomi/extension/es/apolltoons/Apolltoons.kt deleted file mode 100644 index 8e7ab8cb3..000000000 --- a/src/es/apolltoons/src/eu/kanade/tachiyomi/extension/es/apolltoons/Apolltoons.kt +++ /dev/null @@ -1,7 +0,0 @@ -package eu.kanade.tachiyomi.extension.es.apolltoons - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class Apolltoons : Madara("Apolltoons", "https://apolltoons.xyz", "es", SimpleDateFormat("dd MMMMM, yyyy", Locale("es"))) diff --git a/src/id/komikindoid/src/eu/kanade/tachiyomi/extension/id/komikindoid/KomikIndoID.kt b/src/id/komikindoid/src/eu/kanade/tachiyomi/extension/id/komikindoid/KomikIndoID.kt index 175412e16..d37cbe2c1 100644 --- a/src/id/komikindoid/src/eu/kanade/tachiyomi/extension/id/komikindoid/KomikIndoID.kt +++ b/src/id/komikindoid/src/eu/kanade/tachiyomi/extension/id/komikindoid/KomikIndoID.kt @@ -24,7 +24,7 @@ class KomikIndoID : ParsedHttpSource() { override val client: OkHttpClient = network.cloudflareClient private val dateFormat: SimpleDateFormat = SimpleDateFormat("MMM d, yyyy", Locale.US) - // similar/modified theme of "https://bacakomik.co" + // similar/modified theme of "https://bacakomik.one" override fun popularMangaRequest(page: Int): Request { return GET("$baseUrl/daftar-manga/page/$page/?order=popular", headers) } diff --git a/src/id/komikindoinfo/build.gradle b/src/id/komikindoinfo/build.gradle deleted file mode 100644 index 0553f8c2b..000000000 --- a/src/id/komikindoinfo/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'KomikIndo.info' - extClass = '.KomikIndoInfo' - themePkg = 'zmanga' - baseUrl = 'https://komikindo.info' - overrideVersionCode = 1 - isNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/id/komikindoinfo/res/mipmap-hdpi/ic_launcher.png b/src/id/komikindoinfo/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 3866ffc95..000000000 Binary files a/src/id/komikindoinfo/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/komikindoinfo/res/mipmap-mdpi/ic_launcher.png b/src/id/komikindoinfo/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index 5bb98a601..000000000 Binary files a/src/id/komikindoinfo/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/komikindoinfo/res/mipmap-xhdpi/ic_launcher.png b/src/id/komikindoinfo/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 8ab3a53fe..000000000 Binary files a/src/id/komikindoinfo/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/komikindoinfo/res/mipmap-xxhdpi/ic_launcher.png b/src/id/komikindoinfo/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 5eabf4fff..000000000 Binary files a/src/id/komikindoinfo/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/komikindoinfo/res/mipmap-xxxhdpi/ic_launcher.png b/src/id/komikindoinfo/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 0a5a3cab3..000000000 Binary files a/src/id/komikindoinfo/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/id/komikindoinfo/src/eu/kanade/tachiyomi/extension/id/komikindoinfo/KomikIndoInfo.kt b/src/id/komikindoinfo/src/eu/kanade/tachiyomi/extension/id/komikindoinfo/KomikIndoInfo.kt deleted file mode 100644 index 63a43c85e..000000000 --- a/src/id/komikindoinfo/src/eu/kanade/tachiyomi/extension/id/komikindoinfo/KomikIndoInfo.kt +++ /dev/null @@ -1,10 +0,0 @@ -package eu.kanade.tachiyomi.extension.id.komikindoinfo - -import eu.kanade.tachiyomi.multisrc.zmanga.ZManga -import java.text.SimpleDateFormat -import java.util.Locale - -class KomikIndoInfo : ZManga("KomikIndo.info", "https://komikindo.info", "id", dateFormat = SimpleDateFormat("MMM d, yyyy", Locale("id"))) { - - override val hasProjectPage = true -} diff --git a/src/pt/arcticscan/build.gradle b/src/pt/arcticscan/build.gradle deleted file mode 100644 index 1f9914ded..000000000 --- a/src/pt/arcticscan/build.gradle +++ /dev/null @@ -1,10 +0,0 @@ -ext { - extName = 'Arctic Scan' - extClass = '.ArcticScan' - themePkg = 'madara' - baseUrl = 'https://arcticscan.top' - overrideVersionCode = 0 - isNsfw = false -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/arcticscan/res/mipmap-hdpi/ic_launcher.png b/src/pt/arcticscan/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index 3f7e7e38e..000000000 Binary files a/src/pt/arcticscan/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/arcticscan/res/mipmap-mdpi/ic_launcher.png b/src/pt/arcticscan/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index b12657fb3..000000000 Binary files a/src/pt/arcticscan/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/arcticscan/res/mipmap-xhdpi/ic_launcher.png b/src/pt/arcticscan/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index af9692aaf..000000000 Binary files a/src/pt/arcticscan/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/arcticscan/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/arcticscan/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 2f37d180b..000000000 Binary files a/src/pt/arcticscan/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/arcticscan/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/arcticscan/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index c624dd3ca..000000000 Binary files a/src/pt/arcticscan/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/arcticscan/src/eu/kanade/tachiyomi/extension/pt/arcticscan/ArcticScan.kt b/src/pt/arcticscan/src/eu/kanade/tachiyomi/extension/pt/arcticscan/ArcticScan.kt deleted file mode 100644 index 5f269d555..000000000 --- a/src/pt/arcticscan/src/eu/kanade/tachiyomi/extension/pt/arcticscan/ArcticScan.kt +++ /dev/null @@ -1,14 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.arcticscan - -import eu.kanade.tachiyomi.multisrc.madara.Madara -import java.text.SimpleDateFormat -import java.util.Locale - -class ArcticScan : Madara( - "Arctic Scan", - "https://arcticscan.top", - "pt-BR", - dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.ROOT), -) { - override val useNewChapterEndpoint = true -} diff --git a/src/pt/blackscans/AndroidManifest.xml b/src/pt/blackscans/AndroidManifest.xml deleted file mode 100644 index 8c685c35c..000000000 --- a/src/pt/blackscans/AndroidManifest.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/pt/blackscans/build.gradle b/src/pt/blackscans/build.gradle deleted file mode 100644 index caf40184e..000000000 --- a/src/pt/blackscans/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -ext { - extName = 'Black Scans' - extClass = '.BlackScans' - extVersionCode = 1 -} - -apply from: "$rootDir/common.gradle" diff --git a/src/pt/blackscans/res/mipmap-hdpi/ic_launcher.png b/src/pt/blackscans/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index dbbb59182..000000000 Binary files a/src/pt/blackscans/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackscans/res/mipmap-mdpi/ic_launcher.png b/src/pt/blackscans/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ef73bba4b..000000000 Binary files a/src/pt/blackscans/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackscans/res/mipmap-xhdpi/ic_launcher.png b/src/pt/blackscans/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index 03373237c..000000000 Binary files a/src/pt/blackscans/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackscans/res/mipmap-xxhdpi/ic_launcher.png b/src/pt/blackscans/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 41df90443..000000000 Binary files a/src/pt/blackscans/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackscans/res/mipmap-xxxhdpi/ic_launcher.png b/src/pt/blackscans/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index 8e355c5c3..000000000 Binary files a/src/pt/blackscans/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScans.kt b/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScans.kt deleted file mode 100644 index d908b87af..000000000 --- a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScans.kt +++ /dev/null @@ -1,179 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.blackscans - -import android.annotation.SuppressLint -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.network.POST -import eu.kanade.tachiyomi.network.interceptor.rateLimitHost -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.source.model.Page -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import eu.kanade.tachiyomi.source.online.HttpSource -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.decodeFromString -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.decodeFromStream -import okhttp3.HttpUrl.Companion.toHttpUrl -import okhttp3.MediaType.Companion.toMediaType -import okhttp3.Request -import okhttp3.RequestBody -import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.Response -import okio.Buffer -import rx.Observable -import uy.kohesive.injekt.injectLazy -import java.text.SimpleDateFormat - -class BlackScans : HttpSource() { - - override val name = "Black Scans" - - override val baseUrl = "https://blackscans.site" - - override val lang = "pt-BR" - - override val supportsLatest = true - - override val client = network.cloudflareClient.newBuilder() - .rateLimitHost(API_URL.toHttpUrl(), 2) - .build() - - private val json: Json by injectLazy() - - // ============================== Popular ============================== - - override fun popularMangaRequest(page: Int) = GET("$API_URL/api/series/", headers) - - override fun popularMangaParse(response: Response): MangasPage { - val mangas = response.parseAs>().map { manga -> - SManga.create().apply { - title = manga.title - thumbnail_url = "$API_URL/media/${manga.cover}" - url = "/series/${manga.code}" - } - } - return MangasPage(mangas, false) - } - - // ============================== Latest ============================== - - override fun latestUpdatesRequest(page: Int) = GET("$API_URL/api/series/updates/", headers) - - override fun latestUpdatesParse(response: Response) = popularMangaParse(response) - - // ============================== Search ============================== - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = popularMangaRequest(page) - - override fun searchMangaParse(response: Response) = popularMangaParse(response) - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - if (query.startsWith(PREFIX_SEARCH)) { - val mangaCode = query.substringAfter(PREFIX_SEARCH) - return fetchMangaDetails(SManga.create().apply { url = "/series/$mangaCode" }) - .map { manga -> MangasPage(listOf(manga), false) } - } - - return super.fetchSearchManga(page, query, filters).map { mangasPage -> - val mangas = mangasPage.mangas.filter { manga -> manga.title.contains(query, true) } - mangasPage.copy(mangas) - } - } - - // ============================== Details ============================= - - override fun getMangaUrl(manga: SManga) = "$baseUrl${manga.url}" - - override fun mangaDetailsRequest(manga: SManga) = - POST("$API_URL/api/serie/", headers, manga.createPostPayload()) - - override fun mangaDetailsParse(response: Response): SManga { - return response.parseAs().let { dto -> - SManga.create().apply { - title = dto.title - description = dto.synopsis - thumbnail_url = "$API_URL/media/${dto.cover}" - author = dto.author - artist = dto.artist - genre = dto.genres.joinToString() - url = "/series/${dto.code}" - status = dto.status.toMangaStatus() - } - } - } - - private fun String.toMangaStatus(): Int { - return when (this.lowercase()) { - "ongoing" -> SManga.ONGOING - "completed" -> SManga.COMPLETED - else -> SManga.UNKNOWN - } - } - - // ============================== Chapters ============================ - - override fun getChapterUrl(chapter: SChapter) = "$baseUrl${chapter.url}" - - override fun chapterListRequest(manga: SManga): Request { - val payload = manga.createPostPayload("series_code") - return POST("$API_URL/api/series/chapters/", headers, payload) - } - - override fun chapterListParse(response: Response): List { - val series = response.request.body!!.parseAs() - - return response.parseAs().chapters.map { chapter -> - SChapter.create().apply { - name = chapter.name - date_upload = chapter.uploadAt.toDate() - url = "/series/${series.code}/${chapter.code}" - } - } - } - - // ============================== Pages =============================== - - override fun imageUrlParse(response: Response) = "" - - override fun pageListRequest(chapter: SChapter): Request { - val chapterCode = chapter.url.substringAfterLast("/") - val payload = """{"chapter_code":"$chapterCode"}""" - .toRequestBody("application/json".toMediaType()) - return POST("$API_URL/api/chapter/info/", headers, payload) - } - - override fun pageListParse(response: Response): List { - return response.parseAs().images.mapIndexed { index, imageUrl -> - Page(index, imageUrl = "$API_URL//media/$imageUrl") - } - } - - // ============================== Utils =============================== - - @Serializable - private class SeriesDto(@SerialName("series_code") val code: String) - - private fun SManga.createPostPayload(field: String = "code"): RequestBody { - val mangaCode = url.substringAfterLast("/") - return """{"$field": "$mangaCode"}""".toRequestBody("application/json".toMediaType()) - } - - private inline fun Response.parseAs(): T = use { - json.decodeFromStream(it.body.byteStream()) - } - private inline fun RequestBody.parseAs(): T = - json.decodeFromString(Buffer().also { writeTo(it) }.readUtf8()) - - private fun String.toDate() = - try { dateFormat.parse(this)!!.time } catch (_: Exception) { 0 } - - companion object { - const val API_URL = "https://api.blackscans.site" - const val PREFIX_SEARCH = "id:" - - @SuppressLint("SimpleDateFormat") - val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'") - } -} diff --git a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScansUrlActivity.kt b/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScansUrlActivity.kt deleted file mode 100644 index 3f2b02e16..000000000 --- a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/BlackScansUrlActivity.kt +++ /dev/null @@ -1,37 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.blackscans - -import android.app.Activity -import android.content.ActivityNotFoundException -import android.content.Intent -import android.os.Bundle -import android.util.Log -import kotlin.system.exitProcess - -class BlackScansUrlActivity : Activity() { - - private val tag = javaClass.simpleName - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val pathSegments = intent?.data?.pathSegments - if (pathSegments != null && pathSegments.size > 1) { - val item = pathSegments[1] - val mainIntent = Intent().apply { - action = "eu.kanade.tachiyomi.SEARCH" - putExtra("query", "${BlackScans.PREFIX_SEARCH}$item") - putExtra("filter", packageName) - } - - try { - startActivity(mainIntent) - } catch (e: ActivityNotFoundException) { - Log.e(tag, e.toString()) - } - } else { - Log.e(tag, "could not parse uri from intent $intent") - } - - finish() - exitProcess(0) - } -} diff --git a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/MangaDetailsDto.kt b/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/MangaDetailsDto.kt deleted file mode 100644 index 14b6cb167..000000000 --- a/src/pt/blackscans/src/eu/kanade/tachiyomi/extension/pt/blackscans/MangaDetailsDto.kt +++ /dev/null @@ -1,44 +0,0 @@ -package eu.kanade.tachiyomi.extension.pt.blackscans - -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable -import kotlinx.serialization.json.JsonNames - -@Serializable -class MangaDetailsDto( - val title: String, - val artist: String, - val author: String, - val code: String, - val genres: List, - @SerialName("path_cover") - val cover: String, - val status: String, - val synopsis: String, -) - -@Serializable -class MangaDto( - val code: String, - val title: String, - @JsonNames("path_cover") - val cover: String, -) - -@Serializable -class ChapterList( - val chapters: List, -) - -@Serializable -data class Chapter( - val code: String, - val name: String, - @SerialName("upload_date") - val uploadAt: String, -) - -@Serializable -class PagesDto( - val images: List, -)