From c89366b0a6efd49a03afa89531bed0b10afa340e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Domeradzki?= Date: Sun, 26 Feb 2023 10:59:48 +0100 Subject: [PATCH] Closes #2827 (#2829) --- ArchiSteamFarm/Program.cs | 21 ++++++++++++++++++- ArchiSteamFarm/SharedInfo.cs | 1 + .../linux/ArchiSteamFarm-Service.sh | 11 ++++------ .../osx/ArchiSteamFarm-Service.sh | 7 ++----- .../variant-specific/docker/ArchiSteamFarm.sh | 11 ++++------ .../generic-netf/ArchiSteamFarm-Service.sh | 11 ++++------ .../generic-netf/ArchiSteamFarm.sh | 11 ++++------ .../generic/ArchiSteamFarm-Service.sh | 11 ++++------ .../generic/ArchiSteamFarm.sh | 11 ++++------ 9 files changed, 47 insertions(+), 48 deletions(-) diff --git a/ArchiSteamFarm/Program.cs b/ArchiSteamFarm/Program.cs index 29707eeff..a940e1dfc 100644 --- a/ArchiSteamFarm/Program.cs +++ b/ArchiSteamFarm/Program.cs @@ -263,7 +263,26 @@ internal static class Program { return false; } - // Parse args + // Parse ASF_ARGS + try { + string[]? asfArgs = Environment.GetEnvironmentVariable(SharedInfo.EnvironmentVariableArguments)?.Split(Array.Empty(), StringSplitOptions.RemoveEmptyEntries); + + if (asfArgs?.Length > 0) { + if (!await ParseArgs(asfArgs).ConfigureAwait(false)) { + await Task.Delay(SharedInfo.InformationDelay).ConfigureAwait(false); + + return false; + } + } + } catch (Exception e) { + ASF.ArchiLogger.LogGenericException(e); + + await Task.Delay(SharedInfo.InformationDelay).ConfigureAwait(false); + + return false; + } + + // Parse cmdline args if (args?.Count > 0) { if (!await ParseArgs(args).ConfigureAwait(false)) { await Task.Delay(SharedInfo.InformationDelay).ConfigureAwait(false); diff --git a/ArchiSteamFarm/SharedInfo.cs b/ArchiSteamFarm/SharedInfo.cs index 054ea60a9..a8d23d2d3 100644 --- a/ArchiSteamFarm/SharedInfo.cs +++ b/ArchiSteamFarm/SharedInfo.cs @@ -40,6 +40,7 @@ public static class SharedInfo { internal const string AssemblyName = nameof(ArchiSteamFarm); internal const string DatabaseExtension = ".db"; internal const string DebugDirectory = "debug"; + internal const string EnvironmentVariableArguments = $"{ASF}_ARGS"; internal const string EnvironmentVariableCryptKey = $"{ASF}_CRYPTKEY"; internal const string EnvironmentVariableCryptKeyFile = $"{EnvironmentVariableCryptKey}_FILE"; internal const string EnvironmentVariableNetworkGroup = $"{ASF}_NETWORK_GROUP"; diff --git a/ArchiSteamFarm/overlay/variant-base/linux/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/variant-base/linux/ArchiSteamFarm-Service.sh index ae5c012e3..68b205a5e 100755 --- a/ArchiSteamFarm/overlay/variant-base/linux/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/variant-base/linux/ArchiSteamFarm-Service.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -84,9 +81,9 @@ while :; do # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "$BINARY $BINARY_ARGS" & + $BINARY_PREFIX "$BINARY $*" & else - "$BINARY" $BINARY_ARGS & + "$BINARY" "$@" & fi # This will forward dotnet error code, set -e will abort the script if it's non-zero @@ -95,9 +92,9 @@ while :; do # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "$BINARY $BINARY_ARGS" + $BINARY_PREFIX "$BINARY $*" else - "$BINARY" $BINARY_ARGS + "$BINARY" "$@" fi fi diff --git a/ArchiSteamFarm/overlay/variant-base/osx/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/variant-base/osx/ArchiSteamFarm-Service.sh index 3b5ec2423..411052ce6 100755 --- a/ArchiSteamFarm/overlay/variant-base/osx/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/variant-base/osx/ArchiSteamFarm-Service.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -73,11 +70,11 @@ trap "trap - TERM && kill -- -$$" INT TERM while :; do if [ "$SERVICE" -eq 1 ] || ([ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?true' "$CONFIG_PATH"); then # We're running ASF in headless mode so we don't need STDIN - "$BINARY" $BINARY_ARGS & # Start ASF in the background, trap will work properly due to non-blocking call + "$BINARY" "$@" & # Start ASF in the background, trap will work properly due to non-blocking call wait $! # This will forward dotnet error code, set -e will abort the script if it's non-zero else # We're running ASF in non-headless mode, so we need STDIN to be operative - "$BINARY" $BINARY_ARGS # Start ASF in the foreground, trap sadly won't work until process exit + "$BINARY" "$@" # Start ASF in the foreground, trap sadly won't work until process exit fi sleep 1 diff --git a/ArchiSteamFarm/overlay/variant-specific/docker/ArchiSteamFarm.sh b/ArchiSteamFarm/overlay/variant-specific/docker/ArchiSteamFarm.sh index 9d363c9dd..b70d297f7 100755 --- a/ArchiSteamFarm/overlay/variant-specific/docker/ArchiSteamFarm.sh +++ b/ArchiSteamFarm/overlay/variant-specific/docker/ArchiSteamFarm.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -90,9 +87,9 @@ if [ "$SERVICE" -eq 1 ] || ([ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?tr # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" & + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" & else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS & + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" & fi # This will forward dotnet error code, set -e will abort the script if it's non-zero @@ -101,8 +98,8 @@ else # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" fi fi diff --git a/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm-Service.sh index 3d9a6f2cb..5d06cdb79 100755 --- a/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm-Service.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -91,9 +88,9 @@ while :; do # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $BINARY_ARGS" & + $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $*" & else - mono ${MONO_ARGS-} "$BINARY" $BINARY_ARGS & + mono ${MONO_ARGS-} "$BINARY" "$@" & fi # This will forward mono error code, set -e will abort the script if it's non-zero @@ -102,9 +99,9 @@ while :; do # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $BINARY_ARGS" + $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $*" else - mono ${MONO_ARGS-} "$BINARY" $BINARY_ARGS + mono ${MONO_ARGS-} "$BINARY" "$@" fi fi diff --git a/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm.sh b/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm.sh index 47083dca1..2b7e843df 100755 --- a/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm.sh +++ b/ArchiSteamFarm/overlay/variant-specific/generic-netf/ArchiSteamFarm.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -90,9 +87,9 @@ if [ "$SERVICE" -eq 1 ] || ([ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?tr # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $BINARY_ARGS" & + $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $*" & else - mono ${MONO_ARGS-} "$BINARY" $BINARY_ARGS & + mono ${MONO_ARGS-} "$BINARY" "$@" & fi # This will forward mono error code, set -e will abort the script if it's non-zero @@ -101,8 +98,8 @@ else # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $BINARY_ARGS" + $BINARY_PREFIX "mono ${MONO_ARGS-} $BINARY $*" else - mono ${MONO_ARGS-} "$BINARY" $BINARY_ARGS + mono ${MONO_ARGS-} "$BINARY" "$@" fi fi diff --git a/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm-Service.sh b/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm-Service.sh index 58d23e98f..df93d3701 100755 --- a/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm-Service.sh +++ b/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm-Service.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -91,9 +88,9 @@ while :; do # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" & + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" & else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS & + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" & fi # This will forward dotnet error code, set -e will abort the script if it's non-zero @@ -102,9 +99,9 @@ while :; do # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" fi fi diff --git a/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm.sh b/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm.sh index 9d363c9dd..b70d297f7 100755 --- a/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm.sh +++ b/ArchiSteamFarm/overlay/variant-specific/generic/ArchiSteamFarm.sh @@ -21,13 +21,10 @@ fi cd "$SCRIPT_DIR" -BINARY_ARGS="" PATH_NEXT=0 SERVICE=0 PARSE_ARG() { - BINARY_ARGS="$BINARY_ARGS $1" - case "$1" in --path) PATH_NEXT=1 ;; --path=*) @@ -90,9 +87,9 @@ if [ "$SERVICE" -eq 1 ] || ([ -f "$CONFIG_PATH" ] && grep -Eq '"Headless":\s+?tr # We're running ASF in headless mode so we don't need STDIN # Start ASF in the background, trap will work properly due to non-blocking call if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" & + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" & else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS & + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" & fi # This will forward dotnet error code, set -e will abort the script if it's non-zero @@ -101,8 +98,8 @@ else # We're running ASF in non-headless mode, so we need STDIN to be operative # Start ASF in the foreground, trap won't work until process exit if [ -n "$BINARY_PREFIX" ]; then - $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $BINARY_ARGS" + $BINARY_PREFIX "dotnet ${DOTNET_ARGS-} $BINARY $*" else - dotnet ${DOTNET_ARGS-} "$BINARY" $BINARY_ARGS + dotnet ${DOTNET_ARGS-} "$BINARY" "$@" fi fi