diff --git a/src/freedombone-selector b/src/freedombone-selector index 5345bda2..8755bac8 100755 --- a/src/freedombone-selector +++ b/src/freedombone-selector @@ -42,56 +42,7 @@ source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt -# Array containing names of available apps -APPS_AVAILABLE=() - -# Array containing 1 or 0 indicating installed apps -APPS_INSTALLED=() - -# Apps selected with checklist -APPS_CHOSEN=() - -function item_in_array { - local e - for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done - return 1 -} - -function app_is_installed { - app_name="$1" - if [ ! -f $COMPLETION_FILE ]; then - echo "0" - return - fi - - if ! grep -Fxq "install_${app_name}" $COMPLETION_FILE; then - echo "0" - else - echo "1" - fi -} - -function get_apps_installed { - for a in "${APPS_AVAILABLE[@]}" - do - APPS_INSTALLED+=("$(app_is_installed $a)") - done -} - -function detect_apps { - FILES=$PROJECT_INSTALL_DIR/${PROJECT_NAME}-app-* - - # for all the app scripts - for filename in $FILES - do - app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}') - if [[ $(item_in_array ${app_name} ${APPS_AVAILABLE[@]}) != 0 ]]; then - APPS_AVAILABLE+=("${app_name}") - APPS_CHOSEN+=("0") - fi - done - get_apps_installed -} +source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-utils-selector function show_apps { applist="" @@ -124,7 +75,7 @@ function show_apps { fi } -function remove_apps { +function remove_apps_interactive { # which apps need to be removed? removals="" app_index=0 @@ -162,20 +113,10 @@ function remove_apps { # remove the apps read_configuration - for a in "${APPS_AVAILABLE[@]}" - do - if [[ ${APPS_INSTALLED[$app_index]} == "1" ]]; then - if [[ ${APPS_CHOSEN[$app_index]} == "0" ]]; then - echo $"Removing application: ${a}" - remove_${a} - echo $"${a} was removed" - fi - fi - app_index=$[app_index+1] - done + remove_apps } -function install_apps { +function install_apps_interactive { # which apps need to be installed? installs="" app_index=0 @@ -213,17 +154,7 @@ function install_apps { # install the apps read_configuration - for a in "${APPS_AVAILABLE[@]}" - do - if [[ ${APPS_INSTALLED[$app_index]} == "0" ]]; then - if [[ ${APPS_CHOSEN[$app_index]} == "1" ]]; then - echo $"Installing application: ${a}" - install_${a} - echo $"${a} was installed" - fi - fi - app_index=$[app_index+1] - done + install_apps } ${PROJECT_NAME}-tests @@ -242,7 +173,7 @@ show_apps clear -remove_apps -install_apps +remove_apps_interactive +install_apps_interactive exit 0 diff --git a/src/freedombone-utils-selector b/src/freedombone-utils-selector new file mode 100644 index 00000000..daaec9aa --- /dev/null +++ b/src/freedombone-utils-selector @@ -0,0 +1,113 @@ +#!/bin/bash +# +# .---. . . +# | | | +# |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-. +# | | (.-' (.-' ( | ( )| | | | )( )| | (.-' +# ' ' --' --' -' - -' ' ' -' -' -' ' - --' +# +# Freedom in the Cloud +# +# Functions for selecting which apps to install or remove +# +# License +# ======= +# +# Copyright (C) 2015-2016 Bob Mottram +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# Array containing names of available apps +APPS_AVAILABLE=() + +# Array containing 1 or 0 indicating installed apps +APPS_INSTALLED=() + +# Apps selected with checklist +APPS_CHOSEN=() + +function item_in_array { + local e + for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done + return 1 +} + +function app_is_installed { + app_name="$1" + if [ ! -f $COMPLETION_FILE ]; then + echo "0" + return + fi + + if ! grep -Fxq "install_${app_name}" $COMPLETION_FILE; then + echo "0" + else + echo "1" + fi +} + +function get_apps_installed { + for a in "${APPS_AVAILABLE[@]}" + do + APPS_INSTALLED+=("$(app_is_installed $a)") + done +} + +function detect_apps { + FILES=$PROJECT_INSTALL_DIR/${PROJECT_NAME}-app-* + + APPS_AVAILABLE=() + APPS_CHOSEN=() + + # for all the app scripts + for filename in $FILES + do + app_name=$(echo "${filename}" | awk -F '-app-' '{print $2}') + if [[ $(item_in_array ${app_name} ${APPS_AVAILABLE[@]}) != 0 ]]; then + APPS_AVAILABLE+=("${app_name}") + APPS_CHOSEN+=("0") + fi + done + get_apps_installed +} + +function remove_apps { + app_index=0 + for a in "${APPS_AVAILABLE[@]}" + do + if [[ ${APPS_INSTALLED[$app_index]} == "1" ]]; then + if [[ ${APPS_CHOSEN[$app_index]} == "0" ]]; then + echo $"Removing application: ${a}" + remove_${a} + echo $"${a} was removed" + fi + fi + app_index=$[app_index+1] + done +} + +function install_apps { + app_index=0 + for a in "${APPS_AVAILABLE[@]}" + do + if [[ ${APPS_INSTALLED[$app_index]} == "0" ]]; then + if [[ ${APPS_CHOSEN[$app_index]} == "1" ]]; then + echo $"Installing application: ${a}" + install_${a} + echo $"${a} was installed" + fi + fi + app_index=$[app_index+1] + done +} diff --git a/src/freedombone-utils-setup b/src/freedombone-utils-setup index 209de479..651aca02 100755 --- a/src/freedombone-utils-setup +++ b/src/freedombone-utils-setup @@ -326,24 +326,13 @@ function setup_web { } function setup_apps { - install_zeronet - install_syncthing - install_gogs - install_xmpp - install_tox - install_irc - install_mumble - install_sip - install_wiki - install_blog - install_gnusocial - install_rss - install_hubzilla - #install_webmail - #install_search_engine - install_dlna - #install_mediagoblin - #install_ipfs + function_check detect_apps + detect_apps + + # TODO choose apps based upon variants + + function_check install_apps + install_apps } # NOTE: deliberately no exit 0