diff --git a/app/src/main/java/org/mydomain/myscan/FileUtils.kt b/app/src/main/java/org/mydomain/myscan/FileUtils.kt index 7ba76ae..6e5902f 100644 --- a/app/src/main/java/org/mydomain/myscan/FileUtils.kt +++ b/app/src/main/java/org/mydomain/myscan/FileUtils.kt @@ -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() } +} + diff --git a/app/src/main/java/org/mydomain/myscan/MainActivity.kt b/app/src/main/java/org/mydomain/myscan/MainActivity.kt index 446cb9f..a13dbce 100644 --- a/app/src/main/java/org/mydomain/myscan/MainActivity.kt +++ b/app/src/main/java/org/mydomain/myscan/MainActivity.kt @@ -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 { diff --git a/app/src/test/java/org/mydomain/myscan/FileUtilsTest.kt b/app/src/test/java/org/mydomain/myscan/FileUtilsTest.kt index 8e092cf..809487b 100644 --- a/app/src/test/java/org/mydomain/myscan/FileUtilsTest.kt +++ b/app/src/test/java/org/mydomain/myscan/FileUtilsTest.kt @@ -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() + } }