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.
		
		
		
		
		
			
		
			
				
	
	
		
			144 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
#!/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
 | 
						|
  
 | 
						|
elif [ "$1" == 'revert' ];then #If $1 equals 'revert', then overwrite all settings with the defaults and then the script will exit.
 | 
						|
  
 | 
						|
  #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+=(--field=:CB "${params}")
 | 
						|
    tooltips+=(--field="${name}":!!"${tooltip}":BTN '')
 | 
						|
  done
 | 
						|
  IFS="$PREIFS"
 | 
						|
  
 | 
						|
  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"
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |