Migrate chapter number to float
This commit is contained in:
@@ -12,7 +12,7 @@ class MangaChapter(
|
||||
/**
|
||||
* Chapter number starting from 1, 0 if unknown
|
||||
*/
|
||||
@JvmField val number: Int,
|
||||
@JvmField val number: Float,
|
||||
/**
|
||||
* Volume number starting from 1, 0 if unknown
|
||||
*/
|
||||
@@ -51,7 +51,7 @@ class MangaChapter(
|
||||
) : this(
|
||||
id = id,
|
||||
name = name,
|
||||
number = number,
|
||||
number = number.toFloat(),
|
||||
volume = 0,
|
||||
url = url,
|
||||
scanlator = scanlator,
|
||||
@@ -82,7 +82,7 @@ class MangaChapter(
|
||||
override fun hashCode(): Int {
|
||||
var result = id.hashCode()
|
||||
result = 31 * result + name.hashCode()
|
||||
result = 31 * result + number
|
||||
result = 31 * result + number.hashCode()
|
||||
result = 31 * result + volume
|
||||
result = 31 * result + url.hashCode()
|
||||
result = 31 * result + (scanlator?.hashCode() ?: 0)
|
||||
@@ -96,7 +96,7 @@ class MangaChapter(
|
||||
return "MangaChapter($id - #$number [$url] - $source)"
|
||||
}
|
||||
|
||||
internal fun copy(volume: Int, number: Int) = MangaChapter(
|
||||
internal fun copy(volume: Int, number: Float) = MangaChapter(
|
||||
id = id,
|
||||
name = name,
|
||||
number = number,
|
||||
|
||||
@@ -11,13 +11,13 @@ import org.koitharu.kotatsu.parsers.model.*
|
||||
import org.koitharu.kotatsu.parsers.network.UserAgents
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
import org.koitharu.kotatsu.parsers.util.json.*
|
||||
import java.util.EnumSet
|
||||
import java.util.*
|
||||
|
||||
internal abstract class MangAdventureParser(
|
||||
context: MangaLoaderContext,
|
||||
source: MangaSource,
|
||||
domain: String,
|
||||
pageSize: Int = 25
|
||||
pageSize: Int = 25,
|
||||
) : PagedMangaParser(context, source, pageSize) {
|
||||
override val configKeyDomain = ConfigKey.Domain(domain)
|
||||
|
||||
@@ -28,7 +28,7 @@ internal abstract class MangAdventureParser(
|
||||
MangaState.ONGOING,
|
||||
MangaState.FINISHED,
|
||||
MangaState.ABANDONED,
|
||||
MangaState.PAUSED
|
||||
MangaState.PAUSED,
|
||||
)
|
||||
|
||||
override val availableContentRating: Set<ContentRating> =
|
||||
@@ -38,7 +38,7 @@ internal abstract class MangAdventureParser(
|
||||
SortOrder.ALPHABETICAL,
|
||||
SortOrder.ALPHABETICAL_DESC,
|
||||
SortOrder.UPDATED,
|
||||
SortOrder.POPULARITY
|
||||
SortOrder.POPULARITY,
|
||||
)
|
||||
|
||||
override val defaultSortOrder = SortOrder.ALPHABETICAL
|
||||
@@ -53,6 +53,7 @@ internal abstract class MangAdventureParser(
|
||||
is MangaListFilter.Search -> {
|
||||
url.addQueryParameter("title", filter.query)
|
||||
}
|
||||
|
||||
is MangaListFilter.Advanced -> {
|
||||
url.addQueryParameter(
|
||||
"categories",
|
||||
@@ -65,7 +66,7 @@ internal abstract class MangAdventureParser(
|
||||
} else if (filter.tagsExclude.isNotEmpty()) {
|
||||
filter.tagsExclude.joinTo(this, ",") { "-" + it.key }
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
when (filter.states.oneOrThrowIfMany()) {
|
||||
null -> url.addEncodedQueryParameter("status", "any")
|
||||
@@ -83,6 +84,7 @@ internal abstract class MangAdventureParser(
|
||||
else -> throw IllegalArgumentException(ERROR_UNSUPPORTED_SORT_ORDER)
|
||||
}
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
return runCatchingCancellable { getManga(url.get()) }.getOrElse {
|
||||
@@ -121,20 +123,19 @@ internal abstract class MangAdventureParser(
|
||||
"hiatus" -> MangaState.PAUSED
|
||||
else -> null
|
||||
},
|
||||
chapters = chapters?.optJSONArray("results")?.mapJSON {
|
||||
val number = it.getFloat("number")
|
||||
chapters = chapters?.optJSONArray("results")?.toJSONList()?.mapChapters { _, it ->
|
||||
MangaChapter(
|
||||
id = it.getLong("id"),
|
||||
id = generateUid(it.getLong("id")),
|
||||
name = it.getString("full_title"),
|
||||
number = number.toInt(),
|
||||
number = it.getFloatOrDefault("number", 0f),
|
||||
volume = it.getIntOrDefault("volume", 0),
|
||||
url = it.getString("url"),
|
||||
scanlator = it.getJSONArray("groups").joinToString(),
|
||||
uploadDate = it.getString("published").toLong(),
|
||||
branch = null,
|
||||
source = source
|
||||
source = source,
|
||||
)
|
||||
} ?: emptyList()
|
||||
}.orEmpty(),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -144,7 +145,12 @@ internal abstract class MangAdventureParser(
|
||||
.addEncodedPathSegment("pages")
|
||||
.addEncodedQueryParameter("track", "true")
|
||||
return url.get()?.optJSONArray("results")?.mapJSON {
|
||||
MangaPage(it.getLong("id"), it.getString("image"), null, source)
|
||||
MangaPage(
|
||||
id = generateUid(it.getLong("id")),
|
||||
url = it.getString("image"),
|
||||
preview = null,
|
||||
source = source,
|
||||
)
|
||||
} ?: emptyList()
|
||||
}
|
||||
|
||||
@@ -182,7 +188,7 @@ internal abstract class MangAdventureParser(
|
||||
tags = emptySet(),
|
||||
state = null,
|
||||
author = null,
|
||||
source = source
|
||||
source = source,
|
||||
)
|
||||
} ?: emptyList()
|
||||
}
|
||||
@@ -191,10 +197,10 @@ internal abstract class MangAdventureParser(
|
||||
get() = urlBuilder().addEncodedPathSegments("api/v2")
|
||||
|
||||
// /reader/{slug}/
|
||||
private inline val Manga.slug: String
|
||||
private val Manga.slug: String
|
||||
get() = url.substring(8, url.length - 1)
|
||||
|
||||
protected suspend inline fun HttpUrl.Builder.get() =
|
||||
protected suspend fun HttpUrl.Builder.get() =
|
||||
webClient.httpGet(build()).body?.string()?.let(::JSONObject)
|
||||
|
||||
private companion object {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.koitharu.kotatsu.parsers.site.mangadventure.en
|
||||
|
||||
import androidx.collection.ArraySet
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
@@ -12,9 +13,11 @@ internal class AssortedScans(context: MangaLoaderContext) :
|
||||
// tags that don't have any series and make the tests fail
|
||||
private val emptyTags = setOf(
|
||||
"Doujinshi", "Harem", "Hentai", "Mecha",
|
||||
"Shoujo Ai", "Shounen Ai", "Smut", "Yaoi"
|
||||
"Shoujo Ai", "Shounen Ai", "Smut", "Yaoi",
|
||||
)
|
||||
|
||||
override suspend fun getAvailableTags(): Set<MangaTag> =
|
||||
super.getAvailableTags().filterTo(HashSet()) { it.key !in emptyTags }
|
||||
override suspend fun getAvailableTags(): Set<MangaTag> {
|
||||
val tags = super.getAvailableTags()
|
||||
return tags.filterNotTo(ArraySet(tags.size)) { it.key in emptyTags }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ internal open class MangaLibParser(
|
||||
id = generateUid(chapterId),
|
||||
url = url,
|
||||
source = source,
|
||||
number = number.toIntOrNull() ?: 0,
|
||||
number = number.toFloatOrNull() ?: 0f,
|
||||
volume = volume,
|
||||
uploadDate = dateFormat.tryParse(
|
||||
item.getString("chapter_created_at").substringBefore(" "),
|
||||
|
||||
@@ -11,6 +11,7 @@ import org.koitharu.kotatsu.parsers.PagedMangaParser
|
||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||
import org.koitharu.kotatsu.parsers.model.*
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault
|
||||
import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault
|
||||
import org.koitharu.kotatsu.parsers.util.json.getStringOrNull
|
||||
import org.koitharu.kotatsu.parsers.util.json.mapJSON
|
||||
@@ -52,7 +53,7 @@ class HoneyMangaParser(context: MangaLoaderContext) : PagedMangaParser(context,
|
||||
val chapterRequest = webClient.httpPost(chapterApi, body).parseJson()
|
||||
return manga.copy(
|
||||
chapters = chapterRequest.getJSONArray("data").mapJSON { jo ->
|
||||
val number = jo.getIntOrDefault("chapterNum", 0)
|
||||
val number = jo.getFloatOrDefault("chapterNum", 0f)
|
||||
val volume = jo.getIntOrDefault("volume", 0)
|
||||
MangaChapter(
|
||||
id = generateUid(jo.getString("id")),
|
||||
|
||||
@@ -168,7 +168,7 @@ internal class XoxoComics(context: MangaLoaderContext) :
|
||||
}
|
||||
list.addAll(super.getChapters(doc).asReversed())
|
||||
list.reverse()
|
||||
list.mapIndexed { i, x -> x.copy(volume = x.volume, number = i + 1) }
|
||||
list.mapIndexed { i, x -> x.copy(volume = x.volume, number = (i + 1).toFloat()) }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user