mirror of
https://github.com/anten-ka/gotelegram_pro.git
synced 2026-05-19 14:36:05 +00:00
fix: main menu 30s refresh, stats submenu flicker-free via tput
This commit is contained in:
52
install.sh
52
install.sh
@@ -131,7 +131,7 @@ show_main_menu() {
|
||||
echo -e " ${CYAN}5${NC}) О программе ▸"
|
||||
echo -e " ${CYAN}0${NC}) ${DIM}Выход${NC}"
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
echo -e " ${DIM}Обновление через 1 сек${NC}"
|
||||
echo -e " ${DIM}Обновление через 30 сек${NC}"
|
||||
echo -ne " ${WHITE}▸ ${NC}"
|
||||
}
|
||||
|
||||
@@ -946,8 +946,8 @@ main() {
|
||||
while true; do
|
||||
clear
|
||||
show_main_menu
|
||||
# Auto-refresh: 1 sec timeout
|
||||
if read -t 1 -r choice; then
|
||||
# Auto-refresh: 30 sec timeout
|
||||
if read -t 30 -r choice; then
|
||||
case "$choice" in
|
||||
1) submenu_proxy ;;
|
||||
2) submenu_stats ;;
|
||||
@@ -957,32 +957,57 @@ main() {
|
||||
0|q|exit) echo ""; log_info "До встречи! 👋"; exit 0 ;;
|
||||
*) log_error "Неверный выбор" ;;
|
||||
esac
|
||||
|
||||
# Пауза после подменю (кроме статистики — у неё свой цикл)
|
||||
if [ "$choice" != "2" ]; then
|
||||
echo ""
|
||||
echo -ne " ${DIM}Нажмите Enter для возврата в меню...${NC}"
|
||||
read -r
|
||||
fi
|
||||
fi
|
||||
# If read timed out, loop refreshes the dashboard
|
||||
done
|
||||
}
|
||||
|
||||
# ── Статистика (авто-обновление 1 сек) ──────────────────────────────────────
|
||||
# ── Статистика (авто-обновление 1 сек, без мерцания) ───────────────────────
|
||||
submenu_stats() {
|
||||
# Инициализируем статистику при первом входе
|
||||
if type stats_init &>/dev/null; then
|
||||
stats_init 2>/dev/null
|
||||
fi
|
||||
|
||||
local line2; line2=$(printf '─%.0s' {1..54})
|
||||
local first_draw=1
|
||||
|
||||
# Скрываем курсор для плавного обновления
|
||||
tput civis 2>/dev/null
|
||||
|
||||
# Восстанавливаем курсор при выходе из функции
|
||||
trap 'tput cnorm 2>/dev/null; trap - RETURN' RETURN
|
||||
|
||||
while true; do
|
||||
clear
|
||||
echo ""
|
||||
if [ "$first_draw" -eq 1 ]; then
|
||||
clear
|
||||
first_draw=0
|
||||
else
|
||||
# Перемещаем курсор в начало экрана вместо clear — нет мерцания
|
||||
tput cup 0 0 2>/dev/null || printf '\033[H'
|
||||
fi
|
||||
|
||||
# Рисуем весь экран поверх старого содержимого
|
||||
echo -e "\033[J" # очищаем от курсора до конца (убирает хвосты)
|
||||
echo -e " ${BOLD}${WHITE}📊 Статистика трафика${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
|
||||
if type show_traffic_stats &>/dev/null; then
|
||||
show_traffic_stats
|
||||
else
|
||||
echo -e " ${DIM}Модуль статистики не загружен.${NC}"
|
||||
echo -e " ${DIM}Файл lib/stats.sh не найден.${NC}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
local stats_on="вкл"
|
||||
if type toggle_stats &>/dev/null; then
|
||||
local cfg_val
|
||||
@@ -992,27 +1017,34 @@ submenu_stats() {
|
||||
echo -e " ${CYAN}1${NC}) Вкл/Выкл подсчёт (сейчас: ${stats_on})"
|
||||
echo -e " ${CYAN}2${NC}) Установить/обновить сборщик статистики"
|
||||
echo -e " ${CYAN}0${NC}) ${DIM}← Назад${NC}"
|
||||
echo -e " ${DIM}$(printf '─%.0s' {1..54})${NC}"
|
||||
echo -e " ${DIM}Обновление через 1 сек${NC}"
|
||||
echo -e " ${DIM}${line2}${NC}"
|
||||
echo -e " ${DIM}Обновление каждую секунду${NC}"
|
||||
|
||||
# Показываем курсор для ввода, потом снова скрываем
|
||||
tput cnorm 2>/dev/null
|
||||
echo -ne " ${WHITE}▸ ${NC}"
|
||||
|
||||
if read -t 1 -r ch; then
|
||||
tput civis 2>/dev/null
|
||||
case "$ch" in
|
||||
1)
|
||||
if type toggle_stats &>/dev/null; then
|
||||
toggle_stats
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"; read -r
|
||||
first_draw=1 # полная перерисовка после действия
|
||||
fi
|
||||
;;
|
||||
2)
|
||||
if type install_stats_collector &>/dev/null; then
|
||||
install_stats_collector
|
||||
echo -ne " ${DIM}Нажмите Enter...${NC}"; read -r
|
||||
first_draw=1
|
||||
fi
|
||||
;;
|
||||
0|"") return ;;
|
||||
esac
|
||||
fi
|
||||
tput civis 2>/dev/null
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user