Skip to content

Commit

Permalink
Fix chapter number parsing when number is after unwanted tag
Browse files Browse the repository at this point in the history
Fixes #554

Co-authored-by: Naputt1 <[email protected]>
  • Loading branch information
AntsyLich and Naputt1 committed Jun 8, 2024
1 parent 119bcbf commit 6a80305
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,35 @@ object ChapterRecognition {
}

// Get chapter title with lower case
var name = chapterName.lowercase()

// Remove manga title from chapter title.
name = name.replace(mangaTitle.lowercase(), "").trim()

// Remove comma's or hyphens.
name = name.replace(',', '.').replace('-', '.')

// Remove unwanted white spaces.
name = unwantedWhiteSpace.replace(name, "")

// Remove unwanted tags.
name = unwanted.replace(name, "")

// Check base case ch.xx
basic.find(name)?.let { return getChapterNumberFromMatch(it) }

// Take the first number encountered.
number.find(name)?.let { return getChapterNumberFromMatch(it) }
val cleanChapterName = chapterName.lowercase()
// Remove manga title from chapter title.
.replace(mangaTitle.lowercase(), "").trim()
// Remove comma's or hyphens.
.replace(',', '.')
.replace('-', '.')
// Remove unwanted white spaces.
.replace(unwantedWhiteSpace, "")

val numberMatch = number.findAll(cleanChapterName)

when {
numberMatch.none() -> {
return chapterNumber ?: -1.0
}
numberMatch.count() > 1 -> {
// Remove unwanted tags.
unwanted.replace(cleanChapterName, "").let { name ->
// Check base case ch.xx
basic.find(name)?.let { return getChapterNumberFromMatch(it) }

// need to find again first number might already removed
number.find(name)?.let { return getChapterNumberFromMatch(it) }
}
}
}

return chapterNumber ?: -1.0
// return the first number encountered
return getChapterNumberFromMatch(numberMatch.first())
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,17 @@ class ChapterRecognitionTest {
assertChapter(mangaTitle, "Tokyo ESP 027: Part 002: Chapter 001", 027.0)
}

/**
* Case where the chapter title contains the unwanted tag
* But follow by chapter number.
*/
@Test
fun `Number after unwanted tag`() {
val mangaTitle = "One-punch Man"

assertChapter(mangaTitle, "Mag Version 195.5", 195.5)
}

@Test
fun `Unparseable chapter`() {
val mangaTitle = "random"
Expand Down

0 comments on commit 6a80305

Please sign in to comment.