From 57f519e80688785a00cb817e504925393a17683b Mon Sep 17 00:00:00 2001 From: Lanius Trolling Date: Sun, 14 Apr 2024 06:24:27 -0400 Subject: [PATCH] Add file creation time to file stat data --- .../kotlin/info/mechyrdia/data/DataFiles.kt | 17 ++++++++++++++--- .../kotlin/info/mechyrdia/data/ViewsFiles.kt | 6 +++++- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/jvmMain/kotlin/info/mechyrdia/data/DataFiles.kt b/src/jvmMain/kotlin/info/mechyrdia/data/DataFiles.kt index 7e4c5e0..b1127d9 100644 --- a/src/jvmMain/kotlin/info/mechyrdia/data/DataFiles.kt +++ b/src/jvmMain/kotlin/info/mechyrdia/data/DataFiles.kt @@ -23,6 +23,10 @@ import java.io.ByteArrayOutputStream import java.io.File import java.nio.ByteBuffer import java.nio.file.FileAlreadyExistsException +import java.nio.file.Files +import java.nio.file.LinkOption +import java.nio.file.attribute.BasicFileAttributeView +import java.nio.file.attribute.BasicFileAttributes import java.time.Instant import kotlin.String import kotlin.time.Duration.Companion.hours @@ -82,6 +86,7 @@ enum class StoredFileType { } data class StoredFileStats( + val created: Instant, val updated: Instant, val size: Long, ) @@ -209,8 +214,14 @@ private class FlatFileStorage(val root: File) : FileStorage { override suspend fun statFile(path: StoragePath): StoredFileStats? { val file = resolveFile(path) if (!file.isFile) return null - - return StoredFileStats(Instant.ofEpochMilli(file.lastModified()), file.length()) + return withContext(Dispatchers.IO) { + val basicAttributes = Files.readAttributes(file.toPath(), BasicFileAttributes::class.java) + StoredFileStats( + basicAttributes.creationTime().toInstant(), + basicAttributes.lastModifiedTime().toInstant(), + basicAttributes.size() + ) + } } override suspend fun writeFile(path: StoragePath, content: ByteArray): Boolean { @@ -385,7 +396,7 @@ private class GridFsStorage(val table: DocumentTable, val bucket: G if (path.isRoot) return null val file = getExact(path) ?: return null val gridFsFile = bucket.find(Filters.eq(MONGODB_ID_KEY, file.file)).awaitFirst() - return StoredFileStats(file.updated, gridFsFile.length) + return StoredFileStats(file.created, file.updated, gridFsFile.length) } override suspend fun writeFile(path: StoragePath, content: ByteArray): Boolean { diff --git a/src/jvmMain/kotlin/info/mechyrdia/data/ViewsFiles.kt b/src/jvmMain/kotlin/info/mechyrdia/data/ViewsFiles.kt index 6f52079..6d2b541 100644 --- a/src/jvmMain/kotlin/info/mechyrdia/data/ViewsFiles.kt +++ b/src/jvmMain/kotlin/info/mechyrdia/data/ViewsFiles.kt @@ -139,7 +139,11 @@ suspend fun ApplicationCall.adminViewVfs(path: StoragePath): HTML.() -> Unit { } } tr { - th { +"Last updated" } + th { +"Created at" } + td { dateTime(tree.stats.created) } + } + tr { + th { +"Last updated at" } td { dateTime(tree.stats.updated) } } tr { -- 2.25.1