Clean up old PDF files at startup

This commit is contained in:
Pierre-Yves Nicolas
2025-07-09 18:13:13 +02:00
parent efef66217a
commit 50a123d155
3 changed files with 36 additions and 4 deletions

View File

@@ -28,3 +28,10 @@ fun getAvailableFilename(desiredFile: File): File {
}
return file
}
fun cleanUpOldFiles(dir: File, thresholdInMillis: Int) {
val now = System.currentTimeMillis()
dir.listFiles { file -> now - file.lastModified() > thresholdInMillis }
?.forEach { file -> file.delete() }
}

View File

@@ -32,6 +32,7 @@ import androidx.core.content.FileProvider
import androidx.core.net.toFile
import androidx.core.net.toUri
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -52,6 +53,9 @@ class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
initLibraries()
lifecycleScope.launch(Dispatchers.IO) {
cleanUpOldFiles(File(cacheDir, "pdfs"), 1000 * 3600)
}
val viewModel: MainViewModel by viewModels { MainViewModel.getFactory(this) }
enableEdgeToEdge()
setContent {

View File

@@ -28,17 +28,38 @@ class FileUtilsTest {
val f1 = File(dir, "f_1.pdf")
val f2 = File(dir, "f_2.pdf")
assertThat(f.exists()).isFalse
assertThat(f1.exists()).isFalse
assertThat(f).doesNotExist()
assertThat(f1).doesNotExist()
assertThat(getAvailableFilename(f)).isEqualTo(f)
f.apply { writeText("dummy") }
assertThat(f.exists()).isTrue
assertThat(f).exists()
assertThat(getAvailableFilename(f)).isEqualTo(f1)
f1.apply { writeText("dummy") }
assertThat(f1.exists()).isTrue
assertThat(f1).exists()
assertThat(getAvailableFilename(f)).isEqualTo(f2)
}
@Test
fun cleanUpOldFiles() {
val dir = createTempDirectory().toFile()
val subDir = File(dir,"subDir")
cleanUpOldFiles(subDir, 10)
assertThat(subDir).doesNotExist()
subDir.mkdirs()
assertThat(subDir).exists()
val file1 = File(subDir, "file1")
file1.createNewFile()
val file2 = File(subDir, "file2")
file2.createNewFile()
val now = System.currentTimeMillis()
file1.setLastModified(now - 10_000)
file2.setLastModified(now - 11_000)
cleanUpOldFiles(subDir, 10_500)
assertThat(file1).exists()
assertThat(file2).doesNotExist()
}
}