New: TruyenQQ (#2089)

This commit is contained in:
happywillow0 2020-01-18 14:51:44 -05:00 committed by arkon
parent 620c48f733
commit b3b0e67563
8 changed files with 113 additions and 0 deletions

View File

@ -0,0 +1,12 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
appName = 'Tachiyomi: TruyenQQ'
pkgNameSuffix = 'vi.truyenqq'
extClass = '.TruyenQQ'
extVersionCode = 1
libVersion = '1.2'
}
apply from: "$rootDir/common.gradle"

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

View File

@ -0,0 +1,101 @@
package eu.kanade.tachiyomi.extension.vi.truyenqq
import android.net.Uri
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.source.model.*
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import okhttp3.OkHttpClient
import okhttp3.Request
import java.util.*
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.concurrent.TimeUnit
class TruyenQQ : ParsedHttpSource() {
override val name: String = "TruyenQQ"
override val lang: String = "vi"
override val baseUrl: String = "https://truyenqq.com"
override val supportsLatest: Boolean = true
override val client: OkHttpClient = network.cloudflareClient.newBuilder()
.connectTimeout(1, TimeUnit.MINUTES)
.readTimeout(1, TimeUnit.MINUTES)
.retryOnConnectionFailure(true)
.followRedirects(true)
.build()!!
// Popular
override fun popularMangaRequest(page: Int): Request {
return GET("$baseUrl/top-thang/trang-$page.html", headers)
}
override fun popularMangaNextPageSelector(): String? = "a.pagination-link:contains()"
override fun popularMangaSelector(): String = "div.story-item"
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
setUrlWithoutDomain(element.select("a").first().attr("abs:href"))
thumbnail_url = element.select("img.story-cover").attr("abs:src")
title = element.select(".title-book a").text()
}
//Latest
override fun latestUpdatesRequest(page: Int): Request {
return GET("$baseUrl/truyen-moi-cap-nhat/trang-$page.html", headers)
}
override fun latestUpdatesNextPageSelector(): String? = popularMangaNextPageSelector()
override fun latestUpdatesSelector(): String = popularMangaSelector()
override fun latestUpdatesFromElement(element: Element): SManga = popularMangaFromElement(element)
//Search
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
val uri = Uri.parse("$baseUrl/tim-kiem/trang-$page.html").buildUpon()
.appendQueryParameter("q",query)
return GET(uri.toString(), headers)
//Todo Filters
}
override fun searchMangaNextPageSelector(): String? = popularMangaNextPageSelector()
override fun searchMangaSelector(): String = popularMangaSelector()
override fun searchMangaFromElement(element: Element): SManga = popularMangaFromElement(element)
//Details
override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply {
title = document.select("h1").text()
author = document.select(".info-item:eq(1)").text().substringAfter(":").trim()
artist = author
val glist = document.select(".list01 li").map { it.text() }
genre = glist.joinToString(", ")
description = document.select(".story-detail-info").text()
status = when (document.select(".info-item:eq(2)").text().substringAfter(":").trim()) {
"Đang Cập Nhật" -> SManga.ONGOING
//"" -> SManga.COMPLETED
else -> SManga.UNKNOWN
}
}
//Chapters
override fun chapterListSelector(): String = "div.works-chapter-list div.works-chapter-item"
override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply {
setUrlWithoutDomain(element.select("a").attr("abs:href"))
name = element.select("a").text().trim()
date_upload = parseDate(element.select("div.text-right").text())
chapter_number = name.substringAfter("Chương").trim().toFloat()
}
private fun parseDate(date: String): Long {
return SimpleDateFormat("dd/MM/yyyy", Locale.US ).parse(date).time
}
//Pages
override fun pageListParse(document: Document): List<Page> = mutableListOf<Page>().apply {
document.select("img.lazy").forEachIndexed { index, element ->
add(Page(index,"",element.attr("abs:src"))) }
}
override fun imageUrlParse(document: Document): String {
throw Exception("Not Used")
}
//Not Used
}