#!/bin/bash # App Commands Handler # Handles all app subcommands by calling core functions cliHandleAppCommands() { local action="$initial_command2" local app_name="$initial_command3" local config="$initial_command4" local restore_arg2="$initial_command4" local restore_arg3="$initial_command5" local restore_arg4="$initial_command6" local tool_name="$initial_command4" local tool_args="$initial_command5" local reset_network="false" if [[ "$config" == "--reset-network" ]]; then reset_network="true" config="" elif [[ "$initial_command5" == "--reset-network" ]]; then reset_network="true" fi case "$action" in "list") if [[ -z "$app_name" ]]; then cliShowAppHelp elif [ "$app_name" = "available" ]; then appScanAvailable elif [ "$app_name" = "installed" ]; then databaseListInstalledApps else isNotice "Invalid list type: $app_name" cliShowAppHelp fi ;; "install") dockerInstallApp "$app_name" "$config" "$reset_network" ;; "uninstall") # Optional `--delete-images` flag (in any of the trailing # positions) tells the uninstall to also remove the app's # docker images. Default behaviour: keep them so a reinstall # is fast and offline-friendly. local _del_images="false" local _del_tasks="false" for _arg in "$config" "$initial_command5" "$initial_command6" "$initial_command7"; do [[ "$_arg" == "--delete-images" ]] && _del_images="true" [[ "$_arg" == "--delete-tasks" ]] && _del_tasks="true" done dockerUninstallApp "$app_name" "$_del_images" "$_del_tasks" ;; "start") dockerStartApp "$app_name" ;; "stop") dockerStopApp "$app_name" ;; "restart") dockerRestartApp "$app_name" ;; "up") dockerComposeUp "$app_name" ;; "down") dockerComposeDown "$app_name" ;; "reload") dockerRestartAppViaInstall "$app_name" ;; "backup") if [[ -z "$app_name" ]]; then isNotice "No app provided." cliShowAppHelp else backupAppStart "$app_name" fi ;; "restore") if [[ -z "$app_name" ]]; then isNotice "No app provided." cliShowAppHelp else cliAppRestore "$app_name" "$restore_arg2" "$restore_arg3" "$restore_arg4" fi ;; "generate") if [[ -z "$app_name" ]]; then isNotice "No app provided." cliShowAppHelp else appGenerate "$app_name" fi ;; "status") if [[ -z "$app_name" ]]; then isNotice "No app provided." cliShowAppHelp else appStatus "$app_name" fi ;; "tool") # `libreportal app tool list []` — discover available tools. # When the second arg is the literal `list`, the third is treated # as an optional app filter. Otherwise the standard run shape # applies: `libreportal app tool [args]`. if [[ "$app_name" == "list" ]]; then cliAppToolList "$tool_name" elif [[ -z "$app_name" || -z "$tool_name" ]]; then isNotice "Usage: libreportal app tool [args]" isNotice " libreportal app tool list []" cliShowAppHelp else dockerAppRunTool "$app_name" "$tool_name" "$tool_args" fi ;; *) isNotice "Invalid app command: $action" cliShowAppHelp ;; esac }