From ded7cdb71e059f885c14a50a9248c8287b77f3f4 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Wed, 9 Aug 2023 19:15:04 +0530 Subject: [PATCH] Obtain file creation time --- .../kotlin/org/koitharu/kotatsu/core/util/ext/File.kt | 9 +++++++++ .../kotatsu/local/data/input/LocalMangaDirInput.kt | 3 ++- .../koitharu/kotatsu/local/domain/model/LocalManga.kt | 10 ++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/File.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/File.kt index 54505f1ba..92741f1d5 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/File.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/util/ext/File.kt @@ -16,8 +16,10 @@ import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.fs.FileSequence import java.io.File import java.io.FileFilter +import java.nio.file.attribute.BasicFileAttributes import java.util.zip.ZipEntry import java.util.zip.ZipFile +import kotlin.io.path.readAttributes fun File.subdir(name: String) = File(this, name).also { if (!it.exists()) it.mkdirs() @@ -99,3 +101,10 @@ private suspend fun SequenceScope.listFilesRecursiveImpl(root: File, filte fun File.children() = FileSequence(this) fun Sequence.filterWith(filter: FileFilter): Sequence = filter { f -> filter.accept(f) } + +val File.creationTime + get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + toPath().readAttributes().creationTime().toMillis() + } else { + lastModified() + } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt index bdfe8adf7..55dfa6919 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/data/input/LocalMangaDirInput.kt @@ -5,6 +5,7 @@ import androidx.core.net.toUri import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.runInterruptible import org.koitharu.kotatsu.core.util.AlphanumComparator +import org.koitharu.kotatsu.core.util.ext.creationTime import org.koitharu.kotatsu.core.util.ext.listFilesRecursive import org.koitharu.kotatsu.core.util.ext.longHashCode import org.koitharu.kotatsu.core.util.ext.toListSorted @@ -62,7 +63,7 @@ class LocalMangaDirInput(root: File) : LocalMangaInput(root) { name = f.nameWithoutExtension.toHumanReadable(), number = i + 1, source = MangaSource.LOCAL, - uploadDate = f.lastModified(), + uploadDate = f.creationTime, url = f.toUri().toString(), scanlator = null, branch = null, diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/model/LocalManga.kt b/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/model/LocalManga.kt index 247d395d4..cfadd3c33 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/model/LocalManga.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/local/domain/model/LocalManga.kt @@ -2,6 +2,7 @@ package org.koitharu.kotatsu.local.domain.model import androidx.core.net.toFile import androidx.core.net.toUri +import org.koitharu.kotatsu.core.util.ext.creationTime import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaTag import java.io.File @@ -13,14 +14,7 @@ class LocalManga( constructor(manga: Manga) : this(manga.url.toUri().toFile(), manga) - var createdAt: Long = -1L - private set - get() { - if (field == -1L) { - field = file.lastModified() - } - return field - } + val createdAt by lazy { file.creationTime } fun isMatchesQuery(query: String): Boolean { return manga.title.contains(query, ignoreCase = true) ||