From 15ad2058435aa8a43feef23cf7fb786526bb9152 Mon Sep 17 00:00:00 2001 From: Weasy Date: Thu, 3 Oct 2019 02:06:46 +0200 Subject: [PATCH] Add Mangahub.io extension (#1593) * Add Mangahub.io extension * Addressed PR comments --- src/en/mangahub/build.gradle | 12 + .../mangahub/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3435 bytes .../mangahub/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1900 bytes .../mangahub/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3766 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 5606 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 7571 bytes src/en/mangahub/res/web_hi_res_512.png | Bin 0 -> 21536 bytes .../extension/en/mangahub/Mangahub.kt | 267 ++++++++++++++++++ 8 files changed, 279 insertions(+) create mode 100644 src/en/mangahub/build.gradle create mode 100644 src/en/mangahub/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/mangahub/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/mangahub/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/mangahub/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/mangahub/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/mangahub/res/web_hi_res_512.png create mode 100644 src/en/mangahub/src/eu/kanade/tachiyomi/extension/en/mangahub/Mangahub.kt diff --git a/src/en/mangahub/build.gradle b/src/en/mangahub/build.gradle new file mode 100644 index 000000000..825b718c5 --- /dev/null +++ b/src/en/mangahub/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: Mangahub' + pkgNameSuffix = 'en.mangahub' + extClass = '.Mangahub' + extVersionCode = 1 + libVersion = '1.2' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/mangahub/res/mipmap-hdpi/ic_launcher.png b/src/en/mangahub/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..354b23ee7dfa284dc5b5161b762077b98d92e8d1 GIT binary patch literal 3435 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 literal 0 HcmV?d00001 diff --git a/src/en/mangahub/res/mipmap-xxhdpi/ic_launcher.png b/src/en/mangahub/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..1ebaf9c50747ff2d3a344491e214a90d9afe0b11 GIT binary patch literal 5606 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 literal 0 HcmV?d00001 diff --git a/src/en/mangahub/res/web_hi_res_512.png b/src/en/mangahub/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..30eb3d47e3614d199252cd3e14e5a57c12cd8b88 GIT binary patch literal 21536 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 M?!CKeLk^z*ALpjD=l}o! literal 0 HcmV?d00001 diff --git a/src/en/mangahub/src/eu/kanade/tachiyomi/extension/en/mangahub/Mangahub.kt b/src/en/mangahub/src/eu/kanade/tachiyomi/extension/en/mangahub/Mangahub.kt new file mode 100644 index 000000000..f4ae920b9 --- /dev/null +++ b/src/en/mangahub/src/eu/kanade/tachiyomi/extension/en/mangahub/Mangahub.kt @@ -0,0 +1,267 @@ +package eu.kanade.tachiyomi.extension.en.mangahub + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.source.model.* +import eu.kanade.tachiyomi.source.online.ParsedHttpSource +import okhttp3.* +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import java.net.URL +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.* + +class Mangahub : ParsedHttpSource() { + + override val name = "Mangahub" + + override val baseUrl = "https://www.mangahub.io" + + override val lang = "en" + + override val supportsLatest = true + + override fun popularMangaSelector() = "#mangalist div.media-manga.media" + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/popular/page/$page", headers) + } + + override fun latestUpdatesRequest(page: Int): Request { + return GET("$baseUrl/updates/page/$page", headers) + } + + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + + val titleElement = element.select(".media-heading > a").first() + manga.title = titleElement.text() + manga.setUrlWithoutDomain(URL(titleElement.attr("href")).path) + manga.thumbnail_url = element.select("img.manga-thumb.list-item-thumb") + ?.first()?.attr("src") + + return manga + } + + override fun latestUpdatesFromElement(element: Element): SManga { + return popularMangaFromElement(element) + } + + override fun popularMangaNextPageSelector() = "ul.pager li.next > a" + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + + override fun mangaDetailsParse(document: Document): SManga { + val manga = SManga.create() + manga.title = document.select("h1._3xnDj").first().text() + manga.author = document.select("._3QCtP > div:nth-child(2) > div:nth-child(1) > span:nth-child(2)")?.first()?.text() + manga.artist = document.select("._3QCtP > div:nth-child(2) > div:nth-child(2) > span:nth-child(2)")?.first()?.text() + manga.genre = document.select("._3Czbn a")?.joinToString { it.text() } + manga.description = document.select("div#noanim-content-tab-pane-99 p.ZyMp7")?.first()?.text() + manga.thumbnail_url = document.select("img.img-responsive")?.first() + ?.attr("src") + + document.select("._3QCtP > div:nth-child(2) > div:nth-child(3) > span:nth-child(2)")?.first()?.text()?.also { statusText -> + when { + statusText.contains("ongoing", true) -> manga.status = SManga.ONGOING + statusText.contains("completed", true) -> manga.status = SManga.COMPLETED + else -> manga.status = SManga.UNKNOWN + } + } + + return manga + } + + override fun chapterListSelector() = ".tab-content .tab-pane li.list-group-item > a" + + override fun chapterFromElement(element: Element): SChapter { + val chapter = SChapter.create() + chapter.setUrlWithoutDomain(URL(element.attr("href")).path) + chapter.name = element.select("span._8Qtbo span._2IG5P").first().text().replaceFirst("-", "").trim() + chapter.date_upload = element.select("small.UovLc").first()?.text()?.let { parseChapterDate(it) } ?: 0 + return chapter + } + + private fun parseChapterDate(date: String): Long { + return when { + "hours" in date || "just now" in date -> { + Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } + "days" in date -> { + val days = date.replace("days ago", "").trim().toInt() + Calendar.getInstance().apply { + add(Calendar.DAY_OF_YEAR, -days) + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } + "weeks" in date -> { + val weeks = date.replace("weeks ago", "").trim().toInt() + Calendar.getInstance().apply { + add(Calendar.WEEK_OF_YEAR, -weeks) + set(Calendar.HOUR_OF_DAY, 0) + set(Calendar.MINUTE, 0) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + } + else -> { + try { + SimpleDateFormat("MM-dd-yyyy", Locale.US).parse(date).time + } catch (e: ParseException) { + 0L + } + } + } + } + + override fun pageListParse(document: Document): List { + val pageList = mutableListOf() + + val page = document.select("div#mangareader img.PB0mN").first() + val pageUrl = page.attr("src") + val extension = pageUrl.split(".").last() + val pageRoot = pageUrl.replaceAfterLast("/", "") + val numPages = page.nextElementSibling().text().split("/").last().toInt() + + for (i in 1..numPages) { + pageList.add(Page(i, "", "$pageRoot$i.$extension")) + } + + return pageList + } + + override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException("Not used") + + //https://mangahub.io/search/page/1?q=a&order=POPULAR&genre=all + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = HttpUrl.parse("$baseUrl/search/page/$page")?.newBuilder()!!.addQueryParameter("q", query) + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is OrderBy -> { + val order = filter.values[filter.state] + url.addQueryParameter("order", order.key) + } + is GenreList -> { + val genre = filter.values[filter.state] + url.addQueryParameter("genre", genre.key) + } + } + } + return GET(url.toString(), headers) + } + + override fun searchMangaSelector() = "div#mangalist" + + override fun searchMangaFromElement(element: Element): SManga { + return popularMangaFromElement(element) + } + + private class Genre(title: String, val key: String) : Filter.TriState(title) { + override fun toString(): String { + return name + } + } + + private class Order(title: String, val key: String) : Filter.TriState(title) { + override fun toString(): String { + return name + } + } + + private class OrderBy(orders: Array) : Filter.Select("Order", orders,0) + private class GenreList(genres: Array) : Filter.Select("Genres", genres, 0) + + override fun getFilterList() = FilterList( + OrderBy(orderBy), + GenreList(genres) + ) + + private val orderBy = arrayOf( + Order("Popular", "POPULAR"), + Order("Updates", "LATEST"), + Order("A-Z", "ALPHABET"), + Order("New", "NEW"), + Order("Completed", "COMPLETED") + ) + + private val genres = arrayOf( + Genre("All Genres", "all"), + Genre("[no chapters]", "no-chapters"), + Genre("4-Koma", "4-koma"), + Genre("Action", "action"), + Genre("Adult", "adult"), + Genre("Adventure", "adventure"), + Genre("Award Winning", "award-winning"), + Genre("Comedy", "comedy"), + Genre("Cooking", "cooking"), + Genre("Crime", "crime"), + Genre("Demons", "demons"), + Genre("Doujinshi", "doujinshi"), + Genre("Drama", "drama"), + Genre("Ecchi", "ecchi"), + Genre("Fantasy", "fantasy"), + Genre("Food", "food"), + 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("Magical Girls", "magical-girls"), + Genre("Manhua", "manhua"), + Genre("Manhwa", "manhwa"), + Genre("Martial arts", "martial-arts"), + Genre("Mature", "mature"), + Genre("Mecha", "mecha"), + Genre("Medical", "medical"), + Genre("Military", "military"), + Genre("Music", "music"), + Genre("Mystery", "mystery"), + Genre("One shot", "one-shot"), + Genre("Oneshot", "oneshot"), + Genre("Parody", "parody"), + Genre("Police", "police"), + Genre("Psychological", "psychological"), + Genre("Romance", "romance"), + Genre("School life", "school-life"), + Genre("Sci fi", "sci-fi"), + Genre("Seinen", "seinen"), + Genre("Shotacon", "shotacon"), + Genre("Shoujo", "shoujo"), + Genre("Shoujo ai", "shoujo-ai"), + Genre("Shoujoai", "shoujoai"), + Genre("Shounen", "shounen"), + Genre("Shounen ai", "shounen-ai"), + Genre("Shounenai", "shounenai"), + Genre("Slice of life", "slice-of-life"), + Genre("Smut", "smut"), + Genre("Space", "space"), + Genre("Sports", "sports"), + Genre("Super Power", "super-power"), + Genre("Superhero", "superhero"), + Genre("Supernatural", "supernatural"), + Genre("Thriller", "thriller"), + Genre("Tragedy", "tragedy"), + Genre("Vampire", "vampire"), + Genre("Webtoon", "webtoon"), + Genre("Webtoons", "webtoons"), + Genre("Wuxia", "wuxia"), + Genre("Yaoi", "yaoi"), + Genre("Yuri", "yuri") + ) +}