Anchira: Improve chapter suffix parsing (#1904)

* Improve chapter suffix parsing

* Don't convert Tags to sequence before sorting
This commit is contained in:
BrutuZ 2024-03-17 15:05:47 -03:00 committed by Draff
parent 0a0ff7c1ac
commit 046c2aa421
3 changed files with 28 additions and 31 deletions

View File

@ -1,7 +1,7 @@
ext { ext {
extName = 'Anchira' extName = 'Anchira'
extClass = '.Anchira' extClass = '.Anchira'
extVersionCode = 10 extVersionCode = 11
isNsfw = true isNsfw = true
} }

View File

@ -120,11 +120,6 @@ class Anchira : HttpSource(), ConfigurableSource {
query.substringAfter(SLUG_BUNDLE_PREFIX), query.substringAfter(SLUG_BUNDLE_PREFIX),
filters, filters,
).removeAllQueryParameters("page") ).removeAllQueryParameters("page")
if (
url.build().queryParameter("sort") == "4"
) {
url.removeAllQueryParameters("sort")
}
val manga = SManga.create() val manga = SManga.create()
.apply { this.url = "?${url.build().query}" } .apply { this.url = "?${url.build().query}" }
fetchMangaDetails(manga).map { fetchMangaDetails(manga).map {
@ -280,7 +275,7 @@ class Anchira : HttpSource(), ConfigurableSource {
for (page in 1..pages) { for (page in 1..pages) {
results.entries.forEach { data -> results.entries.forEach { data ->
chapterList.add( chapterList.add(
createChapter(data, response, anchiraData), createChapter(data, anchiraData),
) )
} }
if (page < pages) { if (page < pages) {
@ -298,7 +293,7 @@ class Anchira : HttpSource(), ConfigurableSource {
} else { } else {
val data = json.decodeFromString<Entry>(response.body.string()) val data = json.decodeFromString<Entry>(response.body.string())
chapterList.add( chapterList.add(
createChapter(data, response, anchiraData), createChapter(data, anchiraData),
) )
} }
return chapterList return chapterList
@ -468,7 +463,7 @@ class Anchira : HttpSource(), ConfigurableSource {
companion object { companion object {
const val SLUG_SEARCH_PREFIX = "id:" const val SLUG_SEARCH_PREFIX = "id:"
const val SLUG_BUNDLE_PREFIX = "bundle:" private const val SLUG_BUNDLE_PREFIX = "bundle:"
private const val IMAGE_QUALITY_PREF = "image_quality" private const val IMAGE_QUALITY_PREF = "image_quality"
private const val OPEN_SOURCE_PREF = "use_manga_source" private const val OPEN_SOURCE_PREF = "use_manga_source"
private const val USE_TAG_GROUPING = "use_tag_grouping" private const val USE_TAG_GROUPING = "use_tag_grouping"
@ -477,4 +472,5 @@ class Anchira : HttpSource(), ConfigurableSource {
} }
} }
val CHAPTER_SUFFIX_RE = Regex("(?<!20\\d\\d-)\\b[\\d.]{1,4}$") val CHAPTER_SUFFIX_RE =
Regex("\\W*(?:Ch\\.?|Chapter|Part|Vol\\.?|Volume|#)?\\W?(?<!20\\d{2}-?)\\b[\\d.]{1,4}\\W?")

View File

@ -1,7 +1,6 @@
package eu.kanade.tachiyomi.extension.en.anchira package eu.kanade.tachiyomi.extension.en.anchira
import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SChapter
import okhttp3.Response
import java.util.Locale import java.util.Locale
object AnchiraHelper { object AnchiraHelper {
@ -13,6 +12,7 @@ object AnchiraHelper {
} }
it it
} }
.sortedBy { it.name }
.sortedBy { it.namespace } .sortedBy { it.namespace }
.map { .map {
val tag = it.name.lowercase() val tag = it.name.lowercase()
@ -30,30 +30,31 @@ object AnchiraHelper {
} }
.joinToString(", ") { it } .joinToString(", ") { it }
fun createChapter(entry: Entry, response: Response, anchiraData: List<EntryKey>) = fun createChapter(entry: Entry, anchiraData: List<EntryKey>) =
SChapter.create().apply { SChapter.create().apply {
val ch = val chSuffix = CHAPTER_SUFFIX_RE.find(entry.title)?.value.orEmpty()
CHAPTER_SUFFIX_RE.find(entry.title)?.value?.trim('.') ?: "1" val chNumber =
val source = anchiraData.find { it.id == entry.id }?.url chSuffix.replace(Regex("[^.\\d]"), "").trim('.').takeUnless { it.isEmpty() } ?: "1"
?: response.request.url.toString() val source = Regex("fakku|irodori").find(
anchiraData.find { it.id == entry.id }?.url.orEmpty(),
)?.value.orEmpty().titleCase()
url = "/g/${entry.id}/${entry.key}" url = "/g/${entry.id}/${entry.key}"
name = "$ch. ${entry.title.removeSuffix(" $ch")}" name = "$chNumber. ${entry.title.removeSuffix(chSuffix)}"
date_upload = entry.publishedAt * 1000 date_upload = entry.publishedAt * 1000
chapter_number = ch.toFloat() chapter_number = chNumber.toFloat()
scanlator = buildString { scanlator = buildString {
append( if (source.isNotEmpty()) {
Regex("fakku|irodori|anchira").find(source)?.value.orEmpty() append("$source - ")
.replaceFirstChar { }
append("${entry.pages} pages")
}
}
private fun String.titleCase() = replaceFirstChar {
if (it.isLowerCase()) { if (it.isLowerCase()) {
it.titlecase( it.titlecase(Locale.getDefault())
Locale.getDefault(),
)
} else { } else {
it.toString() it.toString()
} }
},
)
append(" - ${entry.pages} pages")
}
} }
} }