parent
8dd884535b
commit
47e328dc84
|
@ -1,8 +1,12 @@
|
||||||
ext {
|
ext {
|
||||||
extName = 'Nekopost'
|
extName = 'Nekopost'
|
||||||
extClass = '.Nekopost'
|
extClass = '.Nekopost'
|
||||||
extVersionCode = 10
|
extVersionCode = 11
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
apply from: "$rootDir/common.gradle"
|
apply from: "$rootDir/common.gradle"
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(project(":lib:cryptoaes"))
|
||||||
|
}
|
||||||
|
|
|
@ -2,8 +2,10 @@ package eu.kanade.tachiyomi.extension.th.nekopost
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawChapterInfo
|
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawChapterInfo
|
||||||
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectInfo
|
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectInfo
|
||||||
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectSearchSummary
|
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectSearchSummaryList
|
||||||
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectSummaryList
|
import eu.kanade.tachiyomi.extension.th.nekopost.model.RawProjectSummaryList
|
||||||
|
import eu.kanade.tachiyomi.extension.th.nekopost.model.SearchRequest
|
||||||
|
import eu.kanade.tachiyomi.lib.cryptoaes.CryptoAES
|
||||||
import eu.kanade.tachiyomi.network.GET
|
import eu.kanade.tachiyomi.network.GET
|
||||||
import eu.kanade.tachiyomi.network.POST
|
import eu.kanade.tachiyomi.network.POST
|
||||||
import eu.kanade.tachiyomi.source.model.FilterList
|
import eu.kanade.tachiyomi.source.model.FilterList
|
||||||
|
@ -13,6 +15,7 @@ import eu.kanade.tachiyomi.source.model.SChapter
|
||||||
import eu.kanade.tachiyomi.source.model.SManga
|
import eu.kanade.tachiyomi.source.model.SManga
|
||||||
import eu.kanade.tachiyomi.source.online.HttpSource
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
|
import kotlinx.serialization.encodeToString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
import okhttp3.Headers
|
import okhttp3.Headers
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
@ -25,7 +28,7 @@ import java.util.Locale
|
||||||
|
|
||||||
class Nekopost : HttpSource() {
|
class Nekopost : HttpSource() {
|
||||||
private val json: Json by injectLazy()
|
private val json: Json by injectLazy()
|
||||||
override val baseUrl: String = "https://www.nekopost.net/manga/"
|
override val baseUrl: String = "https://www.nekopost.net/project"
|
||||||
|
|
||||||
private val latestMangaEndpoint: String = "https://api.osemocphoto.com/frontAPI/getLatestChapter/m"
|
private val latestMangaEndpoint: String = "https://api.osemocphoto.com/frontAPI/getLatestChapter/m"
|
||||||
private val projectDataEndpoint: String = "https://api.osemocphoto.com/frontAPI/getProjectInfo"
|
private val projectDataEndpoint: String = "https://api.osemocphoto.com/frontAPI/getProjectInfo"
|
||||||
|
@ -172,24 +175,25 @@ class Nekopost : HttpSource() {
|
||||||
|
|
||||||
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request {
|
||||||
val headers = Headers.headersOf("accept", "*/*", "content-type", "text/plain;charset=UTF-8", "origin", nekopostUrl)
|
val headers = Headers.headersOf("accept", "*/*", "content-type", "text/plain;charset=UTF-8", "origin", nekopostUrl)
|
||||||
val requestBody = "{\"keyword\":\"$query\"}".toRequestBody()
|
val requestBody = Json.encodeToString(SearchRequest(query, page)).toRequestBody()
|
||||||
return POST("$nekopostUrl/api/explore/search", headers, requestBody)
|
return POST("$nekopostUrl/api/explore/search", headers, requestBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun searchMangaParse(response: Response): MangasPage {
|
override fun searchMangaParse(response: Response): MangasPage {
|
||||||
val responseBody = response.body.string()
|
val responseBody = response.body.string()
|
||||||
|
val decrypted = CryptoAES.decrypt(responseBody, "AeyTest")
|
||||||
|
|
||||||
val projectList: List<RawProjectSearchSummary> = json.decodeFromString(responseBody)
|
val projectList: RawProjectSearchSummaryList = json.decodeFromString(decrypted)
|
||||||
val mangaList: List<SManga> = projectList.filter { project ->
|
val mangaList: List<SManga> = projectList.listProject
|
||||||
project.projectType == "m"
|
.filter { it.projectType == "m" }
|
||||||
}.map { project ->
|
.map {
|
||||||
SManga.create().apply {
|
SManga.create().apply {
|
||||||
url = project.projectId.toString()
|
url = it.projectId.toString()
|
||||||
title = project.projectName
|
title = it.projectName
|
||||||
status = project.status
|
status = it.status
|
||||||
initialized = false
|
thumbnail_url = "$fileHost/collectManga/${it.projectId}/${it.projectId}_cover.jpg?ver=${it.coverVersion}"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return MangasPage(mangaList, false)
|
return MangasPage(mangaList, false)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package eu.kanade.tachiyomi.extension.th.nekopost.model
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class RawProjectSearchSummaryList(
|
||||||
|
val listProject: List<RawProjectSearchSummary>,
|
||||||
|
val totalRecord: String,
|
||||||
|
)
|
|
@ -0,0 +1,9 @@
|
||||||
|
package eu.kanade.tachiyomi.extension.th.nekopost.model
|
||||||
|
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class SearchRequest(
|
||||||
|
val keyword: String,
|
||||||
|
val pageNo: Int,
|
||||||
|
)
|
Loading…
Reference in New Issue