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.
		
		
		
		
		
			
		
			
				
	
	
		
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
			
		
		
	
	
			156 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Bash
		
	
#!/bin/bash
 | 
						|
 | 
						|
#this generates a yad-friendly app list. This is run every time the gui script is executed.
 | 
						|
#if this script detects nothing has changed since last run, then it will echo back the app list that was generated last time.
 | 
						|
 | 
						|
DIRECTORY="$(readlink -f "$(dirname "$0")")"
 | 
						|
 | 
						|
function error {
 | 
						|
  echo -e "\e[91m$1\e[39m" 1>&2
 | 
						|
  exit 1
 | 
						|
}
 | 
						|
 | 
						|
#determine if host system is 64 bit arm64 or 32 bit armhf
 | 
						|
if [ ! -z "$(file "$(readlink -f "/sbin/init")" | grep 64)" ];then
 | 
						|
  arch=64
 | 
						|
elif [ ! -z "$(file "$(readlink -f "/sbin/init")" | grep 32)" ];then
 | 
						|
  arch=32
 | 
						|
else
 | 
						|
  error "Failed to detect OS CPU architecture! Something is very wrong."
 | 
						|
fi
 | 
						|
 | 
						|
#yad or xlunch format
 | 
						|
format="$1"
 | 
						|
 | 
						|
if [ -z "$format" ];then
 | 
						|
  format=yad
 | 
						|
fi
 | 
						|
 | 
						|
mkdir -p "${DIRECTORY}/data/preload"
 | 
						|
 | 
						|
mktimestamps() {
 | 
						|
  #these directories are checked for changes
 | 
						|
  checkdirs="${DIRECTORY}/apps
 | 
						|
${DIRECTORY}/data/settings
 | 
						|
${DIRECTORY}/data/status"
 | 
						|
  
 | 
						|
  timestamps=''
 | 
						|
  PREIFS="$IFS"
 | 
						|
  IFS=$'\n'
 | 
						|
  for dir in $checkdirs
 | 
						|
  do
 | 
						|
    timestamps="$timestamps
 | 
						|
${dir}/$(ls -t "$dir" | head -n1)
 | 
						|
$(stat -c %Y "${dir}/$(ls -t "$dir" | head -n1)")"
 | 
						|
  done
 | 
						|
  IFS="$PREIFS"
 | 
						|
  #remove first empty newline
 | 
						|
  timestamps="${timestamps:1}"
 | 
						|
}
 | 
						|
 | 
						|
reloadlist=0
 | 
						|
 | 
						|
if [ -f "${DIRECTORY}/data/preload/timestamps" ];then
 | 
						|
  #get modified timestamps for directories
 | 
						|
  mktimestamps
 | 
						|
  
 | 
						|
  if [ "$timestamps" == "$(cat "${DIRECTORY}/data/preload/timestamps")" ];then
 | 
						|
    #if current timestamps and saved timestamps match, then don't reload the list
 | 
						|
    reloadlist=0
 | 
						|
    echo "Timestamps match." 1>&2
 | 
						|
  else
 | 
						|
    #timestamps don't match, so reload the list
 | 
						|
    reloadlist=1
 | 
						|
    echo "Timestamps don"\'"t match" 1>&2
 | 
						|
  fi
 | 
						|
else
 | 
						|
  #timestamp file not found
 | 
						|
  reloadlist=1
 | 
						|
fi
 | 
						|
 | 
						|
if [ ! -f "${DIRECTORY}/data/preload/LIST" ];then
 | 
						|
  echo "list file does not exist." 1>&2
 | 
						|
  reloadlist=1
 | 
						|
fi
 | 
						|
 | 
						|
