Merge branch 'sources/hentai18vn' of https://github.com/dragonx943/Kotatsu-parsers into sources/hentai18vn

Draken 1 year ago
commit e91e8fcccb

@ -101,7 +101,7 @@ internal class WaMangaParser(
number = it.getFloatOrDefault("chapter", 0f), number = it.getFloatOrDefault("chapter", 0f),
volume = it.getIntOrDefault("volume", 0), volume = it.getIntOrDefault("volume", 0),
name = it.getStringOrNull("full_title") ?: manga.title, name = it.getStringOrNull("full_title") ?: manga.title,
scanlator = it.getJSONArray("teams").optJSONObject(0, null)?.getStringOrNull("name"), scanlator = it.getJSONArray("teams").getJSONObject(0)?.getStringOrNull("name"),
uploadDate = dateFormat.tryParse(it.getStringOrNull("published_on")), uploadDate = dateFormat.tryParse(it.getStringOrNull("published_on")),
branch = null, branch = null,
) )

@ -1,7 +1,6 @@
package org.koitharu.kotatsu.parsers.site.vi package org.koitharu.kotatsu.parsers.site.vi
import androidx.collection.ArrayMap import androidx.collection.ArrayMap
import androidx.collection.ArraySet
import org.json.JSONObject import org.json.JSONObject
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaParserAuthProvider import org.koitharu.kotatsu.parsers.MangaParserAuthProvider
@ -24,7 +23,11 @@ import org.koitharu.kotatsu.parsers.util.domain
import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.generateUid
import org.koitharu.kotatsu.parsers.util.getCookies import org.koitharu.kotatsu.parsers.util.getCookies
import org.koitharu.kotatsu.parsers.util.json.asTypedList import org.koitharu.kotatsu.parsers.util.json.asTypedList
import org.koitharu.kotatsu.parsers.util.json.getStringOrNull
import org.koitharu.kotatsu.parsers.util.json.mapJSON import org.koitharu.kotatsu.parsers.util.json.mapJSON
import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
import org.koitharu.kotatsu.parsers.util.nullIfEmpty
import org.koitharu.kotatsu.parsers.util.parseJson import org.koitharu.kotatsu.parsers.util.parseJson
import org.koitharu.kotatsu.parsers.util.parseJsonArray import org.koitharu.kotatsu.parsers.util.parseJsonArray
import org.koitharu.kotatsu.parsers.util.parseRaw import org.koitharu.kotatsu.parsers.util.parseRaw
@ -34,7 +37,6 @@ import org.koitharu.kotatsu.parsers.util.toTitleCase
import org.koitharu.kotatsu.parsers.util.tryParse import org.koitharu.kotatsu.parsers.util.tryParse
import org.koitharu.kotatsu.parsers.util.urlBuilder import org.koitharu.kotatsu.parsers.util.urlBuilder
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.time.Instant
import java.util.EnumSet import java.util.EnumSet
import java.util.Locale import java.util.Locale
@ -92,11 +94,11 @@ internal class CMangaParser(context: MangaLoaderContext) :
.mapJSON { jo -> .mapJSON { jo ->
val chapterId = jo.getLong("id_chapter") val chapterId = jo.getLong("id_chapter")
val info = jo.parseJson("info") val info = jo.parseJson("info")
val chapterNumber = info.getInt("num") val chapterNumber = info.getString("num")
MangaChapter( MangaChapter(
id = generateUid(chapterId), id = generateUid(chapterId),
name = if (info.isLocked()) "Chapter $chapterNumber - locked" else "Chapter $chapterNumber", name = if (info.isLocked()) "Chapter $chapterNumber - locked" else "Chapter $chapterNumber",
number = chapterNumber + 1f, number = chapterNumber.toFloatOrNull()?.plus(1) ?: 0f,
volume = 0, volume = 0,
url = "/album/$slug/chapter-$mangaId-$chapterId", url = "/album/$slug/chapter-$mangaId-$chapterId",
uploadDate = df.tryParse(info.getString("last_update")), uploadDate = df.tryParse(info.getString("last_update")),
@ -141,33 +143,32 @@ internal class CMangaParser(context: MangaLoaderContext) :
webClient.httpGet(url).parseJsonArray() webClient.httpGet(url).parseJsonArray()
} }
return mangaList.mapJSON { jo -> return mangaList.mapJSONNotNull { jo ->
val info = jo.parseJson("info") val info = jo.parseJson("info")
val slug = info.getString("url") val slug = info.getStringOrNull("url") ?: return@mapJSONNotNull null
val id = info.getLong("id") val id = info.optLong("id").takeIf { it != 0L } ?: return@mapJSONNotNull null
val relativeUrl = "/album/$slug-$id" val relativeUrl = "/album/$slug-$id"
val mangaTags = ArraySet<MangaTag>()
info.getJSONArray("tags").asTypedList<String>().forEach {
tags.get()[it.lowercase()]?.let { mangaTags.add(it) }
}
Manga( Manga(
id = generateUid(id), id = generateUid(id),
title = info.getString("name").toTitleCase(), title = info.optString("name").toTitleCase(),
altTitle = info.getJSONArray("name_other").asTypedList<String>().joinToString(), altTitle = info.optJSONArray("name_other")?.asTypedList<String>()?.joinToString()?.nullIfEmpty(),
url = relativeUrl, url = relativeUrl,
publicUrl = relativeUrl.toAbsoluteUrl(domain), publicUrl = relativeUrl.toAbsoluteUrl(domain),
rating = RATING_UNKNOWN, rating = RATING_UNKNOWN,
isNsfw = false, isNsfw = false,
coverUrl = "/assets/tmp/album/${info.getString("avatar")}".toAbsoluteUrl(domain), coverUrl = "/assets/tmp/album/${info.getString("avatar")}".toAbsoluteUrl(domain),
tags = mangaTags, tags = info.optJSONArray("tags")?.asTypedList<String>()
state = when (info.getString("status")) { ?.mapNotNullToSet { tags.get()[it.lowercase()] }
.orEmpty(),
state = when (info.optString("status")) {
"doing" -> MangaState.ONGOING "doing" -> MangaState.ONGOING
else -> null // can't find any manga with other status than on going "done" -> MangaState.FINISHED
else -> null
}, },
author = null, author = null,
largeCoverUrl = null, largeCoverUrl = null,
description = info.optString("detail"), description = info.getStringOrNull("detail")?.replace("\\\"", "\""),
chapters = emptyList(), chapters = emptyList(),
source = source, source = source,
) )

Loading…
Cancel
Save