Merge pull request #4103 from CalebKL/caleb/task/move-free-space-to-IO-thread

Move free space to io thread
This commit is contained in:
Kelson 2024-12-10 17:16:04 +01:00 committed by GitHub
commit 9fc6e66ecc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 38 additions and 44 deletions

View File

@ -208,7 +208,7 @@ class CopyMoveFileHandler @Inject constructor(
}
}
fun handleDetectingFileSystemState() {
suspend fun handleDetectingFileSystemState() {
if (isBookLessThan4GB()) {
performCopyMoveOperationIfSufficientSpaceAvailable()
} else {
@ -217,7 +217,7 @@ class CopyMoveFileHandler @Inject constructor(
}
}
fun handleCannotWrite4GbFileState() {
suspend fun handleCannotWrite4GbFileState() {
if (isBookLessThan4GB()) {
performCopyMoveOperationIfSufficientSpaceAvailable()
} else {
@ -240,8 +240,7 @@ class CopyMoveFileHandler @Inject constructor(
}
}
fun performCopyMoveOperationIfSufficientSpaceAvailable() {
lifecycleScope?.launch {
suspend fun performCopyMoveOperationIfSufficientSpaceAvailable() {
val availableSpace = storageCalculator.availableBytes(File(sharedPreferenceUtil.prefStorage))
if (hasNotSufficientStorageSpace(availableSpace)) {
fileCopyMoveCallback?.insufficientSpaceInStorage(availableSpace)
@ -249,7 +248,6 @@ class CopyMoveFileHandler @Inject constructor(
performCopyMoveOperation()
}
}
}
fun showCopyMoveDialog(showStorageSelectionDialog: Boolean = false) {
alertDialogShower.show(

View File

@ -680,6 +680,7 @@ class LocalLibraryFragment : BaseFragment(), CopyMoveFileHandler.FileCopyMoveCal
private fun storeDeviceInPreferences(
storageDevice: StorageDevice
) {
lifecycleScope.launch {
sharedPreferenceUtil.putPrefStorage(
sharedPreferenceUtil.getPublicDirectoryPath(storageDevice.name)
)
@ -690,4 +691,5 @@ class LocalLibraryFragment : BaseFragment(), CopyMoveFileHandler.FileCopyMoveCal
// after selecting the storage try to copy/move the zim file.
copyMoveFileHandler?.copyMoveZIMFileInSelectedStorage(storageDevice)
}
}
}

View File

@ -128,15 +128,14 @@ class CopyMoveFileHandlerTest {
}
@Test
fun validateZimFileCanCopyOrMoveShouldReturnFalseWhenDetectingFileSystem() =
runTest {
fun validateZimFileCanCopyOrMoveShouldReturnFalseWhenDetectingFileSystem() = runTest {
every { fileHandler.isBookLessThan4GB() } returns true
prepareFileSystemAndFileForMockk(fileSystemState = DetectingFileSystem)
val result = fileHandler.validateZimFileCanCopyOrMove(storageFile)
assertFalse(result)
verify { fileHandler.handleDetectingFileSystemState() }
coVerify { fileHandler.handleDetectingFileSystemState() }
}
@Test
@ -151,23 +150,23 @@ class CopyMoveFileHandlerTest {
val result = fileHandler.validateZimFileCanCopyOrMove(storageFile)
assertFalse(result)
verify { fileHandler.handleCannotWrite4GbFileState() }
coVerify { fileHandler.handleCannotWrite4GbFileState() }
}
@Test
fun handleDetectingFileSystemStateShouldPerformCopyMoveOperationIfBookLessThan4GB() {
fun handleDetectingFileSystemStateShouldPerformCopyMoveOperationIfBookLessThan4GB() = runTest {
fileHandler = spyk(fileHandler)
prepareFileSystemAndFileForMockk()
every { fileHandler.isBookLessThan4GB() } returns true
every { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() } just Runs
coEvery { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() } just Runs
fileHandler.handleDetectingFileSystemState()
verify { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() }
coVerify { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() }
}
@Test
fun handleDetectingFileSystemStateShouldObserveFileSystemStateIfBookGreaterThan4GB() {
fun handleDetectingFileSystemStateShouldObserveFileSystemStateIfBookGreaterThan4GB() = runTest {
fileHandler = spyk(fileHandler)
prepareFileSystemAndFileForMockk(fileSystemState = DetectingFileSystem)
every { fileHandler.isBookLessThan4GB() } returns false
@ -178,19 +177,19 @@ class CopyMoveFileHandlerTest {
}
@Test
fun handleCannotWrite4GbFileStateShouldPerformCopyMoveOperationIfBookLessThan4GB() {
fun handleCannotWrite4GbFileStateShouldPerformCopyMoveOperationIfBookLessThan4GB() = runTest {
fileHandler = spyk(fileHandler)
prepareFileSystemAndFileForMockk()
every { fileHandler.isBookLessThan4GB() } returns true
every { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() } just Runs
coEvery { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() } just Runs
fileHandler.handleCannotWrite4GbFileState()
verify { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() }
coVerify { fileHandler.performCopyMoveOperationIfSufficientSpaceAvailable() }
}
@Test
fun handleCannotWrite4GbFileStateShouldCallCallbackIfBookGreaterThan4GB() {
fun handleCannotWrite4GbFileStateShouldCallCallbackIfBookGreaterThan4GB() = runTest {
fileHandler = spyk(fileHandler)
prepareFileSystemAndFileForMockk()
every { fileHandler.isBookLessThan4GB() } returns false

View File

@ -42,7 +42,7 @@ object Versions {
const val io_objectbox: String = "3.5.0"
const val io_mockk: String = "1.13.7"
const val io_mockk: String = "1.13.13"
const val android_arch_lifecycle_extensions: String = "1.1.1"

View File

@ -19,17 +19,12 @@
package org.kiwix.kiwixmobile.core.extensions
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import java.io.File
suspend fun File.isFileExist(): Boolean = withContext(Dispatchers.IO) { exists() }
fun File.freeSpace(): Long = runBlocking {
withContext(Dispatchers.IO) {
freeSpace
}
}
suspend fun File.freeSpace(): Long = withContext(Dispatchers.IO) { freeSpace }
suspend fun File.totalSpace(): Long = withContext(Dispatchers.IO) { totalSpace }

View File

@ -28,7 +28,7 @@ import javax.inject.Inject
class SetPreferredStorageWithMostSpace @Inject constructor(
private val storageCalculator: StorageCalculator,
private val sharedPreferenceUtil: SharedPreferenceUtil
private val sharedPreferenceUtil: SharedPreferenceUtil,
) : SideEffect<Unit> {
override fun invokeWith(activity: AppCompatActivity) {
activity.lifecycleScope.launch {