PublicFiles/Artian-Apps/etc/preload-daemon

85 lines
2.8 KiB
Bash

#!/bin/bash
#runs in the background and refreshes all the list files
#Only one instance of this script should run at a time. If this is removed, preload will form a fairly good fork bomb.
if [ "$(pgrep preload-daemon | wc -l)" -gt 2 ];then
exit 0
fi
DIRECTORY="$(dirname "$(readlink -f "$(dirname "$0")")")"
function error {
echo -e "\e[91m$1\e[39m"
exit 1
}
#for refresh_all_pkgapp_status function, and to prevent preload script from sourcing api
if ! command -v read_category_files >/dev/null ;then
source "${DIRECTORY}/api" || error "failed to source ${DIRECTORY}/api"
fi
#for mktimestamps function
source "${DIRECTORY}/preload" "source"
#list of folders to preload, including special folders
folders="All Apps
$(read_category_files | awk -F '|' '{print $2}' | sort | uniq | grep .)
Installed
Packages"
#echo "$folders"
IFS=$'\n'
#For systems with older versions of yad, the text color column cannot be left blank. This python script determines the default text color from GTK bindings.
if [ -z "${text_color+x}" ];then
#0400 is the latest version
yad_version="$(zcat /usr/share/doc/yad/NEWS.gz | head -n 1 | tr -cd '0123456789\n')"
if [ $yad_version -lt 0400 ]; then
if command -v python3 &>/dev/null; then
python_version="python3"
else
python_version="python2"
fi
export text_color=$(echo "import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
tv = Gtk.TextView()
style = tv.get_style_context()
textcolor = style.get_color(Gtk.StateType.NORMAL)
print(Gdk.RGBA.to_string(textcolor))
" | $python_version -)
else
export text_color=""
fi
fi
#hide package-apps that are unavailable in the repositories, and change their status accordingly
#only run this if the /var/lib/dpkg/status has been changed since last time
if [ "$(stat -c %Y /var/lib/dpkg/status 2>/dev/null)" != "$(cat "${DIRECTORY}/data/preload/timestamps-dpkg-status" 2>/dev/null)" ];then
echo "Refreshing pkgapp_status..." 1>&2
stat -c %Y /var/lib/dpkg/status 2>/dev/null > "${DIRECTORY}/data/preload/timestamps-dpkg-status"
refresh_all_pkgapp_status &
fi
#get modified timestamps for files/directories in the pi-apps folder
timestamps="$(mktimestamps)"
#determine the app list style (it may change)
guimode="$(cat "${DIRECTORY}/data/settings/App List Style" 2>/dev/null)"
#only re-preload everything if something in the pi-apps folder was changed
if [ "$timestamps" != "$(cat "${DIRECTORY}/data/preload/timestamps-preload-daemon" 2>/dev/null)" ];then
echo "Preload-daemon running..." 1>&2
for folder in $folders ; do
"${DIRECTORY}/preload" "$guimode" "$folder" &>/dev/null
done
echo done 1>&2
echo "$timestamps" > "${DIRECTORY}/data/preload/timestamps-preload-daemon"
else
echo "Preload-daemon skipped; nothing was changed" 1>&2
fi