if [ $reloadlist == 1 ];then
 | 
						|
  echo "Generating list..." 1>&2
 | 
						|
  #get list of apps ----------------------------------- and exclude apps mentioned in hidelist file
 | 
						|
  APPS="$(echo "$(ls "${DIRECTORY}/apps")" | grep -vxE "$(cat "${DIRECTORY}/data/hidelist" | tr '\n' '|')")"
 | 
						|
  #APPS="$(echo "$(ls "${DIRECTORY}/apps")")"
 | 
						|
  
 | 
						|
  #remove apps that are not compatible with OS architecture
 | 
						|
  PREIFS="$IFS"
 | 
						|
  IFS=$'\n'
 | 
						|
  for i in $APPS
 | 
						|
  do
 | 
						|
    #if install script doesn't exist -------------------- and if os-specific install script doesn't exist, then...
 | 
						|
    if [ ! -f "${DIRECTORY}/apps/${i}/install" ] && [ ! -f "${DIRECTORY}/apps/${i}/install-${arch}" ];then
 | 
						|
      #...remove the app from the list
 | 
						|
      echo "Removing $i from the list because it is not compatible with your ${arch}-bit OS." 1>&2
 | 
						|
      APPS="$(echo "$APPS" | grep -vx "$i")"
 | 
						|
    fi
 | 
						|
  done
 | 
						|
  IFS="$PREIFS"
 | 
						|
  
 | 
						|
  #shuffle the list if enabled
 | 
						|
  if [ "$(cat "${DIRECTORY}/data/settings/Shuffle App list")" == 'Yes' ];then
 | 
						|
    APPS="$(echo "$APPS" | shuf)"
 | 
						|
  fi
 | 
						|
  
 | 
						|
  if [ "$format" == yad ];then
 | 
						|
    PREIFS="$IFS"
 | 
						|
    IFS=$'\n'
 | 
						|
    LIST=''
 | 
						|
    for i in $APPS
 | 
						|
    do
 | 
						|
      LIST="$LIST$(echo "${DIRECTORY}/icons/$(cat "${DIRECTORY}/data/status/${i}" 2>/dev/null || echo "none").png")
 | 
						|
${DIRECTORY}/apps/${i}/icon-24.png
 | 
						|
$i
 | 
						|
"\("$(cat "${DIRECTORY}/data/status/${i}" 2>/dev/null || echo "uninstalled")"\)" $(echo "$(cat "${DIRECTORY}/apps/${i}/description" || echo "Description unavailable")" | head -n1)
 | 
						|
"
 | 
						|
    done
 | 
						|
    IFS="$PREIFS"
 | 
						|
  elif [ "$format" == xlunch ];then
 | 
						|
    PREIFS="$IFS"
 | 
						|
    IFS=$'\n'
 | 
						|
    LIST=''
 | 
						|
    for i in $APPS
 | 
						|
    do
 | 
						|
      LIST="$LIST
 | 
						|
${i} "\("$(cat "${DIRECTORY}/data/status/${i}" 2>/dev/null || echo "uninstalled")"\)";${DIRECTORY}/apps/${i}/icon-64.png;${i}"
 | 
						|
    done
 | 
						|
    IFS="$PREIFS"
 | 
						|
  fi
 | 
						|
  LIST="$(echo -e "$LIST")"
 | 
						|
  
 | 
						|
  #save entire list string to file for future use
 | 
						|
  echo "$LIST" > "${DIRECTORY}/data/preload/LIST"
 | 
						|
  export CACHED_LIST="$LIST"
 | 
						|
  
 | 
						|
  #save timestamps to file too
 | 
						|
  mktimestamps
 | 
						|
  echo "$timestamps" > "${DIRECTORY}/data/preload/timestamps"
 | 
						|
else
 | 
						|
  if [ -z "$CACHED_LIST" ];then
 | 
						|
    echo "Reading list file..." 1>&2
 | 
						|
    LIST="$(cat "${DIRECTORY}/data/preload/LIST")"
 | 
						|
    export CACHED_LIST="$LIST"
 | 
						|
  else
 | 
						|
    echo "Reading list variable..." 1>&2
 | 
						|
    LIST="$CACHED_LIST"
 | 
						|
  fi
 | 
						|
fi
 | 
						|
 | 
						|
(#put icons in cache
 | 
						|
PREIFS="$IFS"
 | 
						|
IFS=$'\n'
 | 
						|
for icon in $(echo "$LIST" | grep icon-24)
 | 
						|
do
 | 
						|
  cat "$icon" 1>/dev/null
 | 
						|
  #echo "Putting $icon in cache..." 1>&2
 | 
						|
done
 | 
						|
IFS="$PREIFS" ) &
 | 
						|
 | 
						|
echo "$LIST"
 |