From 84aaf70e0e1d48a88f2e20a9b213753af3eaf464 Mon Sep 17 00:00:00 2001 From: beerpsi <92439990+beerpiss@users.noreply.github.com> Date: Fri, 5 Aug 2022 20:27:17 +0700 Subject: [PATCH] =?UTF-8?q?New=20source:=20Truy=E1=BB=87n=20Tranh=208=20(#?= =?UTF-8?q?12846)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * New source: Truyện Tranh 8 * Removing trailing space from user agent --- src/vi/truyentranh8/AndroidManifest.xml | 24 ++ src/vi/truyentranh8/build.gradle | 12 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2133 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1121 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 3170 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6265 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9341 bytes src/vi/truyentranh8/res/web_hi_res_512.png | Bin 0 -> 46078 bytes .../extension/vi/truyentranh8/TruyenTranh8.kt | 404 ++++++++++++++++++ .../truyentranh8/TruyenTranh8UrlActivity.kt | 36 ++ 10 files changed, 476 insertions(+) create mode 100644 src/vi/truyentranh8/AndroidManifest.xml create mode 100644 src/vi/truyentranh8/build.gradle create mode 100644 src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/vi/truyentranh8/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/vi/truyentranh8/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/vi/truyentranh8/res/web_hi_res_512.png create mode 100644 src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt create mode 100644 src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt diff --git a/src/vi/truyentranh8/AndroidManifest.xml b/src/vi/truyentranh8/AndroidManifest.xml new file mode 100644 index 000000000..aeb21ac92 --- /dev/null +++ b/src/vi/truyentranh8/AndroidManifest.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/vi/truyentranh8/build.gradle b/src/vi/truyentranh8/build.gradle new file mode 100644 index 000000000..ad2d7c42c --- /dev/null +++ b/src/vi/truyentranh8/build.gradle @@ -0,0 +1,12 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +ext { + extName = 'Truyện Tranh 8' + pkgNameSuffix = 'vi.truyentranh8' + extClass = '.TruyenTranh8' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d3256b65ef8da62e5ed0f638d2778ec2b6a72f64 GIT binary patch literal 2133 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 literal 0 HcmV?d00001 diff --git a/src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d550acddd3ef3ae6e0e0d8c42801ad104ad109c4 GIT binary patch literal 3170 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 literal 0 HcmV?d00001 diff --git a/src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png b/src/vi/truyentranh8/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6183b98cd1b1012a0134491b918716e8f90f8c7e GIT binary patch literal 6265 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 literal 0 HcmV?d00001 diff --git a/src/vi/truyentranh8/res/web_hi_res_512.png b/src/vi/truyentranh8/res/web_hi_res_512.png new file mode 100644 index 0000000000000000000000000000000000000000..0f11492397184f2015f709d1191a196e5f31c6c3 GIT binary patch literal 46078 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�#?H{Y+z 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 literal 0 HcmV?d00001 diff --git a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt new file mode 100644 index 000000000..54218c9e9 --- /dev/null +++ b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8.kt @@ -0,0 +1,404 @@ +package eu.kanade.tachiyomi.extension.vi.truyentranh8 + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.source.model.Filter +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 okhttp3.Headers +import okhttp3.HttpUrl.Companion.toHttpUrl +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import org.jsoup.select.Evaluator +import rx.Observable +import java.text.SimpleDateFormat +import java.util.Locale +import java.util.TimeZone +import java.util.concurrent.TimeUnit + +class TruyenTranh8 : ParsedHttpSource() { + + override val name = "Truyện Tranh 8" + + override val baseUrl = "http://truyentranh86.com" + + override val lang = "vi" + + override val supportsLatest = true + + override val client = network.cloudflareClient.newBuilder() + .rateLimit(1, 2, TimeUnit.SECONDS) + .build() + + override fun headersBuilder() = Headers.Builder() + .add("Referer", "$baseUrl/") + .add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0") + + private val dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US).apply { + timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh") + } + + private val floatingNumberRegex = Regex("""([+-]?(?:[0-9]*[.])?[0-9]+)""") + + override fun popularMangaRequest(page: Int) = GET( + baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("search.php") + addQueryParameter("act", "search") + addQueryParameter("sort", "xem") + addQueryParameter("view", "thumb") + addQueryParameter("page", page.toString()) + }.build().toString(), + headers + ) + + override fun popularMangaNextPageSelector(): String = "div#tblChap p.page a:contains(Cuối)" + + override fun popularMangaSelector(): String = "div#tblChap figure.col" + + override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { + setUrlWithoutDomain(element.select("figcaption h3 a").first().attr("href")) + title = element.select("figcaption h3 a").first().text().replace("[TT8] ", "") + thumbnail_url = element.select("img").first().attr("abs:src") + } + + override fun latestUpdatesRequest(page: Int) = GET( + baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("search.php") + addQueryParameter("act", "search") + addQueryParameter("sort", "chap") + addQueryParameter("view", "thumb") + addQueryParameter("page", page.toString()) + }.build().toString(), + headers + ) + + override fun latestUpdatesNextPageSelector(): String = popularMangaNextPageSelector() + + override fun latestUpdatesSelector(): String = popularMangaSelector() + + override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element) + + override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { + return when { + query.startsWith(PREFIX_ID_SEARCH) -> { + val id = query.removePrefix(PREFIX_ID_SEARCH).trim() + if (id.isEmpty()) { + throw Exception("ID tìm kiếm không hợp lệ.") + } + fetchMangaDetails(SManga.create().apply { url = "/truyen-tranh/$id/" }) + .map { MangasPage(listOf(it), false) } + } + else -> super.fetchSearchManga(page, query, filters) + } + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList) = GET( + baseUrl.toHttpUrl().newBuilder().apply { + addPathSegment("search.php") + addQueryParameter("act", "timnangcao") + addQueryParameter("view", "thumb") + addQueryParameter("page", page.toString()) + + if (query.isNotEmpty()) { + addQueryParameter("q", query) + } + + (if (filters.isEmpty()) getFilterList() else filters).forEach { filter -> + when (filter) { + is SortByFilter -> addQueryParameter("sort", filter.toUriPart()) + is SearchTypeFilter -> addQueryParameter("andor", filter.toUriPart()) + is ForFilter -> if (filter.state != 0) { + addQueryParameter("danhcho", filter.toUriPart()) + } + is AgeFilter -> if (filter.state != 0) { + addQueryParameter("DoTuoi", filter.toUriPart()) + } + is StatusFilter -> if (filter.state != 0) { + addQueryParameter("TinhTrang", filter.toUriPart()) + } + is OriginFilter -> if (filter.state != 0) { + addQueryParameter("quocgia", filter.toUriPart()) + } + is ReadingModeFilter -> if (filter.state != 0) { + addQueryParameter("KieuDoc", filter.toUriPart()) + } + is YearFilter -> if (filter.state.isNotEmpty()) { + addQueryParameter("NamPhaHanh", filter.state) + } + is UserFilter -> if (filter.state.isNotEmpty()) { + addQueryParameter("u", filter.state) + } + is AuthorFilter -> if (filter.state.isNotEmpty()) { + addQueryParameter("TacGia", filter.state) + } + is SourceFilter -> if (filter.state.isNotEmpty()) { + addQueryParameter("Nguon", filter.state) + } + is GenreList -> { + addQueryParameter( + "baogom", + filter.state + .filter { it.state == Filter.TriState.STATE_INCLUDE } + .joinToString(",") { it.id } + ) + addQueryParameter( + "khonggom", + filter.state + .filter { it.state == Filter.TriState.STATE_EXCLUDE } + .joinToString(",") { it.id } + ) + } + else -> {} + } + } + }.build().toString(), + headers + ) + + override fun searchMangaNextPageSelector(): String = popularMangaNextPageSelector() + + override fun searchMangaSelector(): String = popularMangaSelector() + + override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element) + + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + title = document.select("h1.fs-5").first().text().replace("Truyện Tranh ", "") + + author = document.select("span[itemprop=author]") + .filter { it.text().isNotEmpty() } + .joinToString(", ") { it.text() } + + thumbnail_url = document.select("img.thumbnail").first().attr("abs:src") + + genre = document.select("a[itemprop=genre]") + .filter { it.text().isNotEmpty() } + .joinToString(", ") { it.text() } + + status = when (document.select("ul.mangainfo b:contains(Tình Trạng) + a").first().text().trim()) { + "Đang tiến hành" -> SManga.ONGOING + "Đã hoàn thành" -> SManga.COMPLETED + "Tạm ngưng" -> SManga.ON_HIATUS + else -> SManga.UNKNOWN + } + + val descnode = document.select("div.card-body.border-start.border-info.border-3").first() + descnode.select(Evaluator.Tag("br")).prepend("\\n") + + description = if (descnode.select("p").any()) { + descnode.select("p").joinToString("\n") { + it.text().replace("\\n", "\n").replace("\n ", "\n") + }.trim() + } else { + descnode.text().replace("\\n", "\n").replace("\n ", "\n").trim() + } + } + + override fun chapterListSelector() = "ul#ChapList li" + + override fun chapterFromElement(element: Element) = SChapter.create().apply { + setUrlWithoutDomain(element.select("a").first().attr("abs:href")) + name = element.text().replace(element.select("time").first().text(), "") + date_upload = runCatching { + dateFormatter.parse(element.select("time").first().attr("datetime"))?.time + }.getOrNull() ?: 0L + + val match = floatingNumberRegex.find(name) + chapter_number = if (name.lowercase().startsWith("vol")) { + match?.groups?.get(2) + } else { + match?.groups?.get(1) + }?.value?.toFloat() ?: -1f + } + + override fun pageListParse(document: Document) = document.select("div.page-chapter") + .mapIndexed { i, elem -> + Page(i, "", elem.select("img").first().attr("abs:src")) + } + + override fun imageUrlParse(document: Document): String = throw Exception("Not used") + + open class UriPartFilter(displayName: String, private val vals: Array>, state: Int = 0) : + Filter.Select(displayName, vals.map { it.first }.toTypedArray(), state) { + fun toUriPart() = vals[state].second + } + + private class YearFilter : Filter.Text("Năm phát hành") + private class UserFilter : Filter.Text("Đăng bởi thành viên") + private class AuthorFilter : Filter.Text("Tên tác giả") + private class SourceFilter : Filter.Text("Nguồn/Nhóm dịch") + private class SearchTypeFilter : UriPartFilter( + "Kiểu tìm", + arrayOf( + Pair("AND/và", "and"), + Pair("OR/hoặc", "or"), + ) + ) + private class ForFilter : UriPartFilter( + "Dành cho", + arrayOf( + Pair("Bất kì", ""), + Pair("Con gái", "gai"), + Pair("Con trai", "trai"), + Pair("Con nít", "nit"), + ) + ) + private class AgeFilter : UriPartFilter( + "Bất kỳ", + arrayOf( + Pair("Bất kì", ""), + Pair("= 13", "13"), + Pair("= 14", "14"), + Pair("= 15", "15"), + Pair("= 16", "16"), + Pair("= 17", "17"), + Pair("= 18", "18"), + ) + ) + private class StatusFilter : UriPartFilter( + "Tình trạng", + arrayOf( + Pair("Bất kì", ""), + Pair("Đang dịch", "Ongoing"), + Pair("Hoàn thành", "Complete"), + Pair("Tạm ngưng", "Drop"), + ) + ) + private class OriginFilter : UriPartFilter( + "Quốc gia", + arrayOf( + Pair("Bất kì", ""), + Pair("Nhật Bản", "nhat"), + Pair("Trung Quốc", "trung"), + Pair("Hàn Quốc", "han"), + Pair("Việt Nam", "vietnam"), + ) + ) + private class ReadingModeFilter : UriPartFilter( + "Kiểu đọc", + arrayOf( + Pair("Bất kì", ""), + Pair("Chưa xác định", "chưa xác định"), + Pair("Phải qua trái", "xem từ phải qua trái"), + Pair("Trái qua phải", "xem từ trái qua phải"), + ) + ) + private class SortByFilter : UriPartFilter( + "Sắp xếp theo", + arrayOf( + Pair("Chap mới", "chap"), + Pair("Truyện mới", "truyen"), + Pair("Xem nhiều", "xem"), + Pair("Theo ABC", "ten"), + Pair("Số Chương", "sochap"), + ), + 2 + ) + open class Genre(name: String, val id: String) : Filter.TriState(name) + private class GenreList(genres: List) : Filter.Group("Thể loại", genres) + override fun getFilterList() = FilterList( + GenreList(getGenreList()), + SortByFilter(), + SearchTypeFilter(), + ForFilter(), + AgeFilter(), + StatusFilter(), + OriginFilter(), + ReadingModeFilter(), + YearFilter(), + UserFilter(), + AuthorFilter(), + SourceFilter(), + ) + + private fun getGenreList() = listOf( + Genre("Phát Hành Tại TT8", "106"), + Genre("Truyện Màu", "113"), + Genre("Webtoons", "112"), + Genre("Manga - Truyện Nhật", "141"), + Genre("Action - Hành động", "52"), + Genre("Adult - Người lớn", "53"), + Genre("Adventure - Phiêu lưu", "65"), + Genre("Anime", "107"), + Genre("Biseinen", "123"), + Genre("Bishounen", "122"), + Genre("Comedy - Hài hước", "50"), + Genre("Doujinshi", "72"), + Genre("Drama", "73"), + Genre("Ecchi", "74"), + Genre("Fantasy", "75"), + Genre("Gender Bender - Đổi giới tính", "76"), + Genre("Harem", "77"), + Genre("Historical - Lịch sử", "78"), + Genre("Horror - Kinh dị", "79"), + Genre("Isekai - Xuyên không", "139"), + Genre("Josei", "80"), + Genre("Live-action - Live Action", "81"), + Genre("Macgic", "138"), + Genre("Magic - Phép thuật", "116"), + Genre("Martial Arts - Martial-Arts", "84"), + Genre("Mature - Trưởng thành", "85"), + Genre("Mecha - Robot", "86"), + Genre("Mystery - Bí ẩn", "87"), + Genre("One-shot", "88"), + Genre("Psychological - Tâm lý", "89"), + Genre("Romance - Tình cảm", "90"), + Genre("School Life - Học đường", "91"), + Genre("Sci fi - Khoa học viễn tưởng", "92"), + Genre("Seinen", "93"), + Genre("Shoujo", "94"), + Genre("Shoujo Ai", "66"), + Genre("Shounen", "96"), + Genre("Shounen Ai", "97"), + Genre("Slash", "121"), + Genre("Slice-of-Life - Đời sống", "98"), + Genre("Smut", "99"), + Genre("Soft Yaoi - Soft-Yaoi", "100"), + Genre("Sports - Thể thao", "101"), + Genre("Supernatural - Siêu nhiên", "102"), + Genre("Tạp chí truyện tranh", "103"), + Genre("Tragedy - Bi kịch", "104"), + Genre("Trap - Crossdressing", "115"), + Genre("Yaoi", "114"), + Genre("Yaoi Hardcore", "120"), + Genre("Yuri", "111"), + Genre("Manhua - Truyện Trung", "82"), + Genre("Bách Hợp", "128"), + Genre("Chuyển sinh", "134"), + Genre("Cổ đại", "135"), + Genre("Cung đình", "144"), + Genre("Giới giải trí", "146"), + Genre("Hậu cung", "145"), + Genre("Huyền Huyễn", "132"), + Genre("Khoa Huyễn", "130"), + Genre("Lịch Sử", "131"), + Genre("Ngôn tình", "127"), + Genre("Ngọt sủng", "148"), + Genre("Ngược", "143"), + Genre("Người đóng góp", "147"), + Genre("Nữ Cường", "136"), + Genre("Tổng tài", "137"), + Genre("Trọng Sinh", "126"), + Genre("Trường học", "142"), + Genre("Tu chân - tu tiên", "140"), + Genre("Võng Du", "125"), + Genre("Xuyên không", "124"), + Genre("Đam Mỹ", "108"), + Genre("Đô thị", "129"), + Genre("Manhwa - Truyện Hàn", "83"), + Genre("Boy love", "133"), + Genre("Thriller - Giết người, sát nhân, máu me", "149"), + Genre("Truyện Tranh Việt", "51"), + Genre("Cướp bồ - NTR, Netorare", "118"), + Genre("Hướng dẫn vẽ!", "109"), + Genre("Truyện scan", "105"), + Genre("Comic - truyện Âu Mĩ", "71"), + ) + + companion object { + const val PREFIX_ID_SEARCH = "id:" + } +} diff --git a/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt new file mode 100644 index 000000000..7e3694f00 --- /dev/null +++ b/src/vi/truyentranh8/src/eu/kanade/tachiyomi/extension/vi/truyentranh8/TruyenTranh8UrlActivity.kt @@ -0,0 +1,36 @@ +package eu.kanade.tachiyomi.extension.vi.truyentranh8 + +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 TruyenTranh8UrlActivity : Activity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val id = pathSegments[1] + + try { + startActivity( + Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${TruyenTranh8.PREFIX_ID_SEARCH}$id") + putExtra("filter", packageName) + } + ) + } catch (e: ActivityNotFoundException) { + Log.e("TruyenTranh8UrlActivity", e.toString()) + } + } else { + Log.e("TruyenTranh8UrlActivity", "Could not parse URL from intent $intent") + } + + finish() + exitProcess(0) + } +}