Skip to content

Commit 69e3451

Browse files
committed
feat(AppDataScreen): 优化缓存清理功能
- 将缓存清理逻辑从UI层移至ViewModel,增强代码结构 - 简化点击事件处理,直接调用ViewModel中的清理方法 - 提升用户体验,确保缓存清理后及时反馈
1 parent 51c6d8c commit 69e3451

2 files changed

Lines changed: 15 additions & 23 deletions

File tree

feature/setting/src/commonMain/kotlin/com/mrl/pixiv/setting/appdata/AppDataScreen.kt

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,37 +25,25 @@ import androidx.compose.runtime.LaunchedEffect
2525
import androidx.compose.runtime.getValue
2626
import androidx.compose.runtime.mutableStateOf
2727
import androidx.compose.runtime.remember
28-
import androidx.compose.runtime.rememberCoroutineScope
2928
import androidx.compose.runtime.setValue
3029
import androidx.compose.ui.Modifier
3130
import androidx.compose.ui.unit.dp
32-
import com.mrl.pixiv.common.coroutine.launchCatch
3331
import com.mrl.pixiv.common.router.NavigationManager
3432
import com.mrl.pixiv.common.util.RStrings
35-
import com.mrl.pixiv.common.util.ToastUtil
36-
import com.mrl.pixiv.common.util.adaptiveFileSize1
37-
import com.mrl.pixiv.common.util.calculateSize
38-
import com.mrl.pixiv.common.util.deleteRecursively
3933
import com.mrl.pixiv.common.util.throttleClick
4034
import com.mrl.pixiv.common.viewmodel.asState
4135
import com.mrl.pixiv.strings.app_data
42-
import com.mrl.pixiv.strings.cache_cleared
4336
import com.mrl.pixiv.strings.cancel
4437
import com.mrl.pixiv.strings.clear_cache
4538
import com.mrl.pixiv.strings.confirm
4639
import com.mrl.pixiv.strings.export_data
4740
import com.mrl.pixiv.strings.import_data
4841
import com.mrl.pixiv.strings.novel_history_import_user_mismatch_desc
4942
import com.mrl.pixiv.strings.novel_history_import_user_mismatch_title
50-
import io.github.vinceglb.filekit.FileKit
51-
import io.github.vinceglb.filekit.cacheDir
5243
import io.github.vinceglb.filekit.dialogs.FileKitDialogSettings
5344
import io.github.vinceglb.filekit.dialogs.FileKitType
5445
import io.github.vinceglb.filekit.dialogs.compose.rememberFilePickerLauncher
5546
import io.github.vinceglb.filekit.dialogs.compose.rememberFileSaverLauncher
56-
import io.github.vinceglb.filekit.list
57-
import kotlinx.coroutines.Dispatchers
58-
import kotlinx.coroutines.IO
5947
import kotlinx.datetime.LocalDateTime
6048
import kotlinx.datetime.TimeZone
6149
import kotlinx.datetime.format
@@ -77,7 +65,6 @@ fun AppDataScreen(
7765
navigationManager: NavigationManager = koinInject(),
7866
viewModel: AppDataViewModel = koinViewModel(),
7967
) {
80-
val scope = rememberCoroutineScope()
8168
val state = viewModel.asState()
8269
var dialogData by remember { mutableStateOf<NovelHistoryImportDialogData?>(null) }
8370

@@ -175,16 +162,7 @@ fun AppDataScreen(
175162
headlineContent = {
176163
Text(text = stringResource(RStrings.clear_cache, viewModel.cacheDirSize))
177164
},
178-
modifier = Modifier.throttleClick {
179-
scope.launchCatch(Dispatchers.IO) {
180-
val dirSize = FileKit.cacheDir.calculateSize().adaptiveFileSize1()
181-
FileKit.cacheDir.list().forEach {
182-
it.deleteRecursively()
183-
}
184-
ToastUtil.safeShortToast(RStrings.cache_cleared, dirSize)
185-
viewModel.refreshCacheSize()
186-
}
187-
},
165+
modifier = Modifier.throttleClick { viewModel.clearCache() },
188166
leadingContent = {
189167
Icon(
190168
imageVector = Icons.Rounded.Delete,

feature/setting/src/commonMain/kotlin/com/mrl/pixiv/setting/appdata/AppDataViewModel.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ import com.mrl.pixiv.common.util.ToastUtil
2020
import com.mrl.pixiv.common.util.ZipUtil
2121
import com.mrl.pixiv.common.util.adaptiveFileSize1
2222
import com.mrl.pixiv.common.util.calculateSize
23+
import com.mrl.pixiv.common.util.deleteRecursively
2324
import com.mrl.pixiv.common.viewmodel.BaseMviViewModel
2425
import com.mrl.pixiv.common.viewmodel.SideEffect
2526
import com.mrl.pixiv.common.viewmodel.ViewIntent
27+
import com.mrl.pixiv.strings.cache_cleared
2628
import com.mrl.pixiv.strings.export_failed
2729
import com.mrl.pixiv.strings.export_success
2830
import com.mrl.pixiv.strings.exporting
@@ -34,6 +36,7 @@ import io.github.vinceglb.filekit.PlatformFile
3436
import io.github.vinceglb.filekit.absolutePath
3537
import io.github.vinceglb.filekit.cacheDir
3638
import io.github.vinceglb.filekit.delete
39+
import io.github.vinceglb.filekit.list
3740
import io.github.vinceglb.filekit.writeString
3841
import kotlinx.coroutines.async
3942
import kotlinx.coroutines.flow.MutableSharedFlow
@@ -381,6 +384,17 @@ class AppDataViewModel(
381384
cacheDirSize = FileKit.cacheDir.calculateSize().adaptiveFileSize1()
382385
}
383386
}
387+
388+
fun clearCache() {
389+
launchIO {
390+
val dirSize = FileKit.cacheDir.calculateSize().adaptiveFileSize1()
391+
FileKit.cacheDir.list().forEach {
392+
it.deleteRecursively()
393+
}
394+
ToastUtil.safeShortToast(RStrings.cache_cleared, dirSize)
395+
refreshCacheSize()
396+
}
397+
}
384398
}
385399

386400
private data class NovelHistoryImportResult(

0 commit comments

Comments
 (0)