@@ -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+
355364isRoot () {
356365 [[ $EUID -eq 0 ]]
357366}
@@ -406,6 +415,7 @@ getIP() {
406415promptYesNo () {
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() {
428465promptYesNoDelete () {
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() {
14231493installTorrServer () {
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