From 6da99b2e55d0c3df558939d1b9c3571d4ab6ba97 Mon Sep 17 00:00:00 2001 From: Chaos Pjeles Date: Sat, 13 Apr 2024 07:02:48 +0100 Subject: [PATCH] Add cosplaytele.com (#2356) * implement cosplaytele.com * Update src/all/cosplaytele/build.gradle Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * resolve suggestions * resolve 2 * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> * fix query * fix query 2 * update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt * Update src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt --------- Co-authored-by: AwkwardPeak7 <48650614+AwkwardPeak7@users.noreply.github.com> --- src/all/cosplaytele/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3514 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1943 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5098 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8640 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14948 bytes .../extension/all/cosplaytele/CosplayTele.kt | 228 ++++++++++++++++++ 7 files changed, 236 insertions(+) create mode 100644 src/all/cosplaytele/build.gradle create mode 100644 src/all/cosplaytele/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/cosplaytele/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/cosplaytele/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/cosplaytele/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/cosplaytele/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt diff --git a/src/all/cosplaytele/build.gradle b/src/all/cosplaytele/build.gradle new file mode 100644 index 000000000..dea28bd86 --- /dev/null +++ b/src/all/cosplaytele/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'CosplayTele' + extClass = '.CosplayTele' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/cosplaytele/res/mipmap-hdpi/ic_launcher.png b/src/all/cosplaytele/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..a81a9ab0be7c97df0ec66058a160452c36272643 GIT binary patch literal 3514 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 literal 0 HcmV?d00001 diff --git a/src/all/cosplaytele/res/mipmap-mdpi/ic_launcher.png b/src/all/cosplaytele/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..98662f8a67c71d308076ca1a9387015d08f215d6 GIT binary patch literal 1943 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 M07*qoM6N<$f-5bvo&W#< literal 0 HcmV?d00001 diff --git a/src/all/cosplaytele/res/mipmap-xxhdpi/ic_launcher.png b/src/all/cosplaytele/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..47a4b33585049245c11c355c32b149f017770589 GIT binary patch literal 8640 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 b`3@@o+Cm5Sp{jjkiUJ@~pCzlr4FmrViLr!G literal 0 HcmV?d00001 diff --git a/src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt b/src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt new file mode 100644 index 000000000..48680c5fa --- /dev/null +++ b/src/all/cosplaytele/src/eu/kanade/tachiyomi/extension/all/cosplaytele/CosplayTele.kt @@ -0,0 +1,228 @@ +package eu.kanade.tachiyomi.extension.all.cosplaytele + +import android.util.Log +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.await +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 eu.kanade.tachiyomi.util.asJsoup +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import uy.kohesive.injekt.injectLazy +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Locale + +class CosplayTele : ParsedHttpSource() { + override val baseUrl = "https://cosplaytele.com" + override val lang = "all" + override val name = "CosplayTele" + override val supportsLatest = true + + private val json: Json by injectLazy() + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + // Latest + override fun latestUpdatesFromElement(element: Element): SManga { + val manga = SManga.create() + manga.thumbnail_url = element.selectFirst("img")!!.attr("src") + val linkEl = element.selectFirst("h5 a")!! + manga.title = linkEl.text() + manga.setUrlWithoutDomain(linkEl.attr("abs:href")) + return manga + } + + override fun latestUpdatesNextPageSelector() = ".next.page-number" + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/page/$page/") + + override fun latestUpdatesSelector() = "div.box" + + // Popular + override fun popularMangaFromElement(element: Element): SManga { + throw UnsupportedOperationException() + } + + override fun popularMangaNextPageSelector(): String? { + throw UnsupportedOperationException() + } + + private val popularPageLimit = 20 + override fun popularMangaRequest(page: Int) = GET("$baseUrl/wp-json/wordpress-popular-posts/v1/popular-posts?offset=${page * popularPageLimit}&limit=$popularPageLimit&range=last7days") + override fun popularMangaSelector(): String = "" + + override fun popularMangaParse(response: Response): MangasPage { + val jsonObject = json.decodeFromString(response.body.string()) + val mangas = jsonObject.map { item -> + val head = item.jsonObject["yoast_head_json"]!!.jsonObject + SManga.create().apply { + title = head["og_title"]!!.jsonPrimitive.content + thumbnail_url = head["og_image"]!!.jsonArray[0].jsonObject["url"]!!.jsonPrimitive.content + setUrlWithoutDomain(head["og_url"]!!.jsonPrimitive.content) + } + } + return MangasPage(mangas, mangas.size >= popularPageLimit) + } + + // Search + override fun searchMangaFromElement(element: Element) = latestUpdatesFromElement(element) + override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector() + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val filterList = if (filters.isEmpty()) getFilterList() else filters + + val categoryFilter = filterList.findInstance() + return when { + categoryFilter?.state != 0 -> GET( + baseUrl.toHttpUrl().newBuilder().apply { + addPathSegments(categoryFilter!!.toUriPart()) + addPathSegment("page") + addPathSegment(page.toString()) + if (query.isNotEmpty()) { + addQueryParameter("s", query) + } + }.build(), + ) + query.isNotEmpty() -> GET( + "$baseUrl/page/$page/".toHttpUrl().newBuilder().apply { + addQueryParameter("s", query) + }.build(), + ) + else -> latestUpdatesRequest(page) + } + } + + override fun searchMangaSelector() = latestUpdatesSelector() + + // Details + override fun mangaDetailsParse(document: Document): SManga { + val manga = SManga.create() + manga.title = document.select(".entry-title").text() + manga.description = document.select(".entry-title").text() + manga.genre = getTags(document).joinToString(", ") + manga.status = SManga.COMPLETED + return manga + } + + private fun getTags(document: Element): List { + val pattern = """.*/(tag|category)/.*""".toRegex() + return document.select("#main a").filter { a -> pattern.matches(a.attr("href")) }.map { a -> + val link = a.attr("href").split(".com/")[1] + val tag = a.text() + if (tag.isNotEmpty()) { + categories[tag] = link + } + tag + } + } + + override fun chapterFromElement(element: Element): SChapter { + val chapter = SChapter.create() + chapter.setUrlWithoutDomain(element.select("link[rel=\"canonical\"]").attr("href")) + chapter.name = "Gallery" + chapter.date_upload = getDate(element.select("time.updated").attr("datetime")) + return chapter + } + + override fun chapterListSelector() = "html" + + // Pages + override fun pageListParse(document: Document): List { + val pages = mutableListOf() + document.select(".gallery-item img").forEachIndexed { i, it -> + val itUrl = it.attr("src") + pages.add(Page(i, imageUrl = itUrl)) + } + return pages + } + + override fun imageUrlParse(document: Document): String = + throw UnsupportedOperationException() + + // Filters + override fun getFilterList(): FilterList { + CoroutineScope(Dispatchers.IO).launch { fetchFilters() } + val filters = mutableListOf>( + Filter.Header("NOTE: Only one filter will be applied!"), + Filter.Separator(), + UriPartFilter("Category", categories.entries.toTypedArray()), + ) + + if (filtersState == FilterState.Unfetched) { + filters.add(1, Filter.Header("Use 'reset' to load all filters")) + } + return FilterList(filters) + } + + open class UriPartFilter( + displayName: String, + private val valuePair: Array>, + ) : Filter.Select(displayName, valuePair.map { it.key }.toTypedArray()) { + fun toUriPart() = valuePair[state].value + } + + private var categories = mutableMapOf( + Pair("All", ""), + Pair("Cosplay Nude", "category/nude"), + Pair("Cosplay Ero", "category/no-nude"), + Pair("Cosplay", "category/cosplay"), + ) + + private var filtersState = FilterState.Unfetched + private var filterAttempts = 0 + + private enum class FilterState { + Fetching, Fetched, Unfetched + } + + private suspend fun fetchFilters() { + if (filtersState == FilterState.Unfetched && filterAttempts < 3) { + filtersState = FilterState.Fetching + filterAttempts++ + + try { + client.newCall(GET("$baseUrl/explore-categories/", headers)) + .await() + .asJsoup().let { document -> getTags(document) } + filtersState = FilterState.Fetched + } catch (e: Exception) { + Log.e(name, e.stackTraceToString()) + filtersState = FilterState.Unfetched + } + } + } + + private inline fun Iterable<*>.findInstance() = find { it is T } as? T + + private fun getDate(str: String): Long { + try { + val format = str.split("T")[0] + return DATE_FORMAT.parse(format)?.time ?: 0L + } catch (e: ParseException) { + return 0L + } + } + + companion object { + private val DATE_FORMAT by lazy { + SimpleDateFormat("yyyy-MM-dd", Locale.US) + } + } +}