mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-17 11:25:34 -04:00
#1664 Add a cache to avoid checking filesystem too often (might be slow) - save result to hidden file
This commit is contained in:
parent
01a6f186b1
commit
adeb6ee2ca
@ -21,27 +21,45 @@ package org.kiwix.kiwixmobile.zim_manager
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import org.kiwix.kiwixmobile.zim_manager.FileSystemCapability.CANNOT_WRITE_4GB
|
import org.kiwix.kiwixmobile.zim_manager.FileSystemCapability.CANNOT_WRITE_4GB
|
||||||
import org.kiwix.kiwixmobile.zim_manager.FileSystemCapability.CAN_WRITE_4GB
|
import org.kiwix.kiwixmobile.zim_manager.FileSystemCapability.CAN_WRITE_4GB
|
||||||
|
import org.kiwix.kiwixmobile.zim_manager.FileSystemCapability.INCONCLUSIVE
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.RandomAccessFile
|
import java.io.RandomAccessFile
|
||||||
|
|
||||||
class FileWritingFileSystemChecker : FileSystemChecker {
|
class FileWritingFileSystemChecker : FileSystemChecker {
|
||||||
override fun checkFilesystemSupports4GbFiles(path: String): FileSystemCapability {
|
override fun checkFilesystemSupports4GbFiles(path: String): FileSystemCapability {
|
||||||
with(File("$path/large_file_test.txt")) {
|
val resultFile = File("$path/.file_writing_result")
|
||||||
|
if (resultFile.exists()) {
|
||||||
|
when (val capability = readCapability(resultFile)) {
|
||||||
|
CAN_WRITE_4GB,
|
||||||
|
CANNOT_WRITE_4GB -> return capability
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return with(File("$path/large_file_test.txt"), {
|
||||||
deleteIfExists()
|
deleteIfExists()
|
||||||
try {
|
try {
|
||||||
RandomAccessFile(this.path, "rw").use {
|
RandomAccessFile(this.path, "rw").use {
|
||||||
it.setLength(Fat32Checker.FOUR_GIGABYTES_IN_BYTES)
|
it.setLength(Fat32Checker.FOUR_GIGABYTES_IN_BYTES)
|
||||||
return@checkFilesystemSupports4GbFiles CAN_WRITE_4GB
|
CAN_WRITE_4GB.alsoSaveTo(resultFile)
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
Log.d("Fat32Checker", e.message)
|
Log.d("Fat32Checker", e.message)
|
||||||
return@checkFilesystemSupports4GbFiles CANNOT_WRITE_4GB
|
CANNOT_WRITE_4GB.alsoSaveTo(resultFile)
|
||||||
} finally {
|
} finally {
|
||||||
deleteIfExists()
|
deleteIfExists()
|
||||||
}
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun readCapability(resultFile: File) =
|
||||||
|
try {
|
||||||
|
FileSystemCapability.valueOf(resultFile.readText())
|
||||||
|
} catch (illegalArgumentException: IllegalArgumentException) {
|
||||||
|
INCONCLUSIVE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun FileSystemCapability.alsoSaveTo(resultFile: File) =
|
||||||
|
also { resultFile.writeText(name) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun File.deleteIfExists() {
|
private fun File.deleteIfExists() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user