diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt index 9d591be76..51a2b6046 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Book.kt @@ -2,6 +2,7 @@ package org.gotson.komga.domain.model import com.fasterxml.jackson.annotation.JsonManagedReference import java.net.URL +import java.time.LocalDateTime import javax.persistence.Entity import javax.persistence.FetchType import javax.persistence.GeneratedValue @@ -16,6 +17,7 @@ data class Book( val name: String, val url: URL, + val updated: LocalDateTime, @ManyToOne(fetch = FetchType.EAGER) @JsonManagedReference diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt index c0c3b622b..a4ecd5633 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/Serie.kt @@ -2,6 +2,7 @@ package org.gotson.komga.domain.model import com.fasterxml.jackson.annotation.JsonBackReference import java.net.URL +import java.time.LocalDateTime import javax.persistence.CascadeType import javax.persistence.Entity import javax.persistence.FetchType @@ -17,6 +18,7 @@ data class Serie( val name: String, val url: URL, + val updated: LocalDateTime, @OneToMany(cascade = [CascadeType.ALL], fetch = FetchType.EAGER, mappedBy = "serie") @JsonBackReference diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt index af1c0309a..6a22435f5 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/service/FileSystemScanner.kt @@ -7,6 +7,10 @@ import org.gotson.komga.domain.model.Serie import org.springframework.stereotype.Service import java.nio.file.Files import java.nio.file.Path +import java.nio.file.attribute.BasicFileAttributes +import java.nio.file.attribute.FileTime +import java.time.LocalDateTime +import java.time.ZoneId import kotlin.streams.asSequence import kotlin.streams.toList @@ -31,17 +35,27 @@ class FileSystemScanner( .map { Book( name = FilenameUtils.getBaseName(it.fileName.toString()), - url = it.toUri().toURL() + url = it.toUri().toURL(), + updated = it.getUpdatedTime() ) }.toList() if (books.isNullOrEmpty()) return@mapNotNull null Serie( name = dir.fileName.toString(), url = dir.toUri().toURL(), + updated = dir.getUpdatedTime(), books = books ).also { serie -> serie.books.forEach { it.serie = serie } } }.toList() } -} \ No newline at end of file +} + +fun Path.getUpdatedTime() = + Files.readAttributes(this, BasicFileAttributes::class.java).let { + maxOf(it.creationTime(), it.lastModifiedTime()).toLocalDateTime() + } + +fun FileTime.toLocalDateTime() = + LocalDateTime.ofInstant(this.toInstant(), ZoneId.systemDefault()) \ No newline at end of file