From 00cddedd166ef361254d4ad0393d23790ce3b50b Mon Sep 17 00:00:00 2001 From: Solitai7e <60846439+Solitai7e@users.noreply.github.com> Date: Sun, 19 Feb 2023 17:01:33 +0000 Subject: [PATCH] New source: Pixiv (#15387) * New source: Pixiv * I screwed up again (this is going to be squashed right?) * Requested changes --- src/all/pixiv/AndroidManifest.xml | 2 + src/all/pixiv/build.gradle | 13 ++ src/all/pixiv/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 3499 bytes src/all/pixiv/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 1998 bytes .../pixiv/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 4648 bytes .../pixiv/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 8189 bytes .../pixiv/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 11345 bytes src/all/pixiv/res/web_hi_res_512.png | Bin 0 -> 38117 bytes .../tachiyomi/extension/all/pixiv/Pixiv.kt | 204 ++++++++++++++++++ .../extension/all/pixiv/PixivFactory.kt | 9 + .../extension/all/pixiv/Structures.kt | 68 ++++++ 11 files changed, 296 insertions(+) create mode 100644 src/all/pixiv/AndroidManifest.xml create mode 100644 src/all/pixiv/build.gradle create mode 100644 src/all/pixiv/res/mipmap-hdpi/ic_launcher.png create mode 100644 src/all/pixiv/res/mipmap-mdpi/ic_launcher.png create mode 100644 src/all/pixiv/res/mipmap-xhdpi/ic_launcher.png create mode 100644 src/all/pixiv/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 src/all/pixiv/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 src/all/pixiv/res/web_hi_res_512.png create mode 100644 src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/Pixiv.kt create mode 100644 src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFactory.kt create mode 100644 src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/Structures.kt diff --git a/src/all/pixiv/AndroidManifest.xml b/src/all/pixiv/AndroidManifest.xml new file mode 100644 index 000000000..30deb7f79 --- /dev/null +++ b/src/all/pixiv/AndroidManifest.xml @@ -0,0 +1,2 @@ + + diff --git a/src/all/pixiv/build.gradle b/src/all/pixiv/build.gradle new file mode 100644 index 000000000..51a48e1bf --- /dev/null +++ b/src/all/pixiv/build.gradle @@ -0,0 +1,13 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlinx-serialization' + +ext { + extName = 'Pixiv' + pkgNameSuffix = 'all.pixiv' + extClass = '.PixivFactory' + extVersionCode = 1 + isNsfw = true +} + +apply from: "$rootDir/common.gradle" diff --git a/src/all/pixiv/res/mipmap-hdpi/ic_launcher.png b/src/all/pixiv/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..50286f2b53b28cd955914d414ca2828a6539ab5a GIT binary patch literal 3499 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 Z{uc@Vk-_3r+4BGZ002ovPDHLkV1j3^g}DF# literal 0 HcmV?d00001 diff --git a/src/all/pixiv/res/mipmap-mdpi/ic_launcher.png b/src/all/pixiv/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..26508e2fea7d3e0b663b263aa7e496b02676efa4 GIT binary patch literal 1998 zcmV;<2Qm1GP)Px+h)G02RA@u(T3KurRT%!x%-r76y%#KE%3@pS0#Q^n5)fh}lCVS##Sp~=BnGWf zACzcBiD~@60j(EO*Xqw{x+C zkZ>QE+cPug{NMk5|96%P!%hBSH+lTH1>ibvjWzF3m_DMOxy0ikQ70< z0npz$w{I9YmE&TNx;vO8XvQwo4sNXf|$K+%Yn zfi7?GHf}e7ROV8F`2!7PKxZ)M9kZQtXm!yTfbPKn#74BlJ4KnKlTNBWTr%^5bOq>U z$s;F2wjyZlg{%<(x&{R>ym_G0t$724*{L8xZ&vM$839;<__UK8)9BxwxbOfh22x71 zgLf3LD~s1!hIafTzAl8wvR0$9rcfVT$H)x@M2!?G%d$IB$dqJ}SYUg7w?8|b{s zAu(V~9z%685S5Ml1m^vH8X6C3h^yhOIW&OcCc6ei?OPLo#Yjytuxg5o*`p=BWRCQ3 zeD;Ti?~iHvcinOYcgazJg=Gw{O_ot!XaG5Mk>jatDh_lRz1o)TW(DANA&a=UIe-B( z7z$+Ny%LsBl%bG50KBn7MdJZYmxV)eK5mmO18b+rSW;!Y+!qJtZAoJLS?(=*VLk{A zpvVLum`%#gNZT78mNB8oIfYcVC2-oD=sj5saGHi01_)xQJI-+bHwhf;_nGajB!p!^ z1Yk*kz|0@V&@fX$t^%|k*6`p+mXbo{#sp4Z5+&gDeLshaNYdaw2GA7m6lFkzFREbpc!r`EBuQn(b`|Xl6jT)%gA;&LmrUJ?_A5w0tS4*!c(R<~ zi&=^uH1#v{+a!KH6HpIf87OQrYCs&Yb(V~IVM|(NOw^FP>mXXh7x2Zz2F* z7Yhv_Z=JUW{216}GC%{5cSy)-0D*walG*-*f+;0NBKCK2-1U{c>2kPXSPA8=Pse~= zsJm(vRGT(hK>)-e_Q|}Xkj-w!>&nX1_R{+1HnaX2S0Tr!=^bh3L^G0 zV%`=N334BidhvT$1_*$=Xl)>Nk0OB8yH%_|sNwt-`@Z8i#%wOk0$#ma!ivfEO7^>> z8WwL;^-WLExccj10St37;GWQ|5ckx|sEL{DX*#gcfR6JV9i1G1^>7^R<9bjE11gIc z9w=d$J61w�d1l0K=Q@25`!H+Tb$*klkoW$exA8;?>vIjG@Dn5Dh$gvx-MbCCnbp zKpUMbOV}*)-+$S1A(oeOAl~9xz2nbq~({BsyB965r&~E~8I+4xd zU=B630EFIxYM^7GjEQCq5P-h8?J}Yhxh0Zu=B-%5GLY3kHQ?2MDiF@GXuOR2X%b@D zhK;V;sbcLu4Odm?q~~3N2(olZa>y7k0JsJc=7ER=)K8NkF(=6P_NqACBiN{eML|lg zIc3nmGi4z12`#5-8{j>C_j3z-*7nb?ct4ce1R)A5p@_(UC1yV`<}r(hEs;HQnKr1$ zhoK=X0EHOv4cLDacUA{uBuuQ{XE;z74RtzQtbEk>H%STd gakew=?xttpKUsgpZRBS*vj6}907*qoM6N<$f|IhJEdT%j literal 0 HcmV?d00001 diff --git a/src/all/pixiv/res/mipmap-xhdpi/ic_launcher.png b/src/all/pixiv/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..f259ea80d4f5cc21a00a654dfca0279eff68a5a0 GIT binary patch literal 4648 zcmV+@64&jCP)Px`;z>k7RCr$PU3-ue#Toz2?A{BGJ2)PC9s~sxMbHwEXf*OT)Fh}ufl^CFOXCx@ z%s(-u6|}6B7>yO9CQ$@bJdDpo#3&F&VkrtJD!zD#3Mg+C4i4@yJCpimcXoSvx~F?? zXK&HEsk(yQnd#~Ne&6@|9^E}_pz|oI1dO6Sz4PJd1fa-D&XXdG?Rt9#81>uML3y_5QTR7X<*iHZfqz zU0v%YT|Ko4<(IS}In04m?g+5wzsi25|1eK=@8v%;U00o_OT(V!JLdonJ7W4AA|`fR zvS%0$_9P8^V|O$?xN2(8xd2j`KP`*U1%R~O9P#I6gRH*8pV`%74r?X6Y4F@*9QwlW zH|rY+cRu>{;dUPo6!S&cIUY#2UyNo*LC$oi!~|-~oz*4l7EN6H$8$F8f}jI{tNC^H zQ>&{lpZWUER&$sqfCoEl+*a_|)}d8W+uO z)B!;UfCPZjp|ifeX?vp2oigF4tsz|d^#D+4IB#)2y7E6iV4WP@gj=S*rSV|ZIXiCI zbY0)S0BFtl1}V|00HE_p02Te`>{+tks2GtIG*?DaX_!#>JYbFkhc$bVhHKJ7J{rzb zt8i=#&GJB2I!((Or`7xtzySc3z)fWVQ2{{QUjm?8?V~MUTQJJ_fn_Zspk17I4Re-R z`f0!RiviBH7ZhUqpQZ98NyBMrxu&cyfV}|P!mL0CfHDBpz2>xRO?R1hup-*g5PrVe zAA$ds4pwDp%z2fid*|(IOKSn_0nm~U0L1_0X#iTk5fPav*3ycMLikwZPn6DC)n0`2 zQJy8EI{VtvIsm&f08nTuJX99o0nnq@oK_00vWLjw^4uvBq=+ggmJQ?n=$y=jkSY!5 z$EET^KK>VntM;{}L_q{Vb0!*!4**$)p_P#7L`ngHDfn99e^i_unmZ_|PTV*9+R}ai zzK<0Exz-CfUnpp`ztH7aZ`kd+UZvq-=R>HB?Mv(c^qk$Yna^-@LI_%yFeeZgp*mLA zpp!64P|;7`*49B5(3A54S$-EqMQ*U96D@I_*P$m~10y(Bp^wtkXpuh)bJp=&K)?x$ zy}G{U>x8NT%j!q~@_1H307xV5s&_y#q5grh20rT1(JliHs!I(V+1IXJ00vikUpmjFWXsX67@fJ0BXnwNLH~(qav}9 z1S_Z#-*89;aB8iI(+)H6tDhLCDK|h>M{mFe53Hb_lmqN-1r}_yv2c@(#hV@Mquf-K znMbNKh5M!g0N~F9at=5c*@!eEcYQeTmzluDM;Z9VPfVQN&vYRt%~c7Tzee_XZyWIB zdK>qzPGJMpD>H|(b`;Uq6dV8<<%l#(CVckVfmH^k4K;Dz0HPIfenBJJZH|A`)lXGu3^>=toQU<9CC>xGC?|a`NX|87 zz>Jd;m^{#Q9VmY^wgPv*pTcur*!ZT2ql%EYUu1z@lfacjOx!*)fl?~22(FjB`-us3EeU4GY=krJMGGsp+rdmaApCG17WKvBcIwZZF$tVM$nZs1 zo^M$4je`mQv0&N!6sL;&bLV3Rpu2>EShyserVUOk8 z(-gyUv8S>13sN914(ELx?GFc$oTl#2up& zfn<*WqVV^Om(tEaWZj|j2!#Sb)DfPB#?+a3>hvTkXgvjUG_18T?ah=MmXag%0ANku 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 literal 0 HcmV?d00001 diff --git a/src/all/pixiv/res/mipmap-xxxhdpi/ic_launcher.png b/src/all/pixiv/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..2302d362dd85a8d7b0a787426297626442aea386 GIT binary patch literal 11345 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 + + private val json: Json by injectLazy() + private val dateFormat by lazy { SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH) } + + override fun headersBuilder() = super.headersBuilder() + .add("Referer", "$baseUrl/") + + class SortFilter : Filter.Sort("Sort", arrayOf("Date Uploaded"), Selection(0, false)) + class NonMangaFilter : Filter.CheckBox("Include non-manga posts", false) + + private fun apiRequest(method: String, path: String, params: Map = emptyMap()): Request { + val url = baseUrl.toHttpUrl().newBuilder() + .addEncodedPathSegments("ajax$path") + .addEncodedQueryParameter("lang", siteLang) + .apply { params.forEach { (k, v) -> addEncodedQueryParameter(k, v) } } + .build() + + val headers = headersBuilder() + .add("Accept", "application/json") + .build() + + return Request(url, headers, method) + } + + private inline fun apiResponseParse(response: Response): T { + if (!response.isSuccessful) { + throw Exception(response.message) + } + + return response.body.string() + .let { json.decodeFromString>(it) } + .apply { if (error) throw Exception(message ?: response.message) } + .let { it.body!! } + } + + private fun illustUrlToId(url: String): String = + url.substringAfterLast("/") + + private fun parseTimestamp(string: String) = + runCatching { dateFormat.parse(string)?.time!! }.getOrDefault(0) + + private fun fetchIllust(url: String): Observable = + Observable.fromCallable { illustCache.get(url) } + .filter { it != null } + .switchIfEmpty( + Observable.defer { + client.newCall(illustRequest(url)).asObservable() + .map { illustParse(it) } + .doOnNext { illustCache.put(url, it) } + }, + ) + + private fun illustRequest(url: String): Request = + apiRequest("GET", "/illust/${illustUrlToId(url)}") + + private fun illustParse(response: Response): PixivIllust = + apiResponseParse(response) + + override fun popularMangaRequest(page: Int): Request = + searchMangaRequest(page, "漫画", FilterList()) + + override fun popularMangaParse(response: Response) = MangasPage( + mangas = apiResponseParse(response) + .popular?.run { recent.orEmpty() + permanent.orEmpty() } + ?.map(::searchResultParse) + .orEmpty(), + + hasNextPage = false, + ) + + override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { + var includeNonManga = false + var ascendingSort = false + + filters.forEach { + when (it) { + is NonMangaFilter -> includeNonManga = it.state + is SortFilter -> ascendingSort = it.state!!.ascending + else -> throw IllegalStateException("Filter unrecognized") + } + } + + val word = URLEncoder.encode(query, "UTF-8") + val type = if (includeNonManga) "artworks" else "manga" + + val parameters = mapOf( + "mode" to "all", + "order" to if (ascendingSort) "date" else "date_d", + "p" to page.toString(), + "type" to if (includeNonManga) "all" else "manga", + "word" to query, + ) + + return apiRequest("GET", "/search/$type/$word", parameters) + } + + override fun searchMangaParse(response: Response): MangasPage { + val mangas = apiResponseParse(response) + .run { manga ?: illustManga }?.data + ?.filter { it.isAdContainer != true } + ?.map(::searchResultParse) + .orEmpty() + + return MangasPage(mangas, hasNextPage = mangas.isNotEmpty()) + } + + private fun searchResultParse(result: PixivSearchResult) = SManga.create().apply { + url = "/artworks/${result.id!!}" + title = result.title ?: "" + thumbnail_url = result.url + } + + override fun latestUpdatesRequest(page: Int): Request = + searchMangaRequest(page, "漫画", FilterList()) + + override fun latestUpdatesParse(response: Response): MangasPage = + searchMangaParse(response) + + override fun mangaDetailsRequest(manga: SManga): Request = + illustRequest(manga.url) + + override fun mangaDetailsParse(response: Response) = SManga.create().apply { + val illust = apiResponseParse(response) + + url = "/artworks/${illust.id!!}" + title = illust.title ?: "" + artist = illust.userName + author = illust.userName + description = illust.description?.let { Jsoup.parseBodyFragment(it).wholeText() } + genre = illust.tags?.tags?.mapNotNull { it.tag }?.joinToString() + thumbnail_url = illust.urls?.thumb + update_strategy = UpdateStrategy.ONLY_FETCH_ONCE + } + + override fun fetchChapterList(manga: SManga): Observable> = + fetchIllust(manga.url).map { illust -> + listOf( + SChapter.create().apply { + url = manga.url + name = "Oneshot" + date_upload = illust.uploadDate?.let(::parseTimestamp) ?: 0 + chapter_number = 0F + }, + ) + } + + override fun chapterListRequest(manga: SManga): Request = + throw IllegalStateException("Not used") + + override fun chapterListParse(response: Response): List = + throw IllegalStateException("Not used") + + override fun pageListRequest(chapter: SChapter): Request = + apiRequest("GET", "/illust/${illustUrlToId(chapter.url)}/pages") + + override fun pageListParse(response: Response): List = + apiResponseParse>(response) + .mapIndexed { i, it -> Page(index = i, imageUrl = it.urls?.original) } + + override fun imageUrlRequest(page: Page): Request = + throw IllegalStateException("Not used") + + override fun imageUrlParse(response: Response): String = + throw IllegalStateException("Not used") + + override fun getMangaUrl(manga: SManga): String = + baseUrl + manga.url + + override fun getChapterUrl(chapter: SChapter): String = + baseUrl + chapter.url + + override fun getFilterList() = FilterList(listOf(SortFilter(), NonMangaFilter())) +} diff --git a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFactory.kt b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFactory.kt new file mode 100644 index 000000000..578b73272 --- /dev/null +++ b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/PixivFactory.kt @@ -0,0 +1,9 @@ +package eu.kanade.tachiyomi.extension.all.pixiv + +import eu.kanade.tachiyomi.source.Source +import eu.kanade.tachiyomi.source.SourceFactory + +class PixivFactory : SourceFactory { + override fun createSources(): List = + listOf("all", "ja", "en", "ko", "zh").map { lang -> Pixiv(lang) } +} diff --git a/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/Structures.kt b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/Structures.kt new file mode 100644 index 000000000..a9634fbe2 --- /dev/null +++ b/src/all/pixiv/src/eu/kanade/tachiyomi/extension/all/pixiv/Structures.kt @@ -0,0 +1,68 @@ +package eu.kanade.tachiyomi.extension.all.pixiv + +import kotlinx.serialization.Serializable + +@Serializable +internal data class PixivApiResponse( + val error: Boolean, + val body: T? = null, + val message: String? = null, +) + +@Serializable +internal data class PixivIllust( + val id: Int? = null, + val title: String? = null, + val userName: String? = null, + val description: String? = null, + val tags: PixivTags? = null, + val urls: PixivImageUrls? = null, + val uploadDate: String? = null, +) + +@Serializable +internal data class PixivSearchResult( + val id: Int? = null, + val title: String? = null, + val url: String? = null, + val isAdContainer: Boolean? = null, +) + +@Serializable +internal data class PixivTag( + val tag: String? = null, +) + +@Serializable +internal data class PixivTags( + val tags: List? = null, +) + +@Serializable +internal data class PixivSearchResults( + val manga: PixivSearchResultsIllusts? = null, + val illustManga: PixivSearchResultsIllusts? = null, + val popular: PixivSearchResultsPopular? = null, +) + +@Serializable +internal data class PixivSearchResultsIllusts( + val data: List? = null, +) + +@Serializable +internal data class PixivSearchResultsPopular( + val permanent: List? = null, + val recent: List? = null, +) + +@Serializable +internal data class PixivPage( + val urls: PixivImageUrls? = null, +) + +@Serializable +internal data class PixivImageUrls( + val original: String? = null, + val thumb: String? = null, +)