From a80d20aaab75904e51d83e31991399e2b257ef02 Mon Sep 17 00:00:00 2001 From: curche <72807749+curche@users.noreply.github.com> Date: Thu, 11 Mar 2021 00:53:15 +0530 Subject: [PATCH] remove hentaicafe source (#6129) removes hentaicafe source which was part of foolslide multisrc the source is dead since it was taken down --- .../foolslide/hentaicafe/src/HentaiCafe.kt | 352 ------------------ .../multisrc/foolslide/FoolSlideGenerator.kt | 1 - 2 files changed, 353 deletions(-) delete mode 100644 multisrc/overrides/foolslide/hentaicafe/src/HentaiCafe.kt diff --git a/multisrc/overrides/foolslide/hentaicafe/src/HentaiCafe.kt b/multisrc/overrides/foolslide/hentaicafe/src/HentaiCafe.kt deleted file mode 100644 index d67d6046c..000000000 --- a/multisrc/overrides/foolslide/hentaicafe/src/HentaiCafe.kt +++ /dev/null @@ -1,352 +0,0 @@ -package eu.kanade.tachiyomi.extension.en.hentaicafe - -import eu.kanade.tachiyomi.multisrc.foolslide.FoolSlide -import eu.kanade.tachiyomi.annotations.Nsfw -import eu.kanade.tachiyomi.network.GET -import eu.kanade.tachiyomi.source.model.FilterList -import eu.kanade.tachiyomi.source.model.SChapter -import eu.kanade.tachiyomi.source.model.SManga -import okhttp3.Request -import okhttp3.Response -import org.jsoup.nodes.Document -import org.jsoup.nodes.Element -import eu.kanade.tachiyomi.network.asObservable -import eu.kanade.tachiyomi.source.model.Filter -import eu.kanade.tachiyomi.source.model.MangasPage -import eu.kanade.tachiyomi.util.asJsoup -import rx.Observable -import java.net.URLEncoder - -@Nsfw -class HentaiCafe : FoolSlide("Hentai Cafe", "https://hentai.cafe", "en", "/manga") { - // We have custom latest updates logic so do not dedupe latest updates - override val dedupeLatestUpdates = false - - // Does not support popular manga - override fun fetchPopularManga(page: Int) = fetchLatestUpdates(page) - - override fun latestUpdatesFromElement(element: Element) = SManga.create().apply { - val urlElement = element.select(".entry-thumb").first() - if (urlElement != null) { - setUrlWithoutDomain(urlElement.attr("href")) - thumbnail_url = urlElement.child(0).attr("src") - } else { - setUrlWithoutDomain(element.select(".entry-title a").attr("href")) - } - title = element.select(".entry-title").text().trim() - } - - override fun latestUpdatesNextPageSelector() = ".x-pagination li:last-child a" - - override fun latestUpdatesRequest(page: Int) = pagedRequest("$baseUrl/", page) - - override fun latestUpdatesSelector() = "article:not(#post-0)" - - override fun mangaDetailsParse(document: Document) = SManga.create().apply { - title = document.select(".entry-title").text() - val contentElement = document.select(".entry-content").first() - thumbnail_url = contentElement.child(0).child(0).attr("src") - val genres = mutableListOf() - document.select(".content a[rel=tag]").forEach { element -> - if (!element.attr("href").contains("artist")) - genres.add(element.text()) - else { - artist = element.text() - author = element.text() - } - } - status = SManga.COMPLETED - genre = genres.joinToString(", ") - } - - // Note that the reader URL cannot be deduced from the manga URL all the time which is why - // we still need to parse the manga info page - // Example: https://hentai.cafe/aiya-youngest-daughters-circumstances/ - override fun chapterListParse(response: Response) = listOf( - SChapter.create().apply { - // Some URLs wrongly end with "
\n" and need to be removed - // Example: https://hentai.cafe/hc.fyi/12106 - setUrlWithoutDomain(response.asJsoup().select("[title=Read]").attr("href").replace("
\\s*".toRegex(), "")) - name = "Chapter" - chapter_number = 1f - } - ) - - override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { - var url: String? = null - var queryString: String? = null - fun requireNoUrl() = require(url == null && queryString == null) { - "You cannot combine filters or use text search with filters!" - } - - filters.findInstance()?.let { f -> - if (f.state.isNotBlank()) { - requireNoUrl() - url = "/hc.fyi/artist/${f.state - .trim() - .toLowerCase() - .replace(ARTIST_INVALID_CHAR_REGEX, "-")}/" - } - } - filters.findInstance()?.let { f -> - if (f.state) { - requireNoUrl() - url = "/hc.fyi/category/book/" - } - } - filters.findInstance()?.let { f -> - if (f.state != 0) { - requireNoUrl() - url = "/hc.fyi/tag/${f.values[f.state].name}/" - } - } - - if (query.isNotBlank()) { - requireNoUrl() - url = "/" - queryString = "s=" + URLEncoder.encode(query, "UTF-8") - } - - return url?.let { - pagedRequest("$baseUrl$url", page, queryString) - } ?: latestUpdatesRequest(page) - } - - private fun pagedRequest(url: String, page: Int, queryString: String? = null): Request { - // The site redirects page 1 -> url-without-page so we do this redirect early for optimization - val builtUrl = if (page == 1) url else "${url}page/$page/" - return GET(if (queryString != null) "$builtUrl?$queryString" else builtUrl) - } - - override fun searchMangaParse(response: Response) = latestUpdatesParse(response) - - override fun fetchSearchManga(page: Int, query: String, filters: FilterList): Observable { - return client.newCall(searchMangaRequest(page, query, filters)) - .asObservable().doOnNext { response -> - if (!response.isSuccessful) { - response.close() - // Better error message for invalid artist - if (response.code() == 404 && - !filters.findInstance()?.state.isNullOrBlank() - ) - error("Invalid artist!") - else throw Exception("HTTP error ${response.code()}") - } - } - .map { response -> - searchMangaParse(response) - } - } - - override fun getFilterList() = FilterList( - Filter.Header("Filters cannot be used while searching."), - Filter.Header("Only one filter may be used at a time."), - Filter.Separator(), - ArtistFilter(), - BookFilter(), - TagFilter() - ) - - class ArtistFilter : Filter.Text("Artist (must be exact match)") - class BookFilter : Filter.CheckBox("Show books only", false) - class TagFilter : Filter.Select( - "Tag", - arrayOf( - Tag("", "