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.
104 lines
3.7 KiB
Bash
104 lines
3.7 KiB
Bash
#!/bin/bash
|
|
DIRECTORY="$(readlink -f "$(dirname "$(dirname "$0")")")"
|
|
|
|
function error {
|
|
echo -e "\e[91m$1\e[39m"
|
|
exit 1
|
|
}
|
|
|
|
APPS="$(ls "${DIRECTORY}/apps")"
|
|
refresh() {
|
|
structure="$(cat "${DIRECTORY}/data/categories/structure")"
|
|
}
|
|
refresh
|
|
#command line argument handler
|
|
if [ ! -z "$1" ];then
|
|
if ! echo "$APPS" | grep -q "$1" ;then
|
|
error "The $1 app does not exist in ${DIRECTORY}/apps!"
|
|
fi
|
|
|
|
if echo "$structure" | grep -q "$1"'|' ;then
|
|
echo "The $1 app is currently in the $(echo "$structure" | grep "$1"'|' | awk -F '|' '{print $2}') category."
|
|
fi
|
|
|
|
#check if $2 is --delete
|
|
if [ "$2" == '--delete' ];then
|
|
output="$(echo "$structure" | grep -v "$1"'|')"
|
|
else
|
|
if ! echo "$structure" | grep -q '|'"$2" ;then
|
|
echo "The $2 category did not exist previously."
|
|
fi
|
|
|
|
echo "Putting the $1 app in the $2 category..."
|
|
|
|
#replace any mention of the $1 app with the new line at the end of file
|
|
output="$(echo -e "$(echo "$structure" | grep -v "$1"'|')\n$1|$2" | sort)"
|
|
fi
|
|
|
|
#only change the structure file if something was really changed
|
|
if [ "$output" != "$(cat "${DIRECTORY}/data/categories/structure")" ];then
|
|
echo "$output" > "${DIRECTORY}/data/categories/structure"
|
|
else
|
|
echo "categoryedit: Not changing structure file, because nothing was changed."
|
|
fi
|
|
|
|
#structure file modified. Refresh the variable
|
|
refresh
|
|
echo "Line in structure file: $(echo "$structure" | grep "$1"'|')"
|
|
exit 0
|
|
fi
|
|
|
|
while true;do
|
|
|
|
#generate a virtual file system with apps in folders represented as subdirectories
|
|
PREIFS="$IFS"
|
|
IFS=$'\n'
|
|
LIST=''
|
|
for app in $APPS
|
|
do
|
|
category="$(echo "$structure" | grep "$app"'|' | awk -F '|' '{print $2}' | tr -d '.' | head -n1)"
|
|
#echo "category for $app is $category."
|
|
LIST="${LIST}${DIRECTORY}/apps/$app/icon-24.png
|
|
$app
|
|
$category
|
|
"
|
|
done
|
|
IFS="$PREIFS"
|
|
LIST="${LIST::-1}"
|
|
#echo -e "'$LIST'\n'$APPS'"
|
|
|
|
output="$(echo -e "$LIST" | yad --center --title='Category editor' --height=400 \
|
|
--list --text="Category file: $(echo "${DIRECTORY}/data/categories/structure" | sed 's+/home/pi+~+g')" --editable --editable-cols=3 --multiple --dclick-action=true --print-all \
|
|
--separator='|' --window-icon="${DIRECTORY}/icons/logo.png" \
|
|
--column=:IMG --column=Name --column=Category:TEXT \
|
|
--button=Reset!"${DIRECTORY}/icons/backup.png"!"Overwrites your structure file with the default one from the Pi-Apps repository.":4 \
|
|
--button=All!"${DIRECTORY}/icons/trash.png"!"Clears categories so all apps are in one list.":2 \
|
|
--button=Cancel!"${DIRECTORY}/icons/exit.png":1 \
|
|
--button=Save!"${DIRECTORY}/icons/check.png":0 )"
|
|
button=$?
|
|
if [ "$button" == 0 ];then
|
|
#save
|
|
break
|
|
elif [ "$button" == 2 ];then
|
|
#delete all
|
|
# remove categories from all lines, while leaving hidden ones intact
|
|
echo -e "$(echo "$structure" | grep -v '|hidden' | sed 's/|.*/|/')\n$(echo "$structure" | grep '|hidden')" | sort > "${DIRECTORY}/data/categories/structure"
|
|
elif [ "$button" == 4 ];then
|
|
#reset
|
|
rm "${DIRECTORY}/data/categories/structure"
|
|
wget -qO "${DIRECTORY}/data/categories/structure" 'https://raw.githubusercontent.com/Botspot/pi-apps/master/data/categories/structure'
|
|
[ ! -f "${DIRECTORY}/data/categories/structure" ] || [ -z "$(cat "${DIRECTORY}/data/categories/structure")" ] && error 'Failed to download a fresh structure file!'
|
|
else
|
|
#cancel or WM X
|
|
echo "User exited"
|
|
exit 0
|
|
fi
|
|
refresh
|
|
done
|
|
#remove first and last characters from each line ---- and '(null)' messaged from yad --- and sort it alphabetically
|
|
output="$(echo "$output" | sed 's/.$//; s/^.//' | sed "s+(null)++g" | sort)"
|
|
|
|
echo "$output" > "${DIRECTORY}/data/categories/structure"
|
|
|
|
"${DIRECTORY}/etc/preload-daemon" yad once &
|