[LibSocial] Improvements

master
Koitharu 9 months ago
parent e73d636979
commit 307f2090f6
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -165,7 +165,7 @@ internal abstract class LibSocialParser(
} }
override suspend fun getDetails(manga: Manga): Manga = coroutineScope { override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
val chapters = async { fetchChapters(manga) } val chaptersDeferred = async { fetchChapters(manga) }
val url = HttpUrl.Builder() val url = HttpUrl.Builder()
.scheme(SCHEME_HTTPS) .scheme(SCHEME_HTTPS)
.host(apiHost) .host(apiHost)
@ -176,6 +176,7 @@ internal abstract class LibSocialParser(
.addQueryParameter("fields[]", "genres") .addQueryParameter("fields[]", "genres")
.addQueryParameter("fields[]", "tags") .addQueryParameter("fields[]", "tags")
.addQueryParameter("fields[]", "authors") .addQueryParameter("fields[]", "authors")
.addQueryParameter("fields[]", "close_view")
.build() .build()
val json = webClient.httpGet(url).parseJson().getJSONObject("data") val json = webClient.httpGet(url).parseJson().getJSONObject("data")
val genres = json.getJSONArray("genres").mapJSON { jo -> val genres = json.getJSONArray("genres").mapJSON { jo ->
@ -184,14 +185,27 @@ internal abstract class LibSocialParser(
val tags = json.getJSONArray("tags").mapJSON { jo -> val tags = json.getJSONArray("tags").mapJSON { jo ->
MangaTag(title = jo.getString("name"), key = "t" + jo.getInt("id"), source = source) MangaTag(title = jo.getString("name"), key = "t" + jo.getInt("id"), source = source)
} }
val author = json.getJSONArray("authors").optJSONObject(0)?.getStringOrNull("name") val authors = json.getJSONArray("authors").mapJSONNotNullToSet {
it.getStringOrNull("name")
}
val chapters = chaptersDeferred.await()
val isRestricted = json.getIntOrDefault("close_view", 0) > 0
manga.copy( manga.copy(
title = json.getStringOrNull("rus_name") ?: manga.title, title = json.getStringOrNull("rus_name") ?: manga.title,
altTitles = setOfNotNull(json.getStringOrNull("name")), altTitles = setOfNotNull(json.getStringOrNull("name")),
tags = tagsSetOf(tags, genres), tags = tagsSetOf(tags, genres),
authors = setOfNotNull(author), state = if (chapters.isEmpty() && isRestricted) {
MangaState.RESTRICTED
} else {
manga.state
},
authors = authors,
contentRating = json.optJSONObject("ageRestriction")?.let {
val id = it.getIntOrDefault("id", -1)
if (id >= 4) ContentRating.SUGGESTIVE else sourceContentRating
} ?: manga.contentRating,
description = json.getString("summary").nl2br(), description = json.getString("summary").nl2br(),
chapters = chapters.await(), chapters = chapters,
) )
} }
@ -258,7 +272,7 @@ internal abstract class LibSocialParser(
publicUrl = "https://$domain/ru/manga/" + jo.getString("slug_url"), publicUrl = "https://$domain/ru/manga/" + jo.getString("slug_url"),
rating = jo.optJSONObject("rating") rating = jo.optJSONObject("rating")
?.getFloatOrDefault("average", RATING_UNKNOWN * 10f)?.div(10f) ?: RATING_UNKNOWN, ?.getFloatOrDefault("average", RATING_UNKNOWN * 10f)?.div(10f) ?: RATING_UNKNOWN,
contentRating = if (isNsfwSource) ContentRating.ADULT else null, contentRating = sourceContentRating,
coverUrl = cover.getString("thumbnail"), coverUrl = cover.getString("thumbnail"),
tags = setOf(), tags = setOf(),
state = statesMap[jo.optJSONObject("status")?.getIntOrDefault("id", -1) ?: -1], state = statesMap[jo.optJSONObject("status")?.getIntOrDefault("id", -1) ?: -1],
@ -300,6 +314,12 @@ internal abstract class LibSocialParser(
val branches = jo.getJSONArray("branches") val branches = jo.getJSONArray("branches")
for (j in 0 until branches.length()) { for (j in 0 until branches.length()) {
val bjo = branches.getJSONObject(j) val bjo = branches.getJSONObject(j)
val isRestricted = bjo.optJSONObject("restricted_view")?.let {
!it.getBooleanOrDefault("is_open", true)
} ?: false
if (isRestricted) {
continue
}
val id = bjo.getLong("id") val id = bjo.getLong("id")
val branchId = bjo.getLongOrDefault("branch_id", 0L) val branchId = bjo.getLongOrDefault("branch_id", 0L)
val team = bjo.getJSONArray("teams").optJSONObject(0)?.getStringOrNull("name") val team = bjo.getJSONArray("teams").optJSONObject(0)?.getStringOrNull("name")

Loading…
Cancel
Save