diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/madara/manhwasmen/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/mipmap-hdpi/ic_launcher.png rename to multisrc/overrides/madara/manhwasmen/res/mipmap-hdpi/ic_launcher.png diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/madara/manhwasmen/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/mipmap-mdpi/ic_launcher.png rename to multisrc/overrides/madara/manhwasmen/res/mipmap-mdpi/ic_launcher.png diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwasmen/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xhdpi/ic_launcher.png rename to multisrc/overrides/madara/manhwasmen/res/mipmap-xhdpi/ic_launcher.png diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwasmen/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xxhdpi/ic_launcher.png rename to multisrc/overrides/madara/manhwasmen/res/mipmap-xxhdpi/ic_launcher.png diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/madara/manhwasmen/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/mipmap-xxxhdpi/ic_launcher.png rename to multisrc/overrides/madara/manhwasmen/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/multisrc/overrides/mmrcms/manhwasmen/res/web_hi_res_512.png b/multisrc/overrides/madara/manhwasmen/res/web_hi_res_512.png similarity index 100% rename from multisrc/overrides/mmrcms/manhwasmen/res/web_hi_res_512.png rename to multisrc/overrides/madara/manhwasmen/res/web_hi_res_512.png diff --git a/multisrc/overrides/madara/manhwasmen/src/ManhwasMen.kt b/multisrc/overrides/madara/manhwasmen/src/ManhwasMen.kt new file mode 100644 index 000000000..51a5cb5f4 --- /dev/null +++ b/multisrc/overrides/madara/manhwasmen/src/ManhwasMen.kt @@ -0,0 +1,236 @@ +package eu.kanade.tachiyomi.extension.en.manhwasmen + +import eu.kanade.tachiyomi.multisrc.madara.Madara +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 okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element + +class ManhwasMen : Madara("Manhwas Men", "https://manhwas.men", "en") { + override val versionId = 2 + + override val fetchGenres = false + override val sendViewCount = false + override val useLoadMoreSearch = false + + // popular + override fun popularMangaSelector() = "div.col-6" + override val popularMangaUrlSelector = ".series-box a" + override fun popularMangaNextPageSelector() = "a[rel=next]" + + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/manga-list?page=$page", headers) + } + + override fun popularMangaFromElement(element: Element): SManga { + return super.popularMangaFromElement(element).apply { + title = element.select(popularMangaUrlSelector).text() + } + } + + // latest + override fun latestUpdatesSelector() = "div.d-flex:nth-child(6) div.col-6" + + override fun latestUpdatesRequest(page: Int): Request { + return GET(baseUrl, headers) + } + + // search + override fun searchMangaSelector() = popularMangaSelector() + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/manga-list".toHttpUrl().newBuilder().apply { + if (query.isEmpty()) { + filters.forEach { filter -> + when (filter) { + is GenreFilter -> { + addQueryParameter("genero", filter.values[filter.state]) + } + else -> {} + } + } + } else { + addQueryParameter("search", query) + } + addQueryParameter("page", "$page") + }.build() + + return GET(url, headers) + } + + // manga details + override fun mangaDetailsParse(document: Document): SManga { + return super.mangaDetailsParse(document).apply { + document.select(mangaDetailsSelectorStatus).last()?.let { + status = when (it.text()) { + in "complete" -> SManga.COMPLETED + in "ongoing" -> SManga.ONGOING + else -> SManga.UNKNOWN + } + } + } + } + + // chapter list + override val chapterUrlSuffix = "" + + override fun chapterFromElement(element: Element): SChapter { + return super.chapterFromElement(element).apply { + name = element.select("p").text() + } + } + + // page list + override val pageListParseSelector = "#chapter_imgs img" + + // genre + private val getGenreList: Array = arrayOf( + "sub-english", + "adult-drama-manhwa-mature", + "drama", + "rape", + "revenge", + "secret-relationship", + "mature", + "office", + "harem", + "romance", + "ecchi", + "noona", + "hypnosis", + "assistant", + "special-ability", + "awakening", + "raws", + "toomics", + "1", + "adult", + "toptoon", + "ntr", + "bullying", + "university", + "comedy-romance-school-life-harem", + "seinen", + "sports", + "virgin", + "pingon-jaja", + "lezhin", + "school-life", + "campus", + "action-drama-fantasy-themes", + "chef", + "drama-fantasy-omniverse-romance", + "vanilla", + "comedy", + "seniorjunior", + "first-love", + "saimin", + "fantasy-harem", + "raw", + "romance-drama-harem", + "fantasy", + "18-adult-smut-manhwa-mature", + "magic", + "murin", + "comedy-romance-school-life-drama-harem", + "romance-drama-mature", + "supernatural", + "laezhin", + "m", + "romance-drama-harem-mature", + "anytoon", + "psychological", + "militar", + "chantaje", + "four-sisters", + "in-laws", + "cheatinginfidelity-hypnosis-married-woman-netorare", + "smut", + "full-color", + "comedia", + "tragedia", + "adult-romance-mature", + "drama-harem-mature", + "adult-drama-seinen-fantasy-harem", + "adult-romance-drama-seinen-harem-mature", + "action", + "mystery", + "thriller", + "girlfriend", + "collegestudent", + "alumni", + "lovetriangle", + "parttimejob", + "female-friend", + "neighbour", + "adult-romance-manhwa-mature", + "married-woman", + "beauty", + "tomics", + "adaptation-drama-romance", + "succubus", + "cosplay", + "adult-romance-drama-harem", + "humiliation", + "two-girl", + "craving", + "aunt", + "housekeeper", + "manhwa", + "sci-fi", + "4-koma", + "adult-manhwa-mature", + "adult-romance-seinen", + "netorare", + "cohabitation-drama-ntr-office", + "vida-universitaria", + "vainilla", + "comedy-romance-mature", + "comedy-romance-drama-harem", + "bodybuilding", + "josei", + "topstar", + "naive-men", + "mistery", + "friend", + "young-woman", + "first-experience", + "romance-drama-fantasy-slice-of-life-raw", + "sisters", + "slice-of-life", + "dance", + "romance-school-life-drama-mature", + "drama-family", + "universidad", + "club", + "bondage", + "work-life", + "romance-school-life-drama-harem", + "big-pennis", + "milf", + "netori", + "yuri", + "adventure", + "adult-romance-drama-smut-manhwa-mature", + "wife", + "temptation", + "sexual-fantasy", + ) + + private class GenreFilter(title: String, genreList: Array) : + Filter.Select(title, genreList) + + override fun getFilterList(): FilterList { + return FilterList( + Filter.Header("Note: Ignored if using text search"), + GenreFilter("Genre", getGenreList), + ) + } +} 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 7d9e72e92..8842eb5b8 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 @@ -289,6 +289,7 @@ class MadaraGenerator : ThemeSourceGenerator { SingleLang("ManhwaClan", "https://manhwaclan.com", "en"), SingleLang("Manhwafull", "https://manhwafull.com", "en", overrideVersionCode = 1), SingleLang("Manhwahentai.me", "https://manhwahentai.me", "en", className = "ManhwahentaiMe", isNsfw = true, overrideVersionCode = 2), + SingleLang("Manhwas Men", "https://manhwas.men", "en", className = "ManhwasMen", isNsfw = true), SingleLang("ManhwaTime", "https://manhwatime.com", "ar"), SingleLang("Manhwatop", "https://manhwatop.com", "en", overrideVersionCode = 2), SingleLang("ManhwaWorld", "https://manhwaworld.com", "en"), 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 a22b64e06..0ea8d9bd5 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 @@ -41,7 +41,6 @@ class MMRCMSSources { SourceData.Single("Read Comics Online", "https://readcomicsonline.ru", "en"), SourceData.Single("Fallen Angels", "https://manga.fascans.com", "en", overrideVersionCode = 2), SourceData.Single("Zahard", "https://zahard.xyz", "en", overrideVersionCode = 2), - SourceData.Single("Manhwas Men", "https://manhwas.men", "en", isNsfw = true, overrideVersionCode = 1), SourceData.Single("Scan FR", "https://www.scan-fr.org", "fr", overrideVersionCode = 2), SourceData.Single("Scan VF", "https://www.scan-vf.net", "fr", overrideVersionCode = 1), SourceData.Single("Scan OP", "https://scan-op.cc", "fr"), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt index 300d6f360..239fe5f70 100644 --- a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt @@ -9,7 +9,6 @@ object SourceData { "https://readcomicsonline.ru" -> """{"name":"Read Comics Online","base_url":"https://readcomicsonline.ru","supports_latest":true,"item_url":"https://readcomicsonline.ru/comic/","categories":[{"id":"1","name":"One Shots \u0026 TPBs"},{"id":"2","name":"DC Comics"},{"id":"3","name":"Marvel Comics"},{"id":"4","name":"Boom Studios"},{"id":"5","name":"Dynamite"},{"id":"6","name":"Rebellion"},{"id":"7","name":"Dark Horse"},{"id":"8","name":"IDW"},{"id":"9","name":"Archie"},{"id":"10","name":"Graphic India"},{"id":"11","name":"Darby Pop"},{"id":"12","name":"Oni Press"},{"id":"13","name":"Icon Comics"},{"id":"14","name":"United Plankton"},{"id":"15","name":"Udon"},{"id":"16","name":"Image Comics"},{"id":"17","name":"Valiant"},{"id":"18","name":"Vertigo"},{"id":"19","name":"Devils Due"},{"id":"20","name":"Aftershock Comics"},{"id":"21","name":"Antartic Press"},{"id":"22","name":"Action Lab"},{"id":"23","name":"American Mythology"},{"id":"24","name":"Zenescope"},{"id":"25","name":"Top Cow"},{"id":"26","name":"Hermes Press"},{"id":"27","name":"451"},{"id":"28","name":"Black Mask"},{"id":"29","name":"Chapterhouse Comics"},{"id":"30","name":"Red 5"},{"id":"31","name":"Heavy Metal"},{"id":"32","name":"Bongo"},{"id":"33","name":"Top Shelf"},{"id":"34","name":"Bubble"},{"id":"35","name":"Boundless"},{"id":"36","name":"Avatar Press"},{"id":"37","name":"Space Goat Productions"},{"id":"38","name":"BroadSword Comics"},{"id":"39","name":"AAM-Markosia"},{"id":"40","name":"Fantagraphics"},{"id":"41","name":"Aspen"},{"id":"42","name":"American Gothic Press"},{"id":"43","name":"Vault"},{"id":"44","name":"215 Ink"},{"id":"45","name":"Abstract Studio"},{"id":"46","name":"Albatross"},{"id":"47","name":"ARH Comix"},{"id":"48","name":"Legendary Comics"},{"id":"49","name":"Monkeybrain"},{"id":"50","name":"Joe Books"},{"id":"51","name":"MAD"},{"id":"52","name":"Comics Experience"},{"id":"53","name":"Alterna Comics"},{"id":"54","name":"Lion Forge"},{"id":"55","name":"Benitez"},{"id":"56","name":"Storm King"},{"id":"57","name":"Sucker"},{"id":"58","name":"Amryl Entertainment"},{"id":"59","name":"Ahoy Comics"},{"id":"60","name":"Mad Cave"},{"id":"61","name":"Coffin Comics"},{"id":"62","name":"Magnetic Press"},{"id":"63","name":"Ablaze"},{"id":"64","name":"Europe Comics"},{"id":"65","name":"Humanoids"},{"id":"66","name":"TKO"},{"id":"67","name":"Soleil"},{"id":"68","name":"SAF Comics"},{"id":"69","name":"Scholastic"},{"id":"70","name":"Upshot"},{"id":"71","name":"Stranger Comics"},{"id":"72","name":"Inverse"},{"id":"73","name":"Virus"}]}""" "https://manga.fascans.com" -> """{"name":"Fallen Angels","base_url":"https://manga.fascans.com","supports_latest":true,"item_url":"https://manga.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"4-Koma"},{"id":"34","name":"Cooking"}]}""" "https://zahard.xyz" -> """{"name":"Zahard","base_url":"https://zahard.xyz","supports_latest":true,"item_url":"https://zahard.xyz/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}""" - "https://manhwas.men" -> """{"name":"Manhwas Men","base_url":"https://manhwas.men","supports_latest":true,"item_url":"https://manhwas.men/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"tag","name":"前女友变女佣"},{"id":"four-sisters","name":"Four sisters"},{"id":"in-laws","name":"in-laws"},{"id":"raws","name":"raws"},{"id":"adult","name":"Adult"},{"id":"raw","name":"RAW"},{"id":"drama","name":"Drama"},{"id":"romance","name":"Romance"},{"id":"manhwa","name":"Manhwa"},{"id":"mature","name":"Mature"},{"id":"sub-english","name":"Sub English"},{"id":"seinen","name":"Seinen"},{"id":"smut","name":"Smut"},{"id":"harem","name":"Harem"},{"id":"toptoon","name":"toptoon"},{"id":"ntr","name":"NTR"}]}""" "https://www.scan-fr.org" -> """{"name":"Scan FR","base_url":"https://www.scan-fr.org","supports_latest":true,"item_url":"https://www.scan-fr.org/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"},{"id":"29","name":"BD Occidentale"},{"id":"30","name":"Manhwa"},{"id":"31","name":"Action"},{"id":"32","name":"Aventure"}]}""" "https://www.scan-vf.net" -> """{"name":"Scan VF","base_url":"https://www.scan-vf.net","supports_latest":true,"item_url":"https://www.scan-vf.net/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}]}""" "https://scan-op.cc" -> """{"name":"Scan OP","base_url":"https://scan-op.cc","supports_latest":true,"item_url":"https://scan-op.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"}],"tags":[{"id":"nouveau","name":"nouveau"}]}"""