Skip to content

Commit 59fc9d1

Browse files
authored
refactor: prompts in installation script (#625)
- enhance user interaction by highlighting recommended responses in color for better visibility - update functions to support localized Yes/No responses in both English and Russian. - improved configuration prompts to reflect default values more intuitively Signed-off-by: Pavel Pikta <devops@pavelpikta.com>
1 parent b5f7565 commit 59fc9d1

File tree

1 file changed

+120
-50
lines changed

1 file changed

+120
-50
lines changed

installTorrServerLinux.sh

Lines changed: 120 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -110,20 +110,20 @@ declare -A MSG_EN=(
110110
[use_auth]="Use user \"%s\" with password \"%s\" for authentication"
111111

112112
# Prompts
113-
[want_update]="Want to update TorrServer? (Yes/No) "
114-
[want_install]="Want to install or configure TorrServer? (Yes|No) Type Delete to uninstall. "
115-
[want_reconfigure]="Do you want to reconfigure TorrServer settings? (Yes/No) "
116-
[change_port]="Change TorrServer web-port? (Yes/No) "
113+
[want_update]="Want to update TorrServer?"
114+
[want_install]="Want to install or configure TorrServer? Type Delete to uninstall."
115+
[want_reconfigure]="Do you want to reconfigure TorrServer settings?"
116+
[change_port]="Change TorrServer web-port?"
117117
[enter_port]="Enter port number: "
118-
[enable_auth]="Enable server authorization? (Yes/No) "
118+
[enable_auth]="Enable server authorization?"
119119
[prompt_user]="User: "
120120
[prompt_password]="Password: "
121-
[change_auth_credentials]="Change authentication username and password? (Yes/No) "
122-
[enable_rdb]="Start TorrServer in public read-only mode? (Yes/No) "
123-
[enable_log]="Enable TorrServer log output to file? (Yes/No) "
124-
[enable_bbr]="Enable BBR (recommended for better download speed)? (Yes/No) "
125-
[confirm_delete]="Are you sure you want to delete TorrServer? (Yes/No) "
126-
[prompt_run_as_root]="Run service as root user? (Yes/No) "
121+
[change_auth_credentials]="Change authentication username and password?"
122+
[enable_rdb]="Start TorrServer in public read-only mode?"
123+
[enable_log]="Enable TorrServer log output to file?"
124+
[enable_bbr]="Enable BBR (recommended for better download speed)?"
125+
[confirm_delete]="Are you sure you want to delete TorrServer?"
126+
[prompt_run_as_root]="Run service as root user?"
127127

128128
# Uninstall
129129
[install_dir_label]="TorrServer install dir -"
@@ -237,20 +237,20 @@ declare -A MSG_RU=(
237237
[use_auth]="Для авторизации используйте пользователя «%s» с паролем «%s»"
238238

239239
# Prompts
240-
[want_update]="Хотите обновить TorrServer? (Yes/No) "
241-
[want_install]="Хотите установить, обновить или настроить TorrServer? (Yes|No) Для удаления введите «Delete» "
242-
[want_reconfigure]="Хотите перенастроить параметры TorrServer? (Yes/No) "
243-
[change_port]="Хотите изменить порт для TorrServer? (Yes/No) "
240+
[want_update]="Хотите обновить TorrServer?"
241+
[want_install]="Хотите установить, обновить или настроить TorrServer? Для удаления введите «Delete»"
242+
[want_reconfigure]="Хотите перенастроить параметры TorrServer?"
243+
[change_port]="Хотите изменить порт для TorrServer?"
244244
[enter_port]="Введите номер порта: "
245-
[enable_auth]="Включить авторизацию на сервере? (Yes/No) "
245+
[enable_auth]="Включить авторизацию на сервере?"
246246
[prompt_user]="Пользователь: "
247247
[prompt_password]="Пароль: "
248-
[change_auth_credentials]="Изменить имя пользователя и пароль для авторизации? (Yes/No) "
249-
[enable_rdb]="Запускать TorrServer в публичном режиме без возможности изменения настроек через веб сервера? (Yes/No) "
250-
[enable_log]="Включить запись журнала работы TorrServer в файл? (Yes/No) "
251-
[enable_bbr]="Включить BBR (рекомендуется для лучшей скорости загрузки)? (Yes/No) "
252-
[confirm_delete]="Вы уверены что хотите удалить программу? (Yes/No) "
253-
[prompt_run_as_root]="Запускать службу от пользователя root? (Yes/No) "
248+
[change_auth_credentials]="Изменить имя пользователя и пароль для авторизации?"
249+
[enable_rdb]="Запускать TorrServer в публичном режиме без возможности изменения настроек через веб сервера?"
250+
[enable_log]="Включить запись журнала работы TorrServer в файл?"
251+
[enable_bbr]="Включить BBR (рекомендуется для лучшей скорости загрузки)?"
252+
[confirm_delete]="Вы уверены что хотите удалить программу?"
253+
[prompt_run_as_root]="Запускать службу от пользователя root?"
254254

255255
# Uninstall
256256
[install_dir_label]="Директория c TorrServer -"
@@ -352,6 +352,15 @@ colorize() {
352352
fi
353353
}
354354

355+
# Highlight first letter of a word with specified color
356+
highlightFirstLetter() {
357+
local color="$1"
358+
local word="$2"
359+
local first_char="${word:0:1}"
360+
local rest="${word:1}"
361+
printf "%s%s" "$(colorize "$color" "$first_char")" "$rest"
362+
}
363+
355364
isRoot() {
356365
[[ $EUID -eq 0 ]]
357366
}
@@ -406,6 +415,7 @@ getIP() {
406415
promptYesNo() {
407416
local prompt="$1"
408417
local default="${2:-n}"
418+
local recommended="${3:-$default}"
409419

410420
if [[ $SILENT_MODE -eq 1 ]]; then
411421
if [[ "$default" == "y" ]]; then
@@ -415,9 +425,36 @@ promptYesNo() {
415425
fi
416426
fi
417427

428+
# Determine colors based on recommendation
429+
local yes_color no_color
430+
if [[ "$recommended" == "y" ]]; then
431+
yes_color="green"
432+
no_color="red"
433+
else
434+
yes_color="red"
435+
no_color="green"
436+
fi
437+
438+
# Define localized Yes/No words
439+
local yes_word no_word
440+
if [[ $lang == "ru" ]]; then
441+
yes_word="Да"
442+
no_word="Нет"
443+
else
444+
yes_word="Yes"
445+
no_word="No"
446+
fi
447+
448+
# Highlight first letter of each word
449+
local yes_text
450+
local no_text
451+
yes_text="$(highlightFirstLetter "$yes_color" "$yes_word")"
452+
no_text="$(highlightFirstLetter "$no_color" "$no_word")"
453+
418454
local answer
419-
IFS= read -r -p " $prompt " answer </dev/tty
455+
IFS= read -r -p " $prompt ($yes_text/$no_text) " answer </dev/tty
420456

457+
# Support both English (Yy) and Russian (Дд) for Yes
421458
if [[ "$answer" =~ ^[YyДд] ]]; then
422459
return 0
423460
else
@@ -428,6 +465,7 @@ promptYesNo() {
428465
promptYesNoDelete() {
429466
local prompt="$1"
430467
local default="${2:-n}"
468+
local recommended="${3:-$default}"
431469

432470
if [[ $SILENT_MODE -eq 1 ]]; then
433471
if [[ "$default" == "y" ]]; then
@@ -438,8 +476,34 @@ promptYesNoDelete() {
438476
return
439477
fi
440478

479+
# Determine colors based on recommended answer
480+
local yes_color no_color
481+
if [[ "$recommended" == "y" ]]; then
482+
yes_color="green"
483+
no_color="red"
484+
else
485+
yes_color="red"
486+
no_color="green"
487+
fi
488+
489+
# Define localized Yes/No words
490+
local yes_word no_word
491+
if [[ $lang == "ru" ]]; then
492+
yes_word="Да"
493+
no_word="Нет"
494+
else
495+
yes_word="Yes"
496+
no_word="No"
497+
fi
498+
499+
# Highlight first letter of each word
500+
local yes_text
501+
local no_text
502+
yes_text="$(highlightFirstLetter "$yes_color" "$yes_word")"
503+
no_text="$(highlightFirstLetter "$no_color" "$no_word")"
504+
441505
local answer
442-
IFS= read -r -p " $prompt " answer </dev/tty
506+
IFS= read -r -p " $prompt ($yes_text/$no_text) " answer </dev/tty
443507
answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]' | xargs)
444508

445509
# Check for Delete (case-insensitive, supports both English and Russian)
@@ -1202,31 +1266,33 @@ configureService() {
12021266
# Port configuration
12031267
if [[ -z "$servicePort" ]]; then
12041268
local inferred_default="$DEFAULT_PORT"
1205-
if promptYesNo "$(msg change_port)" "n"; then
1269+
if promptYesNo "$(msg change_port)" "n" "y"; then
12061270
servicePort=$(promptInput "$(msg enter_port)" "$inferred_default")
12071271
else
12081272
servicePort="$inferred_default"
12091273
fi
12101274
else
12111275
# Port exists, ask if user wants to change it
12121276
if [[ $SILENT_MODE -eq 0 ]]; then
1213-
if promptYesNo "$(msg change_port)" "n"; then
1277+
if promptYesNo "$(msg change_port)" "n" "y"; then
12141278
servicePort=$(promptInput "$(msg enter_port)" "$servicePort")
12151279
fi
12161280
fi
12171281
fi
12181282

12191283
# Auth configuration
12201284
if [[ -z "$isAuth" ]]; then
1221-
if promptYesNo "$(msg enable_auth)" "n"; then
1285+
if promptYesNo "$(msg enable_auth)" "n" "y"; then
12221286
isAuth=1
12231287
else
12241288
isAuth=0
12251289
fi
12261290
else
12271291
# Auth setting exists, ask if user wants to change it
12281292
if [[ $SILENT_MODE -eq 0 ]]; then
1229-
if promptYesNo "$(msg enable_auth)" "$([[ $isAuth -eq 1 ]] && echo 'y' || echo 'n')"; then
1293+
local current_auth_default
1294+
current_auth_default="$([[ $isAuth -eq 1 ]] && echo 'y' || echo 'n')"
1295+
if promptYesNo "$(msg enable_auth)" "$current_auth_default" "y"; then
12301296
isAuth=1
12311297
else
12321298
isAuth=0
@@ -1249,7 +1315,7 @@ configureService() {
12491315
if [[ $SILENT_MODE -eq 0 ]]; then
12501316
printf ' - %s\n' "$(msg use_existing_auth "${dirInstall}/accs.db" "$auth")"
12511317
# Ask if user wants to change credentials
1252-
if promptYesNo "$(msg change_auth_credentials)" "n"; then
1318+
if promptYesNo "$(msg change_auth_credentials)" "n" "n"; then
12531319
isAuthUser=$(promptInput "$(msg prompt_user)" "admin")
12541320
isAuthPass=$(promptInput "$(msg prompt_password)" "admin")
12551321
if [[ $SILENT_MODE -eq 0 ]]; then
@@ -1263,15 +1329,17 @@ configureService() {
12631329

12641330
# Read-only database configuration
12651331
if [[ -z "$isRdb" ]]; then
1266-
if promptYesNo "$(msg enable_rdb)" "n"; then
1332+
if promptYesNo "$(msg enable_rdb)" "n" "n"; then
12671333
isRdb=1
12681334
else
12691335
isRdb=0
12701336
fi
12711337
else
12721338
# RDB setting exists, ask if user wants to change it
12731339
if [[ $SILENT_MODE -eq 0 ]]; then
1274-
if promptYesNo "$(msg enable_rdb)" "$([[ $isRdb -eq 1 ]] && echo 'y' || echo 'n')"; then
1340+
local current_rdb_default
1341+
current_rdb_default="$([[ $isRdb -eq 1 ]] && echo 'y' || echo 'n')"
1342+
if promptYesNo "$(msg enable_rdb)" "$current_rdb_default" "n"; then
12751343
isRdb=1
12761344
else
12771345
isRdb=0
@@ -1286,15 +1354,17 @@ configureService() {
12861354

12871355
# Logging configuration
12881356
if [[ -z "$isLog" ]]; then
1289-
if promptYesNo "$(msg enable_log)" "n"; then
1357+
if promptYesNo "$(msg enable_log)" "n" "y"; then
12901358
isLog=1
12911359
else
12921360
isLog=0
12931361
fi
12941362
else
12951363
# Log setting exists, ask if user wants to change it
12961364
if [[ $SILENT_MODE -eq 0 ]]; then
1297-
if promptYesNo "$(msg enable_log)" "$([[ $isLog -eq 1 ]] && echo 'y' || echo 'n')"; then
1365+
local current_log_default
1366+
current_log_default="$([[ $isLog -eq 1 ]] && echo 'y' || echo 'n')"
1367+
if promptYesNo "$(msg enable_log)" "$current_log_default" "y"; then
12981368
isLog=1
12991369
else
13001370
isLog=0
@@ -1308,7 +1378,7 @@ configureService() {
13081378

13091379
# BBR configuration
13101380
if [[ -z "$isBbr" ]] && ! isBBRConfiguredInFile; then
1311-
if promptYesNo "$(msg enable_bbr)" "n"; then
1381+
if promptYesNo "$(msg enable_bbr)" "n" "y"; then
13121382
isBbr=1
13131383
else
13141384
isBbr=0
@@ -1423,7 +1493,7 @@ changeServiceUser() {
14231493
installTorrServer() {
14241494
if [[ $SILENT_MODE -eq 0 && $ROOT_PROMPTED -eq 0 ]]; then
14251495
if [[ $USE_ROOT_USER -ne 1 ]]; then
1426-
if promptYesNo "$(msg prompt_run_as_root)" "n"; then
1496+
if promptYesNo "$(msg prompt_run_as_root)" "n" "n"; then
14271497
USE_ROOT_USER=1
14281498
username="root"
14291499
fi
@@ -1448,18 +1518,18 @@ installTorrServer() {
14481518

14491519
# Check if already installed and up to date
14501520
if checkInstalled; then
1451-
if ! checkInstalledVersion; then
1452-
if promptYesNo "$(msg want_update)" "y"; then
1453-
UpdateVersion
1454-
return
1455-
fi
1456-
else
1457-
# Already installed and up to date, allow reconfiguration
1458-
if [[ $SILENT_MODE -eq 0 ]]; then
1459-
echo " - $(msg running_as_user "$username")"
1460-
echo ""
1461-
# Allow user to reconfigure settings
1462-
if promptYesNo "$(msg want_reconfigure)" "n"; then
1521+
if ! checkInstalledVersion; then
1522+
if promptYesNo "$(msg want_update)" "y" "y"; then
1523+
UpdateVersion
1524+
return
1525+
fi
1526+
else
1527+
# Already installed and up to date, allow reconfiguration
1528+
if [[ $SILENT_MODE -eq 0 ]]; then
1529+
echo " - $(msg running_as_user "$username")"
1530+
echo ""
1531+
# Allow user to reconfigure settings
1532+
if promptYesNo "$(msg want_reconfigure)" "n" "n"; then
14631533
# Read existing config first
14641534
if [[ -f "$dirInstall/$serviceName.config" ]]; then
14651535
readExistingConfig
@@ -1685,7 +1755,7 @@ uninstall() {
16851755
echo " $(msg uninstall_warning)"
16861756
echo ""
16871757

1688-
if promptYesNo "$(msg confirm_delete)" "n"; then
1758+
if promptYesNo "$(msg confirm_delete)" "n" "n"; then
16891759
cleanup
16901760
cleanAll
16911761
echo " - $(msg uninstalled)"
@@ -2029,15 +2099,15 @@ main() {
20292099
echo ""
20302100

20312101
local user_choice
2032-
user_choice=$(promptYesNoDelete "$(msg want_install)" "n")
2102+
user_choice=$(promptYesNoDelete "$(msg want_install)" "n" "y")
20332103

20342104
if [[ "$user_choice" == "delete" ]]; then
20352105
initialCheck
20362106
uninstall
20372107
elif [[ "$user_choice" == "yes" ]]; then
20382108
initialCheck
20392109

2040-
if promptYesNo "$(msg prompt_run_as_root)" "n"; then
2110+
if promptYesNo "$(msg prompt_run_as_root)" "n" "n"; then
20412111
USE_ROOT_USER=1
20422112
username="root"
20432113
fi

0 commit comments

Comments
 (0)