From 9936531d44cef25c0099c62f298448bf754e8fea Mon Sep 17 00:00:00 2001 From: KenjieDec <65448230+KenjieDec@users.noreply.github.com> Date: Thu, 2 May 2024 08:13:03 +0700 Subject: [PATCH] Added Manga18Me (#2647) * Added Manga18Me * Update Manga18Me.kt * Update Manga18Me.kt * Fixed search search pages * Move to all * Language move en -> all --- src/all/manga18me/build.gradle | 9 + .../manga18me/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3476 bytes .../manga18me/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1942 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4583 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8836 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12250 bytes .../extension/all/manga18me/Filters.kt | 84 ++++++++ .../extension/all/manga18me/M18MFactory.kt | 12 ++ .../extension/all/manga18me/Manga18Me.kt | 194 ++++++++++++++++++ 9 files changed, 299 insertions(+) create mode 100644 src/all/manga18me/build.gradle create mode 100644 src/all/manga18me/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/manga18me/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/manga18me/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/manga18me/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/manga18me/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt create mode 100644 src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/M18MFactory.kt create mode 100644 src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt diff --git a/src/all/manga18me/build.gradle b/src/all/manga18me/build.gradle new file mode 100644 index 000000000..59b8f4fff --- /dev/null +++ b/src/all/manga18me/build.gradle @@ -0,0 +1,9 @@ +ext { + extName = 'Manga18Me' + extClass = '.M18MFactory' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" + diff --git a/src/all/manga18me/res/mipmap-hdpi/ic_launcher.png b/src/all/manga18me/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..566ee3d559b156122eadafb46284747daca8e0b1 GIT binary patch literal 3476 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 literal 0 HcmV?d00001 diff --git a/src/all/manga18me/res/mipmap-xhdpi/ic_launcher.png b/src/all/manga18me/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..c3206829f9233792a225bf96d4e97aea51d01c16 GIT binary patch literal 4583 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 literal 0 HcmV?d00001 diff --git a/src/all/manga18me/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/manga18me/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2980765d557cbc4d3cccdeb0e5173fa72b505105 GIT binary patch literal 12250 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 IkT(tbKb(k^G5`Po literal 0 HcmV?d00001 diff --git a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt new file mode 100644 index 000000000..56887ac01 --- /dev/null +++ b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Filters.kt @@ -0,0 +1,84 @@ +package eu.kanade.tachiyomi.extension.all.manga18me + +import eu.kanade.tachiyomi.source.model.Filter +import eu.kanade.tachiyomi.source.model.FilterList + +fun getFilters(): FilterList { + return FilterList( + Filter.Header(name = "The filter is ignored when using text search."), + GenreFilter("Genre", getGenresList), + SortFilter("Sort", getSortsList), + RawFilter("Raw"), + CompletedFilter("Completed"), + ) +} + +/** Filters **/ + +internal class GenreFilter(name: String, genreList: List>, state: Int = 0) : + SelectFilter(name, genreList, state) + +internal class SortFilter(name: String, sortList: List>, state: Int = 0) : + SelectFilter(name, sortList, state) + +internal class CompletedFilter(name: String) : CheckBoxFilter(name) + +internal class RawFilter(name: String) : CheckBoxFilter(name) + +internal open class CheckBoxFilter(name: String, val value: String = "") : Filter.CheckBox(name) + +internal open class SelectFilter(name: String, private val vals: List>, state: Int = 0) : + Filter.Select(name, vals.map { it.first }.toTypedArray(), state) { + fun getValue() = vals[state].second +} + +/** Filters Data **/ +private val getGenresList: List> = listOf( + Pair("Manga", "manga"), + Pair("Drama", "drama"), + Pair("Mature", "mature"), + Pair("Romance", "romance"), + Pair("Adult", "adult"), + Pair("Hentai", "hentai"), + Pair("Comedy", "comedy"), + Pair("Ecchi", "ecchi"), + Pair("School Life", "school-life"), + Pair("Shounen", "shounen"), + Pair("Slice of Life", "slice-of-life"), + Pair("Seinen", "seinen"), + Pair("Yuri", "yuri"), + Pair("Action", "action"), + Pair("Fantasy", "fantasy"), + Pair("Harem", "harem"), + Pair("Supernatural", "supernatural"), + Pair("Sci-Fi", "sci-fi"), + Pair("Isekai", "isekai"), + Pair("Shoujo", "shoujo"), + Pair("Horror", "horror"), + Pair("Psychological", "psychological"), + Pair("Smut", "smut"), + Pair("Tragedy", "tragedy"), + Pair("Raw", "raw"), + Pair("Historical", "historical"), + Pair("Adventure", "adventure"), + Pair("Martial Arts", "martial-arts"), + Pair("Manhwa", "manhwa"), + Pair("Manhua", "manhua"), + Pair("Mystery", "mystery"), + Pair("BL", "bl"), + Pair("Yaoi", "yaoi"), + Pair("Gender Bender", "gender-bender"), + Pair("Thriller", "thriller"), + Pair("Josei", "josei"), + Pair("Sports", "sports"), + Pair("GL", "gl"), + Pair("Family", "family"), + Pair("Magic", "magic"), +) + +private val getSortsList: List> = listOf( + Pair("Latest", "latest"), + Pair("A-Z", "alphabet"), + Pair("Rating", "rating"), + Pair("Trending", "trending"), +) diff --git a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/M18MFactory.kt b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/M18MFactory.kt new file mode 100644 index 000000000..a2c0e2d53 --- /dev/null +++ b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/M18MFactory.kt @@ -0,0 +1,12 @@ +package eu.kanade.tachiyomi.extension.all.manga18me + +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +class M18MFactory : SourceFactory { + override fun createSources(): List = + listOf( + Manga18Me("all"), + Manga18Me("en"), + ) +} diff --git a/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt new file mode 100644 index 000000000..bef68bcfc --- /dev/null +++ b/src/all/manga18me/src/eu/kanade/tachiyomi/extension/all/manga18me/Manga18Me.kt @@ -0,0 +1,194 @@ +package eu.kanade.tachiyomi.extension.all.manga18me + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.FilterList +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.lang.Exception +import java.text.SimpleDateFormat +import java.util.Locale + +open class Manga18Me(override val lang: String) : ParsedHttpSource() { + + override val name = "Manga18.me" + + override val baseUrl = "https://manga18.me" + + override val supportsLatest = true + + override val client = network.cloudflareClient + + override fun headersBuilder() = Headers.Builder().apply { + add("Referer", "$baseUrl/") + } + + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/manga/$page?orderby=trending", headers) + } + + override fun popularMangaParse(response: Response): MangasPage { + val document = response.asJsoup() + + val entries = document.select(popularMangaSelector()) + val hasNextPage = document.selectFirst(popularMangaNextPageSelector()) != null + + if (lang == "en") { + val searchText = document.selectFirst("div.section-heading h1")?.text() ?: "" + val raw = document.selectFirst("div.canonical")?.attr("href") ?: "" + return MangasPage( + entries + .filter { it -> + val title = it.selectFirst("div.item-thumb.wleft a")?.attr("href") ?: "" + + searchText.lowercase().contains("raw") || + raw.contains("raw") || + !title.contains("raw") + } + .map(::popularMangaFromElement), + hasNextPage, + ) + } + + return MangasPage(entries.map(::popularMangaFromElement), hasNextPage) + } + + override fun popularMangaSelector() = "div.page-item-detail" + override fun popularMangaNextPageSelector() = ".next" + + override fun popularMangaFromElement(element: Element) = SManga.create().apply { + setUrlWithoutDomain(element.selectFirst("a")!!.absUrl("href")) + title = element.selectFirst("div.item-thumb.wleft a")!!.attr("title") + thumbnail_url = element.selectFirst("img")?.absUrl("src") + } + + override fun latestUpdatesRequest(page: Int): Request { + return GET("$baseUrl/manga/$page?orderby=latest", headers) + } + + override fun latestUpdatesParse(response: Response) = popularMangaParse(response) + override fun latestUpdatesSelector() = popularMangaSelector() + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + override fun latestUpdatesFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = baseUrl.toHttpUrl().newBuilder().apply { + if (query.isEmpty()) { + var completed = false + var raw = false + var genre = "" + filters.forEach { + when (it) { + is GenreFilter -> { + genre = it.getValue() + } + + is CompletedFilter -> { + completed = it.state + } + + is RawFilter -> { + raw = it.state + } + + is SortFilter -> { + addQueryParameter("orderby", it.getValue()) + } + + else -> {} + } + } + if (raw) { + addPathSegment("raw") + } else if (completed) { + addPathSegment("completed") + } else { + if (genre != "manga") addPathSegment("genre") + addPathSegment(genre) + } + addPathSegment(page.toString()) + } else { + addPathSegment("search") + addQueryParameter("q", query) + addQueryParameter("page", page.toString()) + } + }.build() + + return GET(url, headers) + } + + override fun searchMangaParse(response: Response) = popularMangaParse(response) + override fun searchMangaSelector() = popularMangaSelector() + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun getFilterList() = getFilters() + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + val info = document.selectFirst("div.post_content")!! + + title = document.select("div.post-title.wleft > h1").text() + description = buildString { + document.select("div.ss-manga > p") + .eachText().onEach { + append(it.trim()) + append("\n\n") + } + + info.selectFirst("div.post-content_item.wleft:contains(Alternative) div.summary-content") + ?.text() + ?.takeIf { it != "Updating" && it.isNotEmpty() } + ?.let { + append("Alternative Names:\n") + append(it.trim()) + } + } + status = when (info.select("div.post-content_item.wleft:contains(Status) div.summary-content").text()) { + "Ongoing" -> SManga.ONGOING + "Completed" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + author = info.selectFirst("div.href-content.artist-content > a")?.text()?.takeIf { it != "Updating" } + artist = info.selectFirst("div.href-content.artist-content > a")?.text()?.takeIf { it != "Updating" } + genre = info.select("div.href-content.genres-content > a[href*=/manga-list/]").eachText().joinToString() + thumbnail_url = document.selectFirst("div.summary_image > img")?.absUrl("src") + } + + override fun chapterListSelector() = "ul.row-content-chapter.wleft .a-h.wleft" + + private val dateFormat = SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH) + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + element.selectFirst("a")!!.run { + setUrlWithoutDomain(absUrl("href")) + name = text() + } + date_upload = try { + dateFormat.parse(element.selectFirst("span")!!.text())!!.time + } catch (_: Exception) { + 0L + } + } + + override fun pageListParse(document: Document): List { + val contents = document.select("div.read-content.wleft img") + if (contents.isEmpty()) { + throw Exception("Unable to find script with image data") + } + + return contents.mapIndexed { idx, image -> + val imageUrl = image.attr("src") + Page(idx, imageUrl = imageUrl) + } + } + override fun imageUrlParse(document: Document) = throw UnsupportedOperationException() +}