From e8fed7ce6d684efb5c9f2296967c274f6ab7ba9e Mon Sep 17 00:00:00 2001 From: Creepler13 Date: Sat, 1 Mar 2025 04:22:32 +0100 Subject: [PATCH] new Source Kanjiku (#7766) * new Source Kanjiku * changes * lint * lint again --- src/all/kanjiku/build.gradle | 7 ++ .../kanjiku/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 2962 bytes .../kanjiku/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1654 bytes .../kanjiku/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4053 bytes .../kanjiku/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 6880 bytes .../res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 9662 bytes .../extension/all/kanjiku/Kanjiku.kt | 117 ++++++++++++++++++ .../extension/all/kanjiku/KanjikuFactory.kt | 11 ++ 8 files changed, 135 insertions(+) create mode 100644 src/all/kanjiku/build.gradle create mode 100644 src/all/kanjiku/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/kanjiku/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/kanjiku/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/kanjiku/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/kanjiku/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/Kanjiku.kt create mode 100644 src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/KanjikuFactory.kt diff --git a/src/all/kanjiku/build.gradle b/src/all/kanjiku/build.gradle new file mode 100644 index 000000000..dfe9d3cc4 --- /dev/null +++ b/src/all/kanjiku/build.gradle @@ -0,0 +1,7 @@ +ext { + extName = 'Kanjiku' + extClass = '.KanjikuFactory' + extVersionCode = 1 +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/kanjiku/res/mipmap-hdpi/ic_launcher.png b/src/all/kanjiku/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..70c0dc5a9dc2e26bffcccd2b92c8edea6f550b20 GIT binary patch literal 2962 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 IM6N<$g81fa(EtDd literal 0 HcmV?d00001 diff --git a/src/all/kanjiku/res/mipmap-mdpi/ic_launcher.png b/src/all/kanjiku/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..09d1141ba682c94c7ebe7e57b731e1f10b0cd305 GIT binary patch literal 1654 zcmV-+28sEJP)E005$CY=tu0ODDKjwOHKg+0l)9b10h~=vPF_UoyNg<04k{u@)F{$g*4EY=FJHb4zd+ymD5g$DwBP_mE_@$#{1`C`Od2;hzDl5r`ix#F*9a?1r=ym%4j=jY+emw#^ozP`S& zva({j5Q=!rFaX{^V0d^KUcY_~_wV0_n>TMlbaXV_y?Yn%ma4lsfp~j+LrY5wba!_{ zcz8I(#l=B;dpnesl|e~K35<-4uwg__>gnleu_Tr}U~6j&qobp+xVQ)pA3lVxt}ehu zprD|@JQYlvhlGT{>gp#zP^44%rF3LP5|%UzlV<>Kf>k9m!Y`07{)_?CgZ+&!2Os zkU$R)59safWy|;X_d{J>9fXC20bbRiwzd`;8X9;VT9ew-r%xd-FOR=(Zf*uIFE2<* zNjc;lVE}ZqDF>cCdj|IQ_J9u+@aD}M-h|rF&=7q4_6@eSw%Dq)840G1cXxMTVPOHt zBRM%a3^6%5$%e?x%!K;-dU){Q0k5;Ov%`Or@a*htK<`6aTN_-ta>WEEg_mIfnn*d| z=H|w(B#V!akAuIzKU<6-u;hZLrzd1&Wbnp;fq_t2S;+uTo;-oV!a|OBcXxN_>FHqu z5D`}S>4T(UTM>dculycXq6 zMMVXN7v-CsogHLlWw9YF0+8JH=+Pst9;KzF5D^gpX=!Qj;>8PaadBZ$6!SqrK`iS0 z`SbAZ-8;6ppPwItk~avFs#r%y2ju7H0~zJ|_3LbDs%8{^<>lpEoyY*R#<_FnU~_Ym zK@9`M#Kf39P*qjMVRGZf4Xz4OBS6ZF@87>eXlN+R&CLNmfOGYb>OCbWm0+5C@7_JG zUR2SRmzM!=yzutzTh0rqk$5^EXbwS>hX}$V0LcR+lDZU&MowpZwuTEAF0fe2jnvds z4i#!j>!=-&h5;~Uh3-No)5ru#LMTxw@ySb6c_?`;6;Jbolb8UsEUhM7E{;NqEKjA9 zt_^D9%|F-LR~P`x*C7v>3pURIQ4qCjf_yDKqa6!?-ZO&UMNe)FJvj6676a%doKk4$ zC8TKBSOgFm8L1jVdN6t(G8#6=0-z^aDKFIGS;R9+IcKN};fZUp2Sh53))+PM76XV_ zQmr!SofBGOmA(^BV!X;KdcX*bXt^~4VG)2OqK)LlPXWN&=Lb4P)oQlhrlOTdZyk9E z&dkgRJrlblz@G@D8mwNP6vw?lbJbVa5O&EP{`$Iedog@IoJN>{! zAg0ifydWw}bliW8mLt=T2$qjHDPhM3dg=lG0bh>8e6kwSl>h($07*qoM6N<$f)E!3 AmjD0& literal 0 HcmV?d00001 diff --git a/src/all/kanjiku/res/mipmap-xhdpi/ic_launcher.png b/src/all/kanjiku/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..55c98d7a7ace2c9e08588c7e1271b1053013c164 GIT binary patch literal 4053 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 Hu0mjf?_B0= literal 0 HcmV?d00001 diff --git a/src/all/kanjiku/res/mipmap-xxhdpi/ic_launcher.png b/src/all/kanjiku/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..6d3f89be5263e165f3d829e871d1e9de0fb26e15 GIT binary patch literal 6880 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 literal 0 HcmV?d00001 diff --git a/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/Kanjiku.kt b/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/Kanjiku.kt new file mode 100644 index 000000000..2368dbd7f --- /dev/null +++ b/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/Kanjiku.kt @@ -0,0 +1,117 @@ +package eu.kanade.tachiyomi.extension.all.kanjiku + +import eu.kanade.tachiyomi.network.GET +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 okhttp3.HttpUrl.Companion.toHttpUrl +import okhttp3.Request +import okhttp3.Response +import org.jsoup.nodes.Document +import org.jsoup.nodes.Element +import rx.Observable + +class Kanjiku( + override val lang: String, + subDomain: String, +) : ParsedHttpSource() { + + override val name = "Kanjiku" + override val baseUrl = "https://${subDomain}kanjiku.net" + override val supportsLatest = true + + override fun popularMangaRequest(page: Int): Request = GET("$baseUrl/mangas", headers) + override fun latestUpdatesRequest(page: Int): Request = GET("$baseUrl/latest", headers) + + override fun popularMangaSelector(): String = ".manga_box" + + override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply { + setUrlWithoutDomain(element.absUrl("href")) + title = element.selectFirst(".manga_title")!!.text() + thumbnail_url = element.selectFirst("img")?.absUrl("src") + } + + override fun latestUpdatesParse(response: Response): MangasPage { + val mangas = response.asJsoup().select(".manga_overview_box_headline a").map { element -> + SManga.create().apply { + var url = element.absUrl("href").toHttpUrl() + if (url.pathSegments.last() == "") { + // remove empty path segment + url = url.newBuilder().removePathSegment(url.pathSegments.lastIndex).build() + } + setUrlWithoutDomain(url.toString()) + title = element.text() + } + }.distinctBy { it.url } + return MangasPage(mangas, false) + } + + override fun fetchSearchManga( + page: Int, + query: String, + filters: FilterList, + ): Observable { + return Observable.just( + MangasPage( + client.newCall(popularMangaRequest(page)).execute().asJsoup() + .select(popularMangaSelector()).map { popularMangaFromElement(it) } + .filter { query.lowercase() in it.title.lowercase() }, + false, + ), + ) + } + + override fun mangaDetailsParse(document: Document): SManga = SManga.create().apply { + title = document.selectFirst(".manga_page_title")!!.text() + description = document.selectFirst(".manga_description")?.text() + thumbnail_url = document.selectFirst(".manga_page_picture")?.absUrl("src") + status = when ( + document.selectFirst(".tags .tag_container_special .tag")?.absUrl("href") + ?.toHttpUrl()?.pathSegments?.last() + ) { + "47" -> SManga.ONGOING + "48" -> SManga.COMPLETED + "49" -> SManga.ON_HIATUS + "50" -> SManga.CANCELLED + "51" -> SManga.LICENSED + else -> SManga.UNKNOWN // using tag ids so that it works in all languages + } + genre = document.select(".tags .tag_container .tag").joinToString { it.text() } + } + + override fun chapterListSelector(): String = ".manga_chapter a" + + override fun chapterFromElement(element: Element): SChapter = SChapter.create().apply { + setUrlWithoutDomain( + element.absUrl("href").toHttpUrl().run { + newBuilder().setPathSegment(pathSegments.lastIndex, "0").build() + }.toString(), + ) + name = element.text() + } + + override fun pageListParse(document: Document): List = + document.select(".container img").mapIndexed { index, element -> + Page(index, imageUrl = element.absUrl("src")) + } + + override fun latestUpdatesFromElement(element: Element): SManga = + throw UnsupportedOperationException() + + override fun searchMangaFromElement(element: Element): SManga = + throw UnsupportedOperationException() + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request = + throw UnsupportedOperationException() + + override fun searchMangaSelector(): String = throw UnsupportedOperationException() + override fun latestUpdatesSelector(): String = throw UnsupportedOperationException() + override fun searchMangaNextPageSelector(): String? = null + override fun popularMangaNextPageSelector(): String? = null + override fun latestUpdatesNextPageSelector(): String? = null + override fun imageUrlParse(document: Document): String = "" +} diff --git a/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/KanjikuFactory.kt b/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/KanjikuFactory.kt new file mode 100644 index 000000000..70408b92a --- /dev/null +++ b/src/all/kanjiku/src/eu/kanade/tachiyomi/extension/all/kanjiku/KanjikuFactory.kt @@ -0,0 +1,11 @@ +package eu.kanade.tachiyomi.extension.all.kanjiku + +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +class KanjikuFactory : SourceFactory { + override fun createSources(): List = listOf( + Kanjiku("de", ""), + Kanjiku("en", "eng."), + ) +}