From b2c231eaea107b3a28c7d51480a1dfd8b810432c Mon Sep 17 00:00:00 2001 From: DitFranXX <45893338+DitFranXX@users.noreply.github.com> Date: Mon, 15 Apr 2019 05:46:45 +0900 Subject: [PATCH] Added English Source: LHTranslation (#1025) Close #1014 This site is really similar to rawLH. most of codes are CCCV-ed from rawLH --- src/en/lhtranslation/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 1836 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1274 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 2447 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 3850 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 6047 bytes src/en/lhtranslation/res/web_hi_res_512.png | Bin 0 -> 12571 bytes .../en/lhtranslation/LHTranslation.kt | 235 ++++++++++++++++++ 8 files changed, 247 insertions(+) create mode 100644 src/en/lhtranslation/build.gradle create mode 100644 src/en/lhtranslation/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/lhtranslation/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/lhtranslation/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/lhtranslation/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/lhtranslation/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/lhtranslation/res/web_hi_res_512.png create mode 100644 src/en/lhtranslation/src/eu/kanade/tachiyomi/extension/en/lhtranslation/LHTranslation.kt diff --git a/src/en/lhtranslation/build.gradle b/src/en/lhtranslation/build.gradle new file mode 100644 index 000000000..18251d2e5 --- /dev/null +++ b/src/en/lhtranslation/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + appName = 'Tachiyomi: LHTranslation' + pkgNameSuffix = 'en.lhtranslation' + extClass = '.LHTranslation' + extVersionCode = 1 + libVersion = '1.2' +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/lhtranslation/res/mipmap-hdpi/ic_launcher.png b/src/en/lhtranslation/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..671750f9570565de7742eb277104def81d90b544 GIT binary patch literal 1836 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%0Dn9VmifW+UypC%c8gPLG6 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 pb5;M(Tz+QY_8;f + when (filter) { + is Status -> { + val status = arrayOf("", "1", "2")[filter.state] + url.addQueryParameter("m_status", status) + } + is TextField -> url.addQueryParameter(filter.key, filter.state) + is GenreList -> { + + var genre = String() + var ungenre = String() + + filter.state.forEach { + if (it.isIncluded()) genre += ",${it.name}" + if (it.isExcluded()) ungenre += ",${it.name}" + } + url.addQueryParameter("genre", genre) + url.addQueryParameter("ungenre", ungenre) + } + } + } + return GET(url.toString(), headers) + } + + override fun latestUpdatesRequest(page: Int): Request = + GET("$baseUrl/manga-list.html?listType=pagination&page=$page&artist=&author=&group=&m_status=&name=&genre=&sort=last_update&sort_type=DESC") + + override fun popularMangaSelector() = "div.media" + + override fun latestUpdatesSelector() = popularMangaSelector() + + override fun searchMangaSelector() = popularMangaSelector() + + override fun popularMangaFromElement(element: Element): SManga { + val manga = SManga.create() + element.select("h3 > a").first().let { + manga.setUrlWithoutDomain("/" + it.attr("href")) + manga.title = it.text() + } + return manga + } + + override fun latestUpdatesFromElement(element: Element): SManga = + popularMangaFromElement(element) + + override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) + + override fun popularMangaNextPageSelector() = "a:contains(ยป)" + + override fun latestUpdatesNextPageSelector() = popularMangaNextPageSelector() + + override fun searchMangaNextPageSelector() = popularMangaNextPageSelector() + + override fun mangaDetailsParse(document: Document): SManga { + val manga = SManga.create() + val infoElement = document.select("div.row").first() + val genres = infoElement.select("ul.manga-info li:nth-child(5) small a")?.map { + it.text() + } + manga.author = infoElement.select("small a.btn.btn-xs.btn-info").first()?.text() + manga.genre = genres?.joinToString(", ") + manga.status = parseStatus(infoElement.select("a.btn.btn-xs.btn-success").first().text()) + + manga.description = document.select("div.row > p")?.text()?.trim() + val imgUrl = document.select("img.thumbnail").first()?.attr("src") + if (imgUrl!!.startsWith("app/")) { + manga.thumbnail_url = "$baseUrl/$imgUrl" + } else { + manga.thumbnail_url = imgUrl + } + return manga + } + + private fun parseStatus(element: String): Int = when { + element.contains("Completed") -> SManga.COMPLETED + element.contains("Ongoing") -> SManga.ONGOING + else -> SManga.UNKNOWN + } + + override fun chapterListSelector() = ".list-chapters .list-wrap p" + + override fun chapterFromElement(element: Element): SChapter { + val urlElement = element.select(".titleLink a").first() + val timeElement = element.select(".pubDate time").first() + + val chapter = SChapter.create() + chapter.setUrlWithoutDomain("/" + urlElement.attr("href")) + chapter.name = urlElement.text() + chapter.date_upload = parseChapterDate(timeElement.text()) + return chapter + } + + private fun parseChapterDate(date: String): Long { + val value = date.split(' ')[0].toInt() + return when { + "minute(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.HOUR_OF_DAY, value * -1) + set(Calendar.MINUTE, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + "hour(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.HOUR_OF_DAY, value * -1) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + "day(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.DATE, value * -1) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + "week(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.DATE, value * 7 * -1) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + "month(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.MONTH, value * -1) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + "year(s) ago" in date -> Calendar.getInstance().apply { + add(Calendar.YEAR, value * -1) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + }.timeInMillis + else -> { + return 0 + } + } + } + + override fun pageListParse(document: Document): List { + val pages = mutableListOf() + document.select(".chapter-img").forEach { + val url = it.attr("src") + if (url != "") { + pages.add(Page(pages.size, "", url)) + } + } + return pages + } + + override fun imageUrlParse(document: Document) = "" + + override fun imageRequest(page: Page): Request { + val imgHeader = Headers.Builder().apply { + add("Referer", baseUrl) + }.build() + return GET(page.imageUrl!!, imgHeader) + } + + private class TextField(name: String, val key: String) : Filter.Text(name) + private class Status : Filter.Select("Status", arrayOf("Any", "Completed", "Ongoing")) + private class GenreList(genres: List) : Filter.Group("Genre", genres) + private class Genre(name: String, val id: String = name.replace(' ', '+')) : Filter.TriState(name) + + // TODO: Country + override fun getFilterList() = FilterList( + TextField("Author", "author"), + TextField("Group", "group"), + Status(), + GenreList(getGenreList()) + ) + + // [...document.querySelectorAll("div.panel-body a")].map((el,i) => `Genre("${el.innerText.trim()}")`).join(',\n') + // on https://lhtranslation.net/search + private fun getGenreList() = listOf( + Genre("Action"), + Genre("18+"), + Genre("Adult"), + Genre("Anime"), + Genre("Comedy"), + Genre("Comic"), + Genre("Doujinshi"), + Genre("Drama"), + Genre("Ecchi"), + Genre("Fantasy"), + Genre("Gender Bender"), + Genre("Harem"), + Genre("Historical"), + Genre("Horror"), + Genre("Josei"), + Genre("Live action"), + Genre("Manhua"), + Genre("Manhwa"), + Genre("Martial Art"), + Genre("Mature"), + Genre("Mecha"), + Genre("Mystery"), + Genre("One shot"), + Genre("Psychological"), + Genre("Romance"), + Genre("School Life"), + Genre("Sci-fi"), + Genre("Seinen"), + Genre("Shoujo"), + Genre("Shojou Ai"), + Genre("Shounen"), + Genre("Shounen Ai"), + Genre("Slice of Life"), + Genre("Smut"), + Genre("Sports"), + Genre("Supernatural"), + Genre("Tragedy"), + Genre("Adventure"), + Genre("Yaoi") + ) +}