From e9d0013df369842d7c74d5eef969a7777b21b6c0 Mon Sep 17 00:00:00 2001 From: Secozzi <49240133+Secozzi@users.noreply.github.com> Date: Tue, 30 Jul 2024 07:29:47 +0000 Subject: [PATCH] Add atsumaru (#4330) * add atsumaru * remove unnecessary stuff --- src/en/atsumaru/build.gradle | 8 + .../atsumaru/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 4695 bytes .../atsumaru/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 2815 bytes .../atsumaru/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 5887 bytes .../res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 9294 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 12517 bytes .../extension/en/atsumaru/Atsumaru.kt | 156 ++++++++++++++++++ .../tachiyomi/extension/en/atsumaru/Dto.kt | 115 +++++++++++++ 8 files changed, 279 insertions(+) create mode 100644 src/en/atsumaru/build.gradle create mode 100644 src/en/atsumaru/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/en/atsumaru/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/en/atsumaru/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/en/atsumaru/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/en/atsumaru/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Atsumaru.kt create mode 100644 src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Dto.kt diff --git a/src/en/atsumaru/build.gradle b/src/en/atsumaru/build.gradle new file mode 100644 index 000000000..1ca955c27 --- /dev/null +++ b/src/en/atsumaru/build.gradle @@ -0,0 +1,8 @@ +ext { + extName = 'Atsumaru' + extClass = '.Atsumaru' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/en/atsumaru/res/mipmap-hdpi/ic_launcher.png b/src/en/atsumaru/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..234a7459878c4596535ecd77923e3fce775a403f GIT binary patch literal 4695 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 Z{{(li6z((RdanQg002ovPDHLkV1hF*3m*Ug literal 0 HcmV?d00001 diff --git a/src/en/atsumaru/res/mipmap-mdpi/ic_launcher.png b/src/en/atsumaru/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..05e217e726770e8d375653f51e2cff7f9bc27248 GIT binary patch literal 2815 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 Rxjg^?002ovPDHLkV1ghpMaKXD literal 0 HcmV?d00001 diff --git a/src/en/atsumaru/res/mipmap-xhdpi/ic_launcher.png b/src/en/atsumaru/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..afe5c9ca8cde06efa235cd5071dc80f25a7357fb GIT binary patch literal 5887 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 V5;GEZj}rg@002ovPDHLkV1m_t`>6l` literal 0 HcmV?d00001 diff --git a/src/en/atsumaru/res/mipmap-xxhdpi/ic_launcher.png b/src/en/atsumaru/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d092b541f438ced9f41681c1e4a9bdd0d442baed GIT binary patch literal 9294 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 literal 0 HcmV?d00001 diff --git a/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Atsumaru.kt b/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Atsumaru.kt new file mode 100644 index 000000000..8d7a5b55e --- /dev/null +++ b/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Atsumaru.kt @@ -0,0 +1,156 @@ +package eu.kanade.tachiyomi.extension.en.atsumaru + +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.network.interceptor.rateLimit +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.HttpSource +import kotlinx.serialization.decodeFromString +import kotlinx.serialization.json.Json +import okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import uy.kohesive.injekt.injectLazy + +class Atsumaru : HttpSource() { + + override val name = "Atsumaru" + + override val baseUrl = "https://atsu.moe" + private val apiUrl = "$baseUrl/api/v1" + + override val lang = "en" + + override val supportsLatest = true + + override val client = network.cloudflareClient.newBuilder() + .rateLimit(2) + .build() + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + private fun apiHeadersBuilder() = headersBuilder().apply { + add("Accept", "*/*") + add("Host", apiUrl.toHttpUrl().host) + } + + private val apiHeaders by lazy { apiHeadersBuilder().build() } + + private val json: Json by injectLazy() + + // ============================== Popular =============================== + + override fun popularMangaRequest(page: Int): Request { + return GET("$apiUrl/layouts/s1/sliders/hotUpdates", apiHeaders) + } + + override fun popularMangaParse(response: Response): MangasPage { + val data = response.parseAs().items + + return MangasPage(data.map { it.manga.toSManga() }, false) + } + + // =============================== Latest =============================== + + override fun latestUpdatesRequest(page: Int): Request { + return GET("$apiUrl/layouts/s1/latest-updates", apiHeaders) + } + + override fun latestUpdatesParse(response: Response): MangasPage { + return popularMangaParse(response) + } + + // =============================== Search =============================== + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + val url = "$apiUrl/search".toHttpUrl().newBuilder() + .addPathSegment(query) + .build() + + return GET(url, apiHeaders) + } + + override fun searchMangaParse(response: Response): MangasPage { + val data = response.parseAs().hits + + return MangasPage(data.map { it.info.toSManga() }, false) + } + + // =========================== Manga Details ============================ + + override fun getMangaUrl(manga: SManga): String { + return baseUrl + manga.url + } + + override fun mangaDetailsRequest(manga: SManga): Request { + return GET(apiUrl + manga.url, apiHeaders) + } + + override fun mangaDetailsParse(response: Response): SManga { + return response.parseAs().manga.toSManga() + } + + // ============================== Chapters ============================== + + override fun chapterListRequest(manga: SManga): Request { + return mangaDetailsRequest(manga) + } + + override fun chapterListParse(response: Response): List { + val chapterList = response.parseAs().manga.chapters!!.map { + it.toSChapter(response.request.url.pathSegments.last()) + } + + return chapterList.sortedWith( + compareBy( + { it.chapter_number }, + { it.scanlator }, + ), + ).reversed() + } + + override fun getChapterUrl(chapter: SChapter): String { + val (slug, name) = chapter.url.split("/") + return "$baseUrl/read/s1/$slug/$name/1" + } + + // =============================== Pages ================================ + + override fun pageListRequest(chapter: SChapter): Request { + val (slug, name) = chapter.url.split("/") + return GET("$apiUrl/manga/s1/$slug#$name", apiHeaders) + } + + override fun pageListParse(response: Response): List { + val chapter = response.parseAs().manga.chapters!!.first { + it.name == response.request.url.fragment + } + + return chapter.pages.map { page -> + Page(page.name.toInt(), imageUrl = page.pageURLs.first()) + }.sortedBy { it.index } + } + + override fun imageRequest(page: Page): Request { + val imgHeaders = headersBuilder().apply { + add("Accept", "image/avif,image/webp,*/*") + add("Host", page.imageUrl!!.toHttpUrl().host) + }.build() + + return GET(page.imageUrl!!, imgHeaders) + } + + override fun imageUrlParse(response: Response): String { + throw UnsupportedOperationException() + } + + // ============================= Utilities ============================== + + private inline fun Response.parseAs(): T { + return json.decodeFromString(body.string()) + } +} diff --git a/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Dto.kt b/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Dto.kt new file mode 100644 index 000000000..5928fdeb7 --- /dev/null +++ b/src/en/atsumaru/src/eu/kanade/tachiyomi/extension/en/atsumaru/Dto.kt @@ -0,0 +1,115 @@ +package eu.kanade.tachiyomi.extension.en.atsumaru + +import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.source.model.SManga +import kotlinx.serialization.Serializable +import java.text.ParseException +import java.text.SimpleDateFormat +import java.util.Locale + +@Serializable +class BrowseMangaDto( + val items: List, +) + +@Serializable +class MangaObjectDto( + val manga: MangaDto, +) + +@Serializable +class SearchResultsDto( + val hits: List, +) { + @Serializable + class SearchMangaDto( + val info: MangaDto, + ) +} + +@Serializable +class MangaDto( + // Common + private val title: String, + private val cover: String, + private val slug: String, + + // Details + private val authors: List? = null, + private val description: String? = null, + private val genres: List? = null, + private val statuses: List? = null, + + // Chapters + val chapters: List? = null, +) { + fun toSManga(): SManga = SManga.create().apply { + title = this@MangaDto.title + thumbnail_url = cover + url = "/manga/s1/$slug" + + authors?.let { + author = it.joinToString() + } + description = this@MangaDto.description + genres?.let { + genre = it.joinToString() + } + statuses?.let { + status = when (it.first().lowercase().substringBefore(" ")) { + "ongoing" -> SManga.ONGOING + "complete" -> SManga.COMPLETED + else -> SManga.UNKNOWN + } + } + } +} + +@Serializable +class ChapterDto( + val pages: List, + val name: String, + private val type: String, + private val title: String? = null, + private val date: String? = null, +) { + fun toSChapter(slug: String): SChapter = SChapter.create().apply { + val chapterNumber = this@ChapterDto.name.replace("_", ".") + .filter { it.isDigit() || it == '.' } + + name = buildString { + append("Chapter ") + append(chapterNumber) + if (title != null) { + append(" - ") + append(title) + } + } + url = "$slug/${this@ChapterDto.name}" + chapter_number = chapterNumber.toFloat() + scanlator = type.takeUnless { it == "Chapter" } + date?.let { + date_upload = parseDate(it) + } + } + + private fun parseDate(dateStr: String): Long { + return try { + DATE_FORMAT.parse(dateStr)!!.time + } catch (_: ParseException) { + 0L + } + } + + companion object { + private val DATE_FORMAT by lazy { + SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH) + } + } +} + +@Serializable +class PageDto( + val pageURLs: List, + val name: String, +)