diff --git a/install_kiosk_0.9.1.sh b/install_kiosk_0.9.1.sh index f365321..4d7babd 100644 --- a/install_kiosk_0.9.1.sh +++ b/install_kiosk_0.9.1.sh @@ -1,19 +1,30 @@ #!/bin/bash ################################################################################ -### Ubuntu Based Kiosk (UBK) v0.9.1 ### +### Ubuntu Based Kiosk (UBK) v0.9.1-2 ### ################################################################################ # -# RELEASE v0.9.1 - Bug Fixes & Input Validation +# RELEASE v0.9.1-2 - Critical Fixes & Improvements # -# What's NEW in v0.9.1: -# - NEW: Pause button feature (bottom-left, like keyboard button) +# What's NEW in v0.9.1-2: +# - FIXED: All box drawing characters now use consistent standard characters +# - FIXED: Pause button time options now match return-to-home (15/30/60/120 min) +# - FIXED: Site rotation now respects user interaction (pauses 1 min after activity) +# - FIXED: Manual Electron update now properly detects kiosk directory +# * Searches multiple locations for kiosk installation +# * Shows detected user and directory path +# * Creates backup before updating +# * Verifies update completion +# +# What's in v0.9.1: +# - NEW: Pause button feature (bottom-left orange button) # * User can pause rotation/inactivity timers -# * Select time extension (5/15/30/60 minutes) +# * Select time extension (15/30/60/120 minutes) # * After extension expires, normal rotation/home logic resumes +# * Works on all pages including home URL # - FIXED: Site rotation timing now consistent with configured durations -# - FIXED: Manual Electron update (restored comprehensive backup/update logic) -# - REMOVED: All box drawing characters from output -# - IMPROVED: Simplified rotation/home logic for better reliability +# - FIXED: Manual Electron update (comprehensive backup/update/verify logic) +# - REMOVED: Box drawing characters from output +# - IMPROVED: Better rotation/home logic for reliability # # What's in v0.9.9.1.4: # - Fixed site rotation during time extensions (now properly pauses rotation) @@ -77,7 +88,7 @@ set -euo pipefail ### SECTION 1: CONSTANTS & GLOBALS ################################################################################ -SCRIPT_VERSION="0.9.1" +SCRIPT_VERSION="0.9.1-2" KIOSK_USER="kiosk" BUILD_USER="${SUDO_USER:-$(whoami)}" KIOSK_HOME="/home/${KIOSK_USER}" @@ -411,7 +422,7 @@ get_cpu_info() { ################################################################################ show_system_status() { - echo " ══ SYSTEM STATUS ══" + echo " -- SYSTEM STATUS --" echo if is_kiosk_installed; then @@ -422,7 +433,7 @@ show_system_status() { fi echo - echo " ══ SYSTEM RESOURCES ══" + echo " -- SYSTEM RESOURCES --" local ip=$(get_ip_address) echo "IP Address: $ip" @@ -462,7 +473,7 @@ show_system_status() { } show_addon_status() { - echo " =══ INSTALLED ADDONS ══=" + echo " =-- INSTALLED ADDONS --=" echo local any_addon=false @@ -586,7 +597,7 @@ show_addon_status() { echo } show_schedule_status() { - echo " ══ SCHEDULED TASKS ══" + echo " -- SCHEDULED TASKS --" echo local any_schedule=false @@ -630,7 +641,7 @@ show_schedule_status() { show_current_config() { if sudo -u "$KIOSK_USER" test -f "$CONFIG_PATH" 2>/dev/null; then - echo " ═══ CURRENT CONFIGURATION ═══" + echo " --- CURRENT CONFIGURATION ---" echo local autoswitch=$(sudo -u "$KIOSK_USER" jq -r '.autoswitch' "$CONFIG_PATH" 2>/dev/null) @@ -676,7 +687,7 @@ show_current_config() { } configure_timezone() { - echo " ═══ TIMEZONE CONFIGURATION ═══" + echo " --- TIMEZONE CONFIGURATION ---" echo local current_tz=$(timedatectl show -p Timezone --value) echo "Current timezone: $current_tz" @@ -791,7 +802,7 @@ configure_timezone() { } configure_touch_controls() { - echo " ═══ TOUCH CONTROLS CONFIGURATION ═══" + echo " --- TOUCH CONTROLS CONFIGURATION ---" echo echo "Touch control modes:" echo @@ -827,7 +838,7 @@ configure_touch_controls() { } configure_navigation_security() { - echo " ═══ NAVIGATION SECURITY ═══" + echo " --- NAVIGATION SECURITY ---" echo echo "Controls what users can access by clicking links:" echo @@ -867,7 +878,7 @@ configure_navigation_security() { configure_sites() { while true; do - echo " ═══ SITES CONFIGURATION ═══" + echo " --- SITES CONFIGURATION ---" echo URLS=() @@ -1070,7 +1081,7 @@ reorder_sites() { fi echo - echo " ═══ REORDER SITES ═══" + echo " --- REORDER SITES ---" echo echo "Current order:" for idx in "${!URLS[@]}"; do @@ -1143,7 +1154,7 @@ reorder_sites() { configure_home_url() { echo - echo " ═══ HOME URL CONFIGURATION ═══" + echo " --- HOME URL CONFIGURATION ---" echo echo "A HOME URL is where the kiosk returns after inactivity on other tabs." echo @@ -1211,7 +1222,7 @@ configure_home_url() { } add_new_sites() { - echo " ═══ SITE ROTATION SETUP ═══" + echo " --- SITE ROTATION SETUP ---" echo echo "HOW AUTO-ROTATION WORKS:" echo "────────────────────────────" @@ -1237,7 +1248,7 @@ add_new_sites() { local inactivity_minutes=2 local home_duration=180 - echo " ═══ HOME URL FEATURE ═══" + echo " --- HOME URL FEATURE ---" echo echo "A HOME URL returns the kiosk to a default screen after inactivity." echo @@ -1261,7 +1272,7 @@ add_new_sites() { fi echo - echo " ═══ ENTER SITES ═══" + echo " --- ENTER SITES ---" echo echo "Supported formats:" echo " • example.com → https://example.com" @@ -1457,7 +1468,7 @@ add_new_sites_simple() { ################################################################################ configure_wifi() { - echo " ══ WIFI CONFIGURATION ══" + echo " -- WIFI CONFIGURATION --" echo # Verify we have necessary tools @@ -1652,7 +1663,7 @@ WATCHEOF configure_emergency_hotspot() { echo - echo "══ EMERGENCY HOTSPOT ══" + echo "-- EMERGENCY HOTSPOT --" echo echo "Creates a WiFi hotspot if no internet connection after boot." echo "Allows you to connect and reconfigure the kiosk remotely." @@ -1955,9 +1966,9 @@ disable_emergency_hotspot() { configure_power_display_quiet() { while true; do clear - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo " POWER / DISPLAY / QUIET HOURS " - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo show_schedule_status @@ -1971,7 +1982,7 @@ configure_power_display_quiet() { rtc_status="⚠ Available but not writable" fi - echo " ═══ RTC Wake Capability ═══" + echo " --- RTC Wake Capability ---" echo "Status: $rtc_status" echo if $rtc_available; then @@ -2030,7 +2041,7 @@ configure_power_display_quiet() { configure_power_schedule() { echo - echo " ══ POWER SCHEDULING ══" + echo " -- POWER SCHEDULING --" echo # Check if RTC is available @@ -2181,7 +2192,7 @@ EOF configure_display_schedule() { echo - echo " ══ DISPLAY SCHEDULING ══" + echo " -- DISPLAY SCHEDULING --" echo # Check if power schedule exists @@ -2350,7 +2361,7 @@ EOF configure_quiet_hours() { echo - echo " ══ QUIET HOURS ══" + echo " -- QUIET HOURS --" echo # Show existing schedules for context @@ -2529,7 +2540,7 @@ EOF configure_electron_reload() { echo - echo " ══ ELECTRON RELOAD SCHEDULE ══" + echo " -- ELECTRON RELOAD SCHEDULE --" echo echo "Automatically reload Electron to prevent memory leaks." echo "Squeezelite music continues playing during reload." @@ -2721,7 +2732,7 @@ disable_electron_reload_timer() { test_display_control() { echo - echo " ═══ TEST DISPLAY CONTROL ═══" + echo " --- TEST DISPLAY CONTROL ---" echo echo "This will test turning the display off and on." echo @@ -2815,9 +2826,9 @@ remove_all_schedules() { show_testing_menu() { while true; do clear - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo " SCHEDULE & SYSTEM TESTING " - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo echo "Available Tests:" @@ -2847,7 +2858,7 @@ show_testing_menu() { test_quiet_hours() { echo - echo " ═══ QUIET HOURS TEST ═══" + echo " --- QUIET HOURS TEST ---" echo if ! systemctl is-enabled kiosk-quiet-start.timer &>/dev/null; then @@ -2887,7 +2898,7 @@ test_quiet_hours() { test_power_schedule() { echo - echo " ═══ POWER SCHEDULE TEST ═══" + echo " --- POWER SCHEDULE TEST ---" echo if ! systemctl is-enabled kiosk-shutdown.timer &>/dev/null; then @@ -2920,7 +2931,7 @@ test_power_schedule() { test_keyboard() { echo - echo " ═══ KEYBOARD TEST ═══" + echo " --- KEYBOARD TEST ---" echo echo "Testing keyboard visibility and function..." echo @@ -2941,7 +2952,7 @@ test_keyboard() { run_all_tests() { echo - echo " ═══ RUNNING ALL TESTS ═══" + echo " --- RUNNING ALL TESTS ---" echo echo "Test 1/5: Display Control" @@ -3079,9 +3090,9 @@ save_config() { full_reinstall() { echo "" - echo "══════════════════════════════════════════════════════════════" + echo "--------------------------------------------------------------" echo " FULL REINSTALL - NUCLEAR OPTION" - echo "══════════════════════════════════════════════════════════════" + echo "--------------------------------------------------------------" echo "" echo "⚠️ This will COMPLETELY WIPE:" echo " • All kiosk configuration and sites" @@ -3200,9 +3211,9 @@ full_reinstall() { first_time_install() { clear - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo " Ubuntu Based Kiosk (UBK) v${SCRIPT_VERSION} - Installation " - echo "════════════════════════════════════════════════════════════" + echo "------------------------------------------------------------" echo echo "This will install a HEADLESS KIOSK (no desktop environment):" echo @@ -3299,7 +3310,7 @@ const path=require('path'); const os=require('os'); const CONFIG_FILE=path.join(__dirname,'config.json'); -const VERSION='0.9.1'; +const VERSION='0.9.1-2'; let mainWindow,views=[],hiddenViews=[],tabs=[],currentIndex=0,showingHidden=false; let pinWindow=null,promptWindow=null,htmlKeyboardWindow=null; @@ -3348,12 +3359,12 @@ function loadConfig(){ inactivityTimeout=(config.inactivityTimeout||120)*1000; allowNavigation=config.allowNavigation||'same-origin'; - console.log('[CONFIG] ═══════════════════════════'); + console.log('[CONFIG] ---------------------------'); console.log('[CONFIG] Home tab index:',homeTabIndex); console.log('[CONFIG] Inactivity timeout:',inactivityTimeout/1000,'seconds'); console.log('[CONFIG] Navigation:',allowNavigation); console.log('[CONFIG] Sites:',config.tabs?.length||0); - console.log('[CONFIG] ═══════════════════════════'); + console.log('[CONFIG] ---------------------------'); return config.tabs||[]; }catch(e){ @@ -3525,10 +3536,10 @@ function startMasterTimer(){ clearInterval(masterTimer); } - console.log('[TIMER] =═══ MASTER TIMER STARTED ════='); + console.log('[TIMER] =--- MASTER TIMER STARTED ---=='); console.log('[TIMER] Home tab index:',homeTabIndex); console.log('[TIMER] Inactivity timeout:',inactivityTimeout/1000,'seconds'); - console.log('[TIMER] =═══════════════════════════════════='); + console.log('[TIMER] =-----------------------------------='); siteStartTime=Date.now(); lastUserInteraction=Date.now(); @@ -3566,10 +3577,10 @@ function startMasterTimer(){ const timeSinceInteraction=now-lastUserInteraction; userRecentlyActive=timeSinceInteraction1){ - // Skip rotation if user is in an extension period (they confirmed they're still there) + // Skip rotation if user is in an extension period (pause button was used) if(inactivityExtensionUntil>0&&now=0&&tabs[currentTabIdx]){ @@ -3598,7 +3614,7 @@ function startMasterTimer(){ } } - // User activity only blocks return-to-home, not rotation + // User activity already checked above, this blocks only return-to-home if(userRecentlyActive){ return; } @@ -4956,12 +4972,8 @@ echo "[15b/27] Creating pause dialog..."
- - + +