From 37a46465ba40fd58e5015c020607842a64ae24b2 Mon Sep 17 00:00:00 2001 From: Romain Le Jeune Date: Fri, 25 Nov 2022 09:47:55 +0000 Subject: [PATCH] GODT-2154: Allow noninteractive mode from launcher. --- Makefile | 5 ++++- cmd/launcher/main.go | 25 ++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 1eb728b9..2c7fac84 100644 --- a/Makefile +++ b/Makefile @@ -293,7 +293,7 @@ gofiles: ./internal/bridge/credits.go cd ./utils/ && ./credits.sh bridge ## Run and debug -.PHONY: run run-qt run-qt-cli run-nogui run-nogui-cli run-debug run-qml-preview clean-vendor clean-frontend-qt clean-frontend-qt-common clean +.PHONY: run run-qt run-qt-cli run-nogui run-cli run-noninteractive run-debug run-qml-preview clean-vendor clean-frontend-qt clean-frontend-qt-common clean LOG?=debug LOG_IMAP?=client # client/server/all, or empty to turn it off @@ -304,6 +304,9 @@ run: run-qt run-cli: run-nogui +run-noninteractive: build-nogui clean-vendor gofiles + PROTONMAIL_ENV=dev ./${LAUNCHER_EXE} ${RUN_FLAGS} -n + run-qt: build-gui ifeq "${TARGET_OS}" "darwin" PROTONMAIL_ENV=dev ${DARWINAPP_CONTENTS}/MacOS/${LAUNCHER_EXE} ${RUN_FLAGS} diff --git a/cmd/launcher/main.go b/cmd/launcher/main.go index 92001806..bf7dfe21 100644 --- a/cmd/launcher/main.go +++ b/cmd/launcher/main.go @@ -47,10 +47,12 @@ const ( exeName = "bridge" guiName = "bridge-gui" - FlagCLI = "--cli" - FlagCLIShort = "-c" - FlagLauncher = "--launcher" - FlagWait = "--wait" + FlagCLI = "cli" + FlagCLIShort = "c" + FlagNonInteractive = "noninteractive" + FlagNonInteractiveShort = "n" + FlagLauncher = "--launcher" + FlagWait = "--wait" ) func main() { //nolint:funlen @@ -160,16 +162,21 @@ func appendLauncherPath(path string, args []string) []string { return args } -// inCLIMode detect if CLI mode is asked. -func inCLIMode(args []string) bool { - return sliceContains(args, FlagCLI) || sliceContains(args, FlagCLIShort) -} - // sliceContains checks if a value is present in a list. func sliceContains[T comparable](list []T, s T) bool { return xslices.Any(list, func(arg T) bool { return arg == s }) } +// inCLIMode detect if CLI mode is asked. +func inCLIMode(args []string) bool { + return hasFlag(args, FlagCLI) || hasFlag(args, FlagCLIShort) || hasFlag(args, FlagNonInteractive) || hasFlag(args, FlagNonInteractiveShort) +} + +// hasFlag checks if a flag is present in a list. +func hasFlag(args []string, flag string) bool { + return xslices.Any(args, func(arg string) bool { return (arg == "-"+flag) || (arg == "--"+flag) }) +} + // findAndStrip check if a value is present in s list and remove all occurrences of the value from this list. func findAndStrip[T comparable](slice []T, v T) (strippedList []T, found bool) { strippedList = xslices.Filter(slice, func(value T) bool {