From f505654fe75b2e3d266da7e51552620de3ab8f6f Mon Sep 17 00:00:00 2001 From: Claudemirovsky <63046606+Claudemirovsky@users.noreply.github.com> Date: Tue, 23 Jan 2024 14:10:27 -0300 Subject: [PATCH] New source: all/Hentai Cafe (#534) * feat: Create HentaiCafe base * feat: Implement popular manga page * feat: Implement latest updates page * feat: Implement search page * feat: Implement manga details page * feat: Add single-chapter page * feat: Parse chapter pages * chore: Add rate-limit to images CDN * chore: Add source icon --- src/all/hentaicafe/AndroidManifest.xml | 22 +++ src/all/hentaicafe/build.gradle | 8 + .../res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4708 bytes .../res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2678 bytes .../res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5927 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 11385 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 14824 bytes .../extension/all/hentaicafe/HentaiCafe.kt | 167 ++++++++++++++++++ .../all/hentaicafe/HentaiCafeUrlActivity.kt | 41 +++++ 9 files changed, 238 insertions(+) create mode 100644 src/all/hentaicafe/AndroidManifest.xml create mode 100644 src/all/hentaicafe/build.gradle create mode 100644 src/all/hentaicafe/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/hentaicafe/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/hentaicafe/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/hentaicafe/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/hentaicafe/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/hentaicafe/src/eu/kanade/tachiyomi/extension/all/hentaicafe/HentaiCafe.kt create mode 100644 src/all/hentaicafe/src/eu/kanade/tachiyomi/extension/all/hentaicafe/HentaiCafeUrlActivity.kt diff --git a/src/all/hentaicafe/AndroidManifest.xml b/src/all/hentaicafe/AndroidManifest.xml new file mode 100644 index 000000000..e8b73b39e --- /dev/null +++ b/src/all/hentaicafe/AndroidManifest.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + diff --git a/src/all/hentaicafe/build.gradle b/src/all/hentaicafe/build.gradle new file mode 100644 index 000000000..2f4accb71 --- /dev/null +++ b/src/all/hentaicafe/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Hentai Cafe' + extClass = '.HentaiCafe' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/hentaicafe/res/mipmap-hdpi/ic_launcher.png b/src/all/hentaicafe/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..dc63ee26ef9de842ffbbdb69b3903ecaae9b447f GIT binary patch literal 4708 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 literal 0 HcmV?d00001 diff --git a/src/all/hentaicafe/res/mipmap-xhdpi/ic_launcher.png b/src/all/hentaicafe/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..74ded80a8efea616e81d13222aa9e72806c95171 GIT binary patch literal 5927 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 literal 0 HcmV?d00001 diff --git a/src/all/hentaicafe/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/hentaicafe/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..bf4eae5643c712f37df8cf6447bfe186512242f6 GIT binary patch literal 14824 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 qMq7LT75OIFXI { + return if (query.startsWith(PREFIX_SEARCH)) { // URL intent handler + val id = query.removePrefix(PREFIX_SEARCH) + client.newCall(GET("$baseUrl/g/$id")) + .asObservableSuccess() + .map(::searchMangaByIdParse) + } else { + super.fetchSearchManga(page, query, filters) + } + } + + private fun searchMangaByIdParse(response: Response): MangasPage { + val details = mangaDetailsParse(response.use { it.asJsoup() }) + return MangasPage(listOf(details), false) + } + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$baseUrl/search".toHttpUrl().newBuilder() + .addQueryParameter("q", query) + .addQueryParameter("page", page.toString()) + .build() + + return GET(url, headers) + } + + override fun searchMangaSelector() = "div.index-container > div.gallery > a" + + override fun searchMangaFromElement(element: Element) = popularMangaFromElement(element) + + override fun searchMangaNextPageSelector() = latestUpdatesNextPageSelector() + + // =========================== Manga Details ============================ + override fun mangaDetailsParse(document: Document) = SManga.create().apply { + thumbnail_url = document.selectFirst("#cover > a > img")?.getImageUrl() + + with(document.selectFirst("div#bigcontainer > div > div#info")!!) { + title = selectFirst("h1.title")!!.text() + artist = getInfo("Artists") + genre = getInfo("Tags") + + description = buildString { + select(".title > span").eachText().joinToString("\n").also { + append("Full titles:\n$it\n") + } + + getInfo("Groups")?.also { append("\nGroups: $it") } + getInfo("Languages")?.also { append("\nLanguages: $it") } + getInfo("Parodies")?.also { append("\nParodies: $it") } + getInfo("Pages")?.also { append("\nPages: $it") } + } + } + + status = SManga.COMPLETED + update_strategy = UpdateStrategy.ONLY_FETCH_ONCE + } + + private fun Element.getInfo(item: String) = + select("div.field-name:containsOwn($item) a.tag > span.name") + .eachText() + .takeUnless { it.isEmpty() } + ?.joinToString() + + // ============================== Chapters ============================== + override fun fetchChapterList(manga: SManga): Observable> { + val chapter = SChapter.create().apply { + url = manga.url + name = "Chapter" + chapter_number = 1F + } + + return Observable.just(listOf(chapter)) + } + + override fun chapterListSelector(): String { + throw UnsupportedOperationException() + } + + override fun chapterFromElement(element: Element): SChapter { + throw UnsupportedOperationException() + } + + // =============================== Pages ================================ + override fun pageListParse(document: Document): List { + return document.select("div.thumbs a.gallerythumb > img").mapIndexed { index, item -> + val url = item.getImageUrl() + // Show original images instead of previews + val imageUrl = url.substringBeforeLast('/') + "/" + url.substringAfterLast('/').replace("t.", ".") + Page(index, "", imageUrl) + } + } + + override fun imageUrlParse(document: Document): String { + throw UnsupportedOperationException() + } + + // ============================= Utilities ============================== + private fun Element.getImageUrl() = absUrl("data-src").ifEmpty { absUrl("src") } + + companion object { + const val PREFIX_SEARCH = "id:" + } +} diff --git a/src/all/hentaicafe/src/eu/kanade/tachiyomi/extension/all/hentaicafe/HentaiCafeUrlActivity.kt b/src/all/hentaicafe/src/eu/kanade/tachiyomi/extension/all/hentaicafe/HentaiCafeUrlActivity.kt new file mode 100644 index 000000000..84011a91e --- /dev/null +++ b/src/all/hentaicafe/src/eu/kanade/tachiyomi/extension/all/hentaicafe/HentaiCafeUrlActivity.kt @@ -0,0 +1,41 @@ +package eu.kanade.tachiyomi.extension.all.hentaicafe + +import android.app.Activity +import android.content.ActivityNotFoundException +import android.content.Intent +import android.os.Bundle +import android.util.Log +import kotlin.system.exitProcess + +/** + * Springboard that accepts https://hentaicafe.xxx/g/ intents + * and redirects them to the main Tachiyomi process. + */ +class HentaiCafeUrlActivity : Activity() { + + private val tag = javaClass.simpleName + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val pathSegments = intent?.data?.pathSegments + if (pathSegments != null && pathSegments.size > 1) { + val item = pathSegments[1] + val mainIntent = Intent().apply { + action = "eu.kanade.tachiyomi.SEARCH" + putExtra("query", "${HentaiCafe.PREFIX_SEARCH}$item") + putExtra("filter", packageName) + } + + try { + startActivity(mainIntent) + } catch (e: ActivityNotFoundException) { + Log.e(tag, e.toString()) + } + } else { + Log.e(tag, "could not parse uri from intent $intent") + } + + finish() + exitProcess(0) + } +}