mirror of
https://github.com/gotson/komga.git
synced 2026-05-06 03:27:08 +02:00
fix: scanner should ignore hidden files
This commit is contained in:
parent
52ce9a575a
commit
2d72b47cdf
2 changed files with 23 additions and 0 deletions
|
|
@ -16,6 +16,7 @@ import java.nio.file.attribute.BasicFileAttributes
|
||||||
import java.nio.file.attribute.FileTime
|
import java.nio.file.attribute.FileTime
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.time.ZoneId
|
import java.time.ZoneId
|
||||||
|
import kotlin.io.path.isHidden
|
||||||
import kotlin.streams.asSequence
|
import kotlin.streams.asSequence
|
||||||
import kotlin.time.measureTime
|
import kotlin.time.measureTime
|
||||||
|
|
||||||
|
|
@ -72,6 +73,7 @@ class FileSystemScanner(
|
||||||
val books = Files.list(dir).use { dirStream ->
|
val books = Files.list(dir).use { dirStream ->
|
||||||
dirStream.asSequence()
|
dirStream.asSequence()
|
||||||
.onEach { logger.trace { "GetBooks file: $it" } }
|
.onEach { logger.trace { "GetBooks file: $it" } }
|
||||||
|
.filterNot { Files.isHidden(it) }
|
||||||
.filter { Files.isReadable(it) }
|
.filter { Files.isReadable(it) }
|
||||||
.filter { Files.isRegularFile(it) }
|
.filter { Files.isRegularFile(it) }
|
||||||
.filter { supportedExtensions.contains(FilenameUtils.getExtension(it.fileName.toString()).toLowerCase()) }
|
.filter { supportedExtensions.contains(FilenameUtils.getExtension(it.fileName.toString()).toLowerCase()) }
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,27 @@ class FileSystemScannerTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `given directory structure with hidden files when scanning then hidden files are not returned`() {
|
||||||
|
Jimfs.newFileSystem(Configuration.unix()).use { fs ->
|
||||||
|
// given
|
||||||
|
val root = fs.getPath("/root")
|
||||||
|
Files.createDirectory(root)
|
||||||
|
|
||||||
|
val dir1 = makeSubDir(root, "dir1", listOf("comic.cbz"))
|
||||||
|
makeSubDir(dir1, "subdir1", listOf("comic2.cbz", ".comic2.cbz"))
|
||||||
|
|
||||||
|
// when
|
||||||
|
val scan = scanner.scanRootFolder(root)
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertThat(scan).hasSize(2)
|
||||||
|
|
||||||
|
assertThat(scan.keys.map { it.name }).containsExactlyInAnyOrder("dir1", "subdir1")
|
||||||
|
assertThat(scan.values.flatMap { list -> list.map { it.name } }).containsExactlyInAnyOrder("comic", "comic2")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `given file with mixed-case extension when scanning then files are returned`() {
|
fun `given file with mixed-case extension when scanning then files are returned`() {
|
||||||
Jimfs.newFileSystem(Configuration.unix()).use { fs ->
|
Jimfs.newFileSystem(Configuration.unix()).use { fs ->
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue