From beed0df96891c71d70a7c9a22ee48fb837510499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juraj=20Hrivn=C3=A1k?= Date: Fri, 3 Jan 2025 23:21:08 +0100 Subject: [PATCH] Improve already added & replacing project messages --- .../pakku/api/actions/Addition.kt | 16 ++++++----- .../kotlin/teksturepako/pakku/cli/cmd/Add.kt | 19 +++++++++---- .../teksturepako/pakku/cli/cmd/AddPrj.kt | 19 +++++++++---- .../teksturepako/pakku/cli/cmd/Import.kt | 16 +++++++++-- .../kotlin/teksturepako/pakku/cli/cmd/Sync.kt | 28 +++++++++---------- 5 files changed, 64 insertions(+), 34 deletions(-) diff --git a/src/commonMain/kotlin/teksturepako/pakku/api/actions/Addition.kt b/src/commonMain/kotlin/teksturepako/pakku/api/actions/Addition.kt index 999cca4..894398b 100644 --- a/src/commonMain/kotlin/teksturepako/pakku/api/actions/Addition.kt +++ b/src/commonMain/kotlin/teksturepako/pakku/api/actions/Addition.kt @@ -9,14 +9,14 @@ import teksturepako.pakku.api.projects.Project data class RequestHandlers( val onError: suspend (error: ActionError) -> Unit, val onSuccess: suspend ( - project: Project, isRecommended: Boolean, isReplacing: Boolean, reqHandlers: RequestHandlers + project: Project, isRecommended: Boolean, replacing: Project?, reqHandlers: RequestHandlers ) -> Unit ) suspend fun Project?.createAdditionRequest( onError: suspend (error: ActionError) -> Unit, onSuccess: suspend ( - project: Project, isRecommended: Boolean, isReplacing: Boolean, reqHandlers: RequestHandlers + project: Project, isRecommended: Boolean, replacing: Project?, reqHandlers: RequestHandlers ) -> Unit, lockFile: LockFile, platforms: List, @@ -29,12 +29,14 @@ suspend fun Project?.createAdditionRequest( var isRecommended = true // Handle already added project - val isReplacing = if (lockFile.isProjectAdded(this)) + val replacing = if (lockFile.isProjectAdded(this)) { - onError(AlreadyAdded(this)) - if (lockFile.getProject(this)?.files == this.files) return else true + val existingProject = lockFile.getProject(this) ?: return onError(ProjNotFound()) + + onError(AlreadyAdded(existingProject)) + if (existingProject.files == this.files) return else existingProject } - else false + else null // We do not have to check platform for GitHub only project if (this.slug.keys.size > 1 || this.slug.keys.firstOrNull() != GitHub.serialName) @@ -69,5 +71,5 @@ suspend fun Project?.createAdditionRequest( isRecommended = false } - onSuccess(this, isRecommended, isReplacing, RequestHandlers(onError, onSuccess)) + onSuccess(this, isRecommended, replacing, RequestHandlers(onError, onSuccess)) } diff --git a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Add.kt b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Add.kt index 3b68ec3..2717a23 100644 --- a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Add.kt +++ b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Add.kt @@ -109,13 +109,22 @@ class Add : CliktCommand() handleMissingProject(error, arg) } }, - onSuccess = { project, isRecommended, isReplacing, reqHandlers -> + onSuccess = { project, isRecommended, replacing, reqHandlers -> val projMsg = project.getFullMsg() - val promptMessage = if (!isReplacing) "add" to "added" else "replace" to "replaced" + val promptMessage = if (replacing == null) + { + "Do you want to add $projMsg?" to "$projMsg added" + } + else + { + val replacingMsg = replacing.getFullMsg() + "Do you want to replace $replacingMsg with $projMsg?" to + "$replacingMsg replaced with $projMsg" + } - if (terminal.ynPrompt("Do you want to ${promptMessage.first} $projMsg?", isRecommended)) + if (terminal.ynPrompt(promptMessage.first, isRecommended)) { - if (!isReplacing) lockFile.add(project) else lockFile.update(project) + if (replacing == null) lockFile.add(project) else lockFile.update(project) lockFile.linkProjectToDependents(project) if (!noDepsFlag) @@ -123,7 +132,7 @@ class Add : CliktCommand() project.resolveDependencies(terminal, reqHandlers, lockFile, projectProvider, platforms) } - terminal.pSuccess("$projMsg ${promptMessage.second}") + terminal.pSuccess(promptMessage.second) } }, lockFile, platforms, strict diff --git a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/AddPrj.kt b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/AddPrj.kt index a29bcc1..b4f5efb 100644 --- a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/AddPrj.kt +++ b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/AddPrj.kt @@ -128,13 +128,22 @@ class AddPrj : CliktCommand("prj") handleMissingProject(error) } }, - onSuccess = { project, isRecommended, isReplacing, reqHandlers -> + onSuccess = { project, isRecommended, replacing, reqHandlers -> val projMsg = project.getFullMsg() - val promptMessage = if (!isReplacing) "add" to "added" else "replace" to "replaced" + val promptMessage = if (replacing == null) + { + "Do you want to add $projMsg?" to "$projMsg added" + } + else + { + val replacingMsg = replacing.getFullMsg() + "Do you want to replace $replacingMsg with $projMsg?" to + "$replacingMsg replaced with $projMsg" + } - if (terminal.ynPrompt("Do you want to ${promptMessage.first} $projMsg?", isRecommended)) + if (terminal.ynPrompt(promptMessage.first, isRecommended)) { - if (!isReplacing) lockFile.add(project) else lockFile.update(project) + if (replacing == null) lockFile.add(project) else lockFile.update(project) lockFile.linkProjectToDependents(project) if (!noDepsFlag) @@ -142,7 +151,7 @@ class AddPrj : CliktCommand("prj") project.resolveDependencies(terminal, reqHandlers, lockFile, projectProvider, platforms) } - terminal.pSuccess("$projMsg ${promptMessage.second}") + terminal.pSuccess(promptMessage.second) } }, lockFile, platforms, strict ) diff --git a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Import.kt b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Import.kt index b2309de..0c8ce77 100644 --- a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Import.kt +++ b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Import.kt @@ -61,10 +61,20 @@ class Import : CliktCommand() onError = { error -> if (error !is AlreadyAdded) terminal.pError(error) }, - onSuccess = { project, _, isReplacing, reqHandlers -> - val promptMessage = if (!isReplacing) "add" to "added" else "replace" to "replaced" + onSuccess = { project, _, replacing, reqHandlers -> + val projMsg = project.getFullMsg() + val promptMessage = if (replacing == null) + { + "Do you want to add $projMsg?" to "$projMsg added" + } + else + { + val replacingMsg = replacing.getFullMsg() + "Do you want to replace $replacingMsg with $projMsg?" to + "$replacingMsg replaced with $projMsg" + } - if (!isReplacing) lockFile.add(project) else lockFile.update(project) + if (replacing == null) lockFile.add(project) else lockFile.update(project) lockFile.linkProjectToDependents(project) if (depsFlag) diff --git a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Sync.kt b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Sync.kt index 57896ef..53187d1 100644 --- a/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Sync.kt +++ b/src/commonMain/kotlin/teksturepako/pakku/cli/cmd/Sync.kt @@ -91,25 +91,25 @@ class Sync : CliktCommand() onError = { error -> terminal.pError(error) }, - onSuccess = { project, isRecommended, isReplacing, _ -> + onSuccess = { project, isRecommended, replacing, _ -> val projMsg = project.getFullMsg() - val promptMessage = if (!isReplacing) "add" to "added" else "replace" to "replaced" + val promptMessage = if (replacing == null) + { + "Do you want to add $projMsg?" to "$projMsg added" + } + else + { + val replacingMsg = replacing.getFullMsg() + "Do you want to replace $replacingMsg with $projMsg?" to + "$replacingMsg replaced with $projMsg" + } - if (terminal.ynPrompt("Do you want to ${promptMessage.first} $projMsg?", isRecommended)) + if (terminal.ynPrompt(promptMessage.first, isRecommended)) { - if (!isReplacing) lockFile.add(project) else lockFile.update(project) + if (replacing == null) lockFile.add(project) else lockFile.update(project) lockFile.linkProjectToDependents(project) - terminal.pSuccess("$projMsg ${promptMessage.second}") - - project.getSubpath()?.onSuccess { subpath -> - configFile?.setProjectConfig(projectIn, lockFile) { slug -> - this.subpath = subpath - terminal.pSuccess("'projects.$slug.subpath' set to '$subpath'") - } - }?.onFailure { error -> - terminal.pError(error) - } + terminal.pSuccess(promptMessage.second) } }, lockFile, platforms