diff --git a/src/main/kotlin/app/morphe/cli/command/PatchCommand.kt b/src/main/kotlin/app/morphe/cli/command/PatchCommand.kt index fd8e246..56526e8 100644 --- a/src/main/kotlin/app/morphe/cli/command/PatchCommand.kt +++ b/src/main/kotlin/app/morphe/cli/command/PatchCommand.kt @@ -380,8 +380,11 @@ internal object PatchCommand : Callable { selection.filter { it.enabled != null }.associate { val enabledSelection = it.enabled!! - (enabledSelection.selector.name ?: patchesList[enabledSelection.selector.index!!].name!!) to - enabledSelection.options + val resolvedName = enabledSelection.selector.name?.let { userInput -> + patchesList.firstOrNull { it.name.equals(userInput, ignoreCase = true) }?.name ?: userInput + } ?: patchesList[enabledSelection.selector.index!!].name!! + + resolvedName to enabledSelection.options }.let(filteredPatches::setOptions) patcher += filteredPatches @@ -556,10 +559,7 @@ internal object PatchCommand : Callable { this@filterPatchSelection.withIndex().forEach patchLoop@{ (i, patch) -> val patchName = patch.name!! - val isManuallyDisabled = patchName.lowercase() in disabledPatches || i in disabledPatchesByIndex - if (isManuallyDisabled) return@patchLoop logger.info("\"$patchName\" disabled manually") - - // Make sure the patch is compatible with the supplied APK files package name and version. + // Check package compatibility first to avoid duplicate logs for multi-app patches. patch.compatiblePackages?.let { packages -> packages.singleOrNull { (name, _) -> name == packageName }?.let { (_, versions) -> if (versions?.isEmpty() == true) { @@ -587,6 +587,9 @@ internal object PatchCommand : Callable { return@let } ?: logger.fine("\"$patchName\" has no package constraints") + val isManuallyDisabled = patchName.lowercase() in disabledPatches || i in disabledPatchesByIndex + if (isManuallyDisabled) return@patchLoop logger.info("\"$patchName\" disabled manually") + val isEnabled = !exclusive && patch.use val isManuallyEnabled = patchName.lowercase() in enabledPatchesByName || i in enabledPatchesByIndex