nHentai fix language searching in favorites, also cleanup the source

This commit is contained in:
Jobobby04 2020-06-25 14:53:06 -04:00
parent d7509c1ba9
commit a2f2e7658d

View File

@ -70,11 +70,6 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
val advQuery = combineQuery(filters) val advQuery = combineQuery(filters)
val favoriteFilter = filters.findInstance<FavoriteFilter>() val favoriteFilter = filters.findInstance<FavoriteFilter>()
val uploadedFilter = filters.findInstance<UploadedFilter>() val uploadedFilter = filters.findInstance<UploadedFilter>()
val langFilter = filters.filterIsInstance<FilterLang>().firstOrNull()
var langFilterString = ""
if (langFilter != null) {
langFilterString = SOURCE_LANG_LIST.first { it.first == langFilter.values[langFilter.state] }.second
}
val url: HttpUrl.Builder val url: HttpUrl.Builder
@ -84,7 +79,7 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
.addQueryParameter("page", page.toString()) .addQueryParameter("page", page.toString())
} else { } else {
url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder() url = "$baseUrl/search".toHttpUrlOrNull()!!.newBuilder()
.addQueryParameter("q", "$query +$langFilterString $advQuery") .addQueryParameter("q", "$query $advQuery")
.addQueryParameter("page", page.toString()) .addQueryParameter("page", page.toString())
if (uploadedFilter!!.state.isBlank()) { if (uploadedFilter!!.state.isBlank()) {
@ -135,7 +130,7 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
override fun mangaDetailsRequest(manga: SManga) = nhGet(baseUrl + manga.url) override fun mangaDetailsRequest(manga: SManga) = nhGet(baseUrl + manga.url)
fun parseResultPage(response: Response): MangasPage { private fun parseResultPage(response: Response): MangasPage {
val doc = response.asJsoup() val doc = response.asJsoup()
// TODO Parse lang + tags // TODO Parse lang + tags
@ -181,14 +176,14 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
englishTitle = title["english"].nullString englishTitle = title["english"].nullString
} }
obj["images"].nullObj?.let { obj["images"].nullObj?.let { images ->
coverImageType = it["cover"]?.get("t").nullString coverImageType = images["cover"]?.get("t").nullString
it["pages"].nullArray?.mapNotNull { images["pages"].nullArray?.mapNotNull {
it?.asJsonObject?.get("t").nullString it?.asJsonObject?.get("t").nullString
}?.let { }?.let {
pageImageTypes = it pageImageTypes = it
} }
thumbnailImageType = it["thumbnail"]?.get("t").nullString thumbnailImageType = images["thumbnail"]?.get("t").nullString
} }
scanlator = obj["scanlator"].nullString scanlator = obj["scanlator"].nullString
@ -206,13 +201,13 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
} }
} }
fun getOrLoadMetadata(mangaId: Long?, nhId: Long) = getOrLoadMetadata(mangaId) { private fun getOrLoadMetadata(mangaId: Long?, nhId: Long) = getOrLoadMetadata(mangaId) {
client.newCall(nhGet(baseUrl + NHentaiSearchMetadata.nhIdToPath(nhId))) client.newCall(nhGet(baseUrl + NHentaiSearchMetadata.nhIdToPath(nhId)))
.asObservableSuccess() .asObservableSuccess()
.toSingle() .toSingle()
} }
override fun fetchChapterList(manga: SManga) = Observable.just( override fun fetchChapterList(manga: SManga): Observable<List<SChapter>> = Observable.just(
listOf( listOf(
SChapter.create().apply { SChapter.create().apply {
url = manga.url url = manga.url
@ -222,7 +217,7 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
) )
) )
override fun fetchPageList(chapter: SChapter) = getOrLoadMetadata(chapter.mangaId, NHentaiSearchMetadata.nhUrlToId(chapter.url)).map { metadata -> override fun fetchPageList(chapter: SChapter): Observable<List<Page>> = getOrLoadMetadata(chapter.mangaId, NHentaiSearchMetadata.nhUrlToId(chapter.url)).map { metadata ->
if (metadata.mediaId == null) { if (metadata.mediaId == null) {
emptyList() emptyList()
} else { } else {
@ -235,7 +230,7 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
override fun fetchImageUrl(page: Page) = Observable.just(page.imageUrl!!)!! override fun fetchImageUrl(page: Page) = Observable.just(page.imageUrl!!)!!
fun imageUrlFromType(mediaId: String, page: Int, t: String) = NHentaiSearchMetadata.typeToExtension(t)?.let { private fun imageUrlFromType(mediaId: String, page: Int, t: String) = NHentaiSearchMetadata.typeToExtension(t)?.let {
"https://i.nhentai.net/galleries/$mediaId/$page.$it" "https://i.nhentai.net/galleries/$mediaId/$page.$it"
} }
@ -267,6 +262,14 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
stringBuilder.append(" ") stringBuilder.append(" ")
} }
val langFilter = filters.filterIsInstance<FilterLang>().firstOrNull()
if (langFilter != null) {
val language = SOURCE_LANG_LIST.first { it.first == langFilter.values[langFilter.state] }.second
if (!language.isBlank()) {
stringBuilder.append("language:$language")
}
}
return stringBuilder.toString() return stringBuilder.toString()
} }
@ -323,11 +326,11 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
private inline fun <reified T> Iterable<*>.findInstance() = find { it is T } as? T private inline fun <reified T> Iterable<*>.findInstance() = find { it is T } as? T
val appName by lazy { private val appName by lazy {
context.getString(R.string.app_name) context.getString(R.string.app_name)
} }
fun nhGet(url: String, tag: Any? = null) = GET(url) private fun nhGet(url: String, tag: Any? = null) = GET(url)
.newBuilder() .newBuilder()
.header( .header(
"User-Agent", "User-Agent",
@ -368,13 +371,11 @@ class NHentai(context: Context) : HttpSource(), LewdSource<NHentaiSearchMetadata
private val UNICODE_ESCAPE_REGEX = Regex("\\\\u([0-9a-fA-F]{4})") private val UNICODE_ESCAPE_REGEX = Regex("\\\\u([0-9a-fA-F]{4})")
private const val REVERSE_PARAM = "TEH_REVERSE" private const val REVERSE_PARAM = "TEH_REVERSE"
private fun defaultSortFilterSelection() = Filter.Sort.Selection(0, false)
private val SOURCE_LANG_LIST = listOf( private val SOURCE_LANG_LIST = listOf(
Pair("All", ""), Pair("All", ""),
Pair("English", " english"), Pair("English", "english"),
Pair("Japanese", " japanese"), Pair("Japanese", "japanese"),
Pair("Chinese", " chinese") Pair("Chinese", "chinese")
) )
} }
} }