MappingsScreen.kt (2857B) - raw
1 package me.rhunk.snapenhance.ui.setup.screens.impl 2 3 import androidx.compose.foundation.layout.padding 4 import androidx.compose.foundation.layout.size 5 import androidx.compose.material3.CircularProgressIndicator 6 import androidx.compose.material3.MaterialTheme 7 import androidx.compose.runtime.* 8 import androidx.compose.ui.Modifier 9 import androidx.compose.ui.unit.dp 10 import androidx.compose.ui.window.Dialog 11 import kotlinx.coroutines.Dispatchers 12 import kotlinx.coroutines.launch 13 import kotlinx.coroutines.withContext 14 import me.rhunk.snapenhance.ui.setup.screens.SetupScreen 15 import me.rhunk.snapenhance.ui.util.AlertDialogs 16 17 class MappingsScreen : SetupScreen() { 18 @Composable 19 override fun Content() { 20 val coroutineScope = rememberCoroutineScope() 21 var infoText by remember { mutableStateOf(null as String?) } 22 var isGenerating by remember { mutableStateOf(false) } 23 24 if (infoText != null) { 25 fun dismiss() { 26 infoText = null 27 goNext() 28 } 29 30 Dialog(onDismissRequest = { dismiss() }) { 31 remember { AlertDialogs(context.translation) }.InfoDialog(title = infoText!!) { 32 dismiss() 33 } 34 } 35 } 36 37 LaunchedEffect(Unit) { 38 coroutineScope.launch(Dispatchers.IO) { 39 if (isGenerating) return@launch 40 isGenerating = true 41 runCatching { 42 if (context.installationSummary.snapchatInfo == null) { 43 throw Exception(context.translation["setup.mappings.generate_failure_no_snapchat"]) 44 } 45 val warnings = context.mappings.refresh() 46 47 if (warnings.isNotEmpty()) { 48 isGenerating = false 49 infoText = "${warnings.size} warning(s) occurred while generating mappings:\n\n${warnings.joinToString("\n")}".also { 50 context.log.warn(it) 51 } 52 return@launch 53 } 54 55 withContext(Dispatchers.Main) { 56 goNext() 57 } 58 }.onFailure { 59 isGenerating = false 60 infoText = context.translation["setup.mappings.generate_failure"] + "\n\n" + it.message 61 context.log.error("Failed to generate mappings", it) 62 } 63 } 64 } 65 66 if (isGenerating) { 67 DialogText(text = context.translation["setup.mappings.dialog"]) 68 CircularProgressIndicator( 69 modifier = Modifier 70 .padding() 71 .size(50.dp), 72 strokeWidth = 3.dp, 73 color = MaterialTheme.colorScheme.onPrimary 74 ) 75 } 76 } 77 }