mirror of
https://github.com/gotson/komga.git
synced 2025-12-20 23:45:11 +01:00
fix: error importing reading list with non-numerical number
closes #499
This commit is contained in:
parent
fbb4171d9b
commit
3ef02409ba
10 changed files with 35 additions and 35 deletions
|
|
@ -31,5 +31,5 @@ interface ReadListRequestResultBookDto {
|
|||
|
||||
interface ReadListRequestBookDto {
|
||||
series: string,
|
||||
number: number,
|
||||
number: string,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ data class ReadListRequest(
|
|||
|
||||
data class ReadListRequestBook(
|
||||
val series: String,
|
||||
val number: Int,
|
||||
val number: String,
|
||||
)
|
||||
|
||||
data class ReadListRequestResult(
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class ReadListMatcher(
|
|||
val seriesId = seriesMatches.first().id
|
||||
val seriesBooks = bookRepository.findBySeriesId(seriesId)
|
||||
val bookMatches = bookMetadataRepository.findByIds(seriesBooks.map { it.id })
|
||||
.filter { it.number.toIntOrNull()?.equals(book.number) ?: false }
|
||||
.filter { (it.number.trimStart('0') == book.number.trimStart('0')) }
|
||||
.map { it.bookId }
|
||||
when {
|
||||
bookMatches.size > 1 -> unmatchedBooks += ReadListRequestResultBook(book, "ERR_1013")
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ class ReadListProvider(
|
|||
val books = readingList.books.mapNotNull {
|
||||
val series = computeSeriesFromSeriesAndVolume(it.series, it.volume)
|
||||
if (!series.isNullOrBlank() && it.number != null)
|
||||
ReadListRequestBook(series, it.number!!)
|
||||
ReadListRequestBook(series, it.number!!.trim())
|
||||
else {
|
||||
logger.warn { "Book is missing series or number, skipping: $it" }
|
||||
null
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ class Book {
|
|||
var series: String? = null
|
||||
|
||||
@JsonProperty(value = "Number")
|
||||
var number: Int? = null
|
||||
var number: String? = null
|
||||
|
||||
@JsonProperty(value = "Volume")
|
||||
var volume: Int? = null
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import org.gotson.komga.domain.model.ReadListRequestResultBook
|
|||
|
||||
data class ReadListRequestBookDto(
|
||||
val series: String,
|
||||
val number: Int,
|
||||
val number: String,
|
||||
)
|
||||
|
||||
data class ReadListRequestResultDto(
|
||||
|
|
|
|||
|
|
@ -78,17 +78,17 @@ class ReadListMatcherTest(
|
|||
seriesLifecycle.sortBooks(s)
|
||||
|
||||
bookMetadataRepository.findById(booksSeries2[0].id).let {
|
||||
bookMetadataRepository.update(it.copy(number = "025"))
|
||||
bookMetadataRepository.update(it.copy(number = "0025"))
|
||||
}
|
||||
}
|
||||
|
||||
val request = ReadListRequest(
|
||||
name = "readlist",
|
||||
books = listOf(
|
||||
ReadListRequestBook(series = "Batman: White Knight", number = 1),
|
||||
ReadListRequestBook(series = "joker", number = 2),
|
||||
ReadListRequestBook(series = "Batman: White Knight", number = 2),
|
||||
ReadListRequestBook(series = "joker", number = 25),
|
||||
ReadListRequestBook(series = "Batman: White Knight", number = "1"),
|
||||
ReadListRequestBook(series = "joker", number = "02"),
|
||||
ReadListRequestBook(series = "Batman: White Knight", number = "2"),
|
||||
ReadListRequestBook(series = "joker", number = "25"),
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ class ReadListMatcherTest(
|
|||
with(result) {
|
||||
assertThat(readList).isNotNull
|
||||
assertThat(unmatchedBooks).isEmpty()
|
||||
assertThat(errorCode).isBlank()
|
||||
assertThat(errorCode).isBlank
|
||||
with(readList!!) {
|
||||
assertThat(name).isEqualTo(request.name)
|
||||
assertThat(bookIds).hasSize(4)
|
||||
|
|
@ -125,10 +125,10 @@ class ReadListMatcherTest(
|
|||
val request = ReadListRequest(
|
||||
name = "my readlist",
|
||||
books = listOf(
|
||||
ReadListRequestBook(series = "batman: white knight", number = 1),
|
||||
ReadListRequestBook(series = "joker", number = 2),
|
||||
ReadListRequestBook(series = "BATMAN: WHITE KNIGHT", number = 2),
|
||||
ReadListRequestBook(series = "joker", number = 25),
|
||||
ReadListRequestBook(series = "batman: white knight", number = "1"),
|
||||
ReadListRequestBook(series = "joker", number = "2"),
|
||||
ReadListRequestBook(series = "BATMAN: WHITE KNIGHT", number = "2"),
|
||||
ReadListRequestBook(series = "joker", number = "25"),
|
||||
)
|
||||
)
|
||||
|
||||
|
|
@ -176,10 +176,10 @@ class ReadListMatcherTest(
|
|||
val request = ReadListRequest(
|
||||
name = "readlist",
|
||||
books = listOf(
|
||||
ReadListRequestBook(series = "tokyo ghost", number = 1),
|
||||
ReadListRequestBook(series = "batman", number = 3),
|
||||
ReadListRequestBook(series = "joker", number = 3),
|
||||
ReadListRequestBook(series = "batman", number = 2),
|
||||
ReadListRequestBook(series = "tokyo ghost", number = "1"),
|
||||
ReadListRequestBook(series = "batman", number = "3"),
|
||||
ReadListRequestBook(series = "joker", number = "3"),
|
||||
ReadListRequestBook(series = "batman", number = "2"),
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ class ReadListProviderTest {
|
|||
books = listOf(
|
||||
Book().apply {
|
||||
series = "series 1"
|
||||
number = 4
|
||||
number = " 4 "
|
||||
volume = 2005
|
||||
},
|
||||
Book().apply {
|
||||
series = "series 2"
|
||||
number = 1
|
||||
number = "1"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -44,12 +44,12 @@ class ReadListProviderTest {
|
|||
|
||||
with(books[0]) {
|
||||
assertThat(series).isEqualTo("series 1 (2005)")
|
||||
assertThat(number).isEqualTo(4)
|
||||
assertThat(number).isEqualTo("4")
|
||||
}
|
||||
|
||||
with(books[1]) {
|
||||
assertThat(series).isEqualTo("series 2")
|
||||
assertThat(number).isEqualTo(1)
|
||||
assertThat(number).isEqualTo("1")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -62,12 +62,12 @@ class ReadListProviderTest {
|
|||
books = listOf(
|
||||
Book().apply {
|
||||
series = " "
|
||||
number = 4
|
||||
number = "4"
|
||||
volume = 2005
|
||||
},
|
||||
Book().apply {
|
||||
series = null
|
||||
number = 1
|
||||
number = "1"
|
||||
},
|
||||
Book().apply {
|
||||
series = "Series"
|
||||
|
|
@ -110,12 +110,12 @@ class ReadListProviderTest {
|
|||
books = listOf(
|
||||
Book().apply {
|
||||
series = "series 1"
|
||||
number = 4
|
||||
number = "4"
|
||||
volume = 2005
|
||||
},
|
||||
Book().apply {
|
||||
series = "series 2"
|
||||
number = 1
|
||||
number = "1"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
@ -137,12 +137,12 @@ class ReadListProviderTest {
|
|||
books = listOf(
|
||||
Book().apply {
|
||||
series = "series 1"
|
||||
number = 4
|
||||
number = "4"
|
||||
volume = 2005
|
||||
},
|
||||
Book().apply {
|
||||
series = "series 2"
|
||||
number = 1
|
||||
number = "1"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ class ReadingListTest {
|
|||
|
||||
with(books[0]) {
|
||||
assertThat(series).isEqualTo("Civil War")
|
||||
assertThat(number).isEqualTo(1)
|
||||
assertThat(number).isEqualTo("1")
|
||||
assertThat(volume).isEqualTo(2006)
|
||||
assertThat(year).isEqualTo(2006)
|
||||
assertThat(fileName).isEqualTo("Civil War Vol.2006 #01 (July, 2006)")
|
||||
|
|
@ -29,7 +29,7 @@ class ReadingListTest {
|
|||
|
||||
with(books[1]) {
|
||||
assertThat(series).isEqualTo("Wolverine")
|
||||
assertThat(number).isEqualTo(42)
|
||||
assertThat(number).isEqualTo("42")
|
||||
assertThat(volume).isEqualTo(2003)
|
||||
assertThat(year).isEqualTo(2006)
|
||||
assertThat(fileName).isEqualTo("Wolverine Vol.2003 #42 (July, 2006)")
|
||||
|
|
@ -37,7 +37,7 @@ class ReadingListTest {
|
|||
|
||||
with(books[2]) {
|
||||
assertThat(series).isEqualTo("X-Factor")
|
||||
assertThat(number).isEqualTo(8)
|
||||
assertThat(number).isEqualTo("HS")
|
||||
assertThat(volume).isEqualTo(2006)
|
||||
assertThat(year).isEqualTo(2006)
|
||||
assertThat(fileName).isEqualTo("X-Factor Vol.2006 #08 (August, 2006)")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0"?>
|
||||
<ReadingList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<ReadingList>
|
||||
<Name>Civil War</Name>
|
||||
<Books>
|
||||
<Book Series="Civil War" Number="1" Volume="2006" Year="2006">
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
<Id>29a69cbf-af64-471d-889c-8fc0f0080f7c</Id>
|
||||
<FileName>Wolverine Vol.2003 #42 (July, 2006)</FileName>
|
||||
</Book>
|
||||
<Book Series="X-Factor" Number="8" Volume="2006" Year="2006">
|
||||
<Book Series="X-Factor" Number="HS" Volume="2006" Year="2006">
|
||||
<Id>ec70e585-5a80-428c-a67e-fd22b668449b</Id>
|
||||
<FileName>X-Factor Vol.2006 #08 (August, 2006)</FileName>
|
||||
</Book>
|
||||
|
|
|
|||
Loading…
Reference in a new issue