You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Botspot-Pi-Apps/settings

153 lines
4.6 KiB
Bash

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

#!/bin/bash
DIRECTORY="$(readlink -f "$(dirname "$0")")"
function error {
echo -e "\e[91m$1\e[39m"
exit 1
}
#ensure settings dir exists
if [ ! -d "${DIRECTORY}/data/settings" ];then
echo "creating settings directory"
mkdir -p "${DIRECTORY}/data/settings"
#create default files inside
echo '' > "${DIRECTORY}/data/settings/reinstall-after-update"
fi
#$1 is usually left blank. If it equals 'refresh', then empty settings will be created and then the script will exit.
if [ "$1" == 'refresh' ];then
#set default settings, if they don't exist
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
PREIFS="$IFS"
IFS='|'
for name in $settings
do
if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
fi
done
IFS="$PREIFS"
exit 0
fi
#$1 is usually left blank. If it equals 'revert', then overwrite all settings with the defaults and then the script will exit.
if [ "$1" == 'revert' ];then
#overwrite all settings with the defaults
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
PREIFS="$IFS"
IFS='|'
for name in $settings
do
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
done
IFS="$PREIFS"
exit 0
fi
if [ ! -f ~/.local/share/applications/pi-apps-settings.desktop ];then
echo "Creating Settings menu button"
echo "[Desktop Entry]
Name=Pi Apps Settings
Comment=Configure Pi-Apps or create an App
Exec=${DIRECTORY}/settings
Icon=${DIRECTORY}/icons/logo.png
Terminal=false
Type=Application
Categories=Settings;" > ~/.local/share/applications/pi-apps-settings.desktop
fi
exitloop=''
while [ -z $exitloop ];do
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
yadparams=''
tooltips=''
PREIFS="$IFS"
IFS='|'
for name in $settings
do
params="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#')"
#create file if necessary
if [ ! -f "${DIRECTORY}/data/settings/${name}" ] || [ -z "$(cat "${DIRECTORY}/data/settings/${name}")" ];then
cat "${DIRECTORY}/etc/setting-params/${name}" | grep -v '#' | head -n1 > "${DIRECTORY}/data/settings/${name}"
fi
#get current setting
curval="$(cat "${DIRECTORY}/data/settings/${name}")"
#order params, with selected option first
params="$(echo "$params" | grep -x "$curval")
$(echo "$params" | grep -vx "$curval")"
params="$(echo "$params" | tr '\n' '!')"
params="${params::-1}"
tooltip="$(cat "${DIRECTORY}/etc/setting-params/${name}" | grep '^#' | tr -d '#' | tr '\n' '\r')"
tooltip="${tooltip::-1}"
#echo "Params of ${name}: ${params}"
#echo "Tooltip of ${name}: ${tooltip}"
yadparams="${yadparams}
--field=:CB
${params}"
tooltips="${tooltips}
--field=${name}:!!${tooltip}:BTN
''"
done
IFS="$PREIFS"
#replace all space ' ' characters with a special kind of space: a punctuation space (). This way, bash won't split the strings into separate words.
yadparams="$(echo "$yadparams" | sed 's/ //g')"
tooltips="$(echo "$tooltips" | sed 's/ //g')"
output="$(yad --center --title='Pi-Apps Settings' --width=310 --height=300 \
--form --separator='\n' --window-icon="${DIRECTORY}/icons/logo.png" --columns=2 \
$tooltips \
--field='Categories...'!"${DIRECTORY}/icons/categories.png":FBTN "bash -c '${DIRECTORY}/etc/categoryedit &>/dev/null'" \
--field='Log files...'!"${DIRECTORY}/icons/log-file.png":FBTN "bash -c '${DIRECTORY}/etc/logviewer &>/dev/null'" \
$yadparams \
--field='New App...'!"${DIRECTORY}/icons/create.png":FBTN "bash -c '${DIRECTORY}/createapp &>/dev/null'" \
--button='Reset'!"${DIRECTORY}/icons/backup.png"!'Reset all settings to their defaults':2 \
--button=Cancel!"${DIRECTORY}/icons/exit.png":1 \
--button=Save!"${DIRECTORY}/icons/check.png":0 \
)"
button=$? #get exit code to determine which button was pressed
#exit if save was not clicked
[ $button -ne 0 ] && [ $button -ne 2 ] && exit 0
if [ $button -eq 2 ];then
output=''
"${0}" revert
else
exitloop=yes
fi
done
#remove empty lines from $output
output="$(echo "$output" | grep .)"
echo "Output: ${output}EOO"
settings="$(ls "${DIRECTORY}/etc/setting-params" | tr '\n' '|')"
settingnumber=1
PREIFS="$IFS"
IFS='|'
for name in $settings
do
curval="$(echo "$output" | sed -n "${settingnumber}p")"
echo "Setting '$name' to '$curval'"
echo "$curval" > "${DIRECTORY}/data/settings/${name}"
settingnumber=$((settingnumber + 1))
done
IFS="$PREIFS"