85 lines
2.8 KiB
Bash
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
|