From 81004b53a95d45f1dbd5e84cb86c8a11d0e99a29 Mon Sep 17 00:00:00 2001 From: devi Date: Fri, 13 Oct 2023 18:38:36 +0200 Subject: [PATCH] add Yaoi Flix --- .../kotatsu/parsers/site/ar/MangaStorm.kt | 3 - .../kotatsu/parsers/site/tr/YaoiFlix.kt | 136 ++++++++++++++++++ 2 files changed, 136 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt index 70088a21..754ad8ff 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/MangaStorm.kt @@ -27,7 +27,6 @@ internal class MangaStorm(context: MangaLoaderContext) : PagedMangaParser(contex sortOrder: SortOrder, ): List { val tag = tags.oneOrThrowIfMany() - val url = if (!tags.isNullOrEmpty()) { buildString { @@ -50,9 +49,7 @@ internal class MangaStorm(context: MangaLoaderContext) : PagedMangaParser(contex } } } - val doc = webClient.httpGet(url).parseHtml() - return doc.select("div.row div.col").map { div -> val href = div.selectFirstOrThrow("a").attrAsRelativeUrl("href") Manga( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt new file mode 100644 index 00000000..b365ad36 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt @@ -0,0 +1,136 @@ +package org.koitharu.kotatsu.parsers.site.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat +import java.util.* + +@MangaSourceParser("YAOIFLIX", "Yaoi Flix", "tr", ContentType.HENTAI) +class YaoiFlix(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.YAOIFLIX, 8) { + + override val sortOrders: Set = EnumSet.of(SortOrder.UPDATED) + + override val configKeyDomain = ConfigKey.Domain("www.yaoiflix.cc") + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val tag = tags.oneOrThrowIfMany() + val url = buildString { + append("https://") + append(domain) + when { + !query.isNullOrEmpty() -> { + if (page > 1) { + append("/page/") + append(page) + } + append("/?s=") + append(query.urlEncoded()) + } + + !tags.isNullOrEmpty() -> { + append("/dizi-kategori/") + append(tag?.key.orEmpty()) + append("/") + if (page > 1) { + append("page/") + append(page) + append("/") + } + } + + else -> { + append("/tum-seriler/") + if (page > 1) { + append("page/") + append(page) + append("/") + } + } + } + } + val doc = webClient.httpGet(url).parseHtml() + return doc.select(".list_items .series-box").map { div -> + val a = div.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + Manga( + id = generateUid(href), + url = href, + publicUrl = a.attrAsAbsoluteUrl("href"), + title = div.selectLastOrThrow(".name").text(), + coverUrl = div.selectFirst("img")?.src().orEmpty(), + altTitle = null, + rating = RATING_UNKNOWN, + tags = emptySet(), + description = null, + state = null, + author = null, + isNsfw = isNsfwSource, + source = source, + ) + } + } + + override suspend fun getTags(): Set { + val doc = webClient.httpGet("https://$domain").parseHtml() + return doc.select(".tags .cat-item a").mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix('/').substringAfterLast('/'), + title = a.text(), + source = source, + ) + } + } + + override suspend fun getDetails(manga: Manga): Manga { + val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val dateFormat = SimpleDateFormat("dd MMM", sourceLocale) + return manga.copy( + description = doc.selectFirst(".description")?.html()?.substringAfterLast("
"), + tags = doc.select(".category a").mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix('/').substringAfterLast('/'), + title = a.text(), + source = source, + ) + }, + chapters = doc.select(".serie-content .ep-box") + .mapChapters(reversed = true) { i, div -> + val a = div.selectFirstOrThrow("a") + val href = a.attrAsRelativeUrl("href") + MangaChapter( + id = generateUid(href), + name = a.text(), + number = i + 1, + url = href, + scanlator = null, + uploadDate = dateFormat.tryParse(div.selectFirstOrThrow(".date").text()), + branch = null, + source = source, + ) + }, + ) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + return doc.select(".video-content img").map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +}