From f9e6130fa0d844504e5e8e1e034a39df286132c9 Mon Sep 17 00:00:00 2001 From: Ishan09811 <156402647+Ishan09811@users.noreply.github.com> Date: Mon, 31 Mar 2025 20:05:54 +0530 Subject: [PATCH] Implement async cache deletion --- .../java/net/rpcs3/ui/games/GamesScreen.kt | 22 ++++++++++++------- app/src/main/java/net/rpcs3/utils/FileUtil.kt | 13 +++++++++-- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/net/rpcs3/ui/games/GamesScreen.kt b/app/src/main/java/net/rpcs3/ui/games/GamesScreen.kt index e82db919..c0138ad7 100644 --- a/app/src/main/java/net/rpcs3/ui/games/GamesScreen.kt +++ b/app/src/main/java/net/rpcs3/ui/games/GamesScreen.kt @@ -129,17 +129,23 @@ fun GameItem(game: Game) { leadingIcon = { Icon(Icons.Outlined.Delete, contentDescription = null) }, onClick = { menuExpanded.value = false + val deleteProgress = ProgressRepository.create(context, "Deleting Game") + game.addProgress(GameProgress(deleteProgress, GameProgressType.Compile)) + ProgressRepository.onProgressEvent(deleteProgress, -1, 0L) val path = File(game.info.path) if (path.exists()) { - GameRepository.remove(game) path.deleteRecursively() - if (!FileUtil.deleteCache(context, game.info.path.substringAfterLast("/"))) { - AlertDialogQueue.showDialog( - title = "Unexpected Error", - message = "Failed to delete game cache", - confirmText = "Close", - dismissText = "" - ) + FileUtil.deleteCache(context, game.info.path.substringAfterLast("/")) { success -> + if (!success) { + AlertDialogQueue.showDialog( + title = "Unexpected Error", + message = "Failed to delete game cache", + confirmText = "Close", + dismissText = "" + ) + } + ProgressRepository.onProgressEvent(deleteProgress, 100, 100) + GameRepository.remove(game) } } } diff --git a/app/src/main/java/net/rpcs3/utils/FileUtil.kt b/app/src/main/java/net/rpcs3/utils/FileUtil.kt index 96d4ed42..5426b89a 100644 --- a/app/src/main/java/net/rpcs3/utils/FileUtil.kt +++ b/app/src/main/java/net/rpcs3/utils/FileUtil.kt @@ -21,6 +21,10 @@ import java.io.FileInputStream import java.io.FileOutputStream import java.io.IOException import kotlin.concurrent.thread +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext private data class InstallableFolder( val uri: Uri, val targetPath: String @@ -215,8 +219,13 @@ object FileUtil { return paths.size == 2 && "tree" == paths[0] } - fun deleteCache(ctx: Context, gameId: String): Boolean { - return File(ctx.getExternalFilesDir(null)!!, "cache/cache/$gameId").deleteRecursively() + fun deleteCache(ctx: Context, gameId: String, onComplete: (Boolean) -> Unit) { + CoroutineScope(Dispatchers.IO).launch { + val result = File(ctx.getExternalFilesDir(null)!!, "cache/cache/$gameId").deleteRecursively() + withContext(Dispatchers.Main) { + onComplete(result) + } + } } }