- # clock us out in timetrap if are idle too long
- if [[ -e /p/.timetrap.db ]]; then
- export DISPLAY=:0
- if type -p xprintidle &>/dev/null && xidle=$(xprintidle 2>/dev/null); then
- if [[ $xidle == [0-9]* ]]; then
- sheet=$(sqlite3 /p/.timetrap.db "select sheet from entries where end is NULL;")
- idle=300000
- if [[ $sheet == w ]]; then
- idle=900000
- fi
- if [[ $sheet && $xidle -gt $idle ]]; then
- timetrap out
- fi
+
+ # this section copied from servicepid()
+ unit=exim4
+ pid=$(systemctl show --property MainPID --value $unit ||:)
+ case $pid in
+ [1-9]*) : ;;
+ *)
+ dir=/sys/fs/cgroup/system.slice
+ if [[ ! -d $dir ]]; then
+ dir=/sys/fs/cgroup/systemd/system.slice
+ fi;
+ pid=$(head -n1 $dir/${unit%.service}.service/cgroup.procs ||:)
+ ;;
+ esac
+ if [[ ! $pid ]]; then
+ chars+=(EXIM)
+ fi
+
+
+ if [[ -e /a/bin/bash_unpublished/source-state ]]; then
+ # /a gets remounted due to btrbk, ignore error code for file doesnt exist
+ source /a/bin/bash_unpublished/source-state || [[ $? == 1 ]]
+ fi
+
+
+ ## check if last snapshot was recent
+ old_snap_limit=$(( 3 * 60 * 60 ))
+ for vol in a o q; do
+ case $vol in
+ o) btrbk_root=/mnt/o/btrbk ;;
+ *) btrbk_root=/mnt/root/btrbk ;;
+ esac
+ # this section generally copied from btrbk scripts, but
+ # this part modified to speed things up by about half a second.
+ # I'm not sure if its quite as reliable, but it looks pretty safe.
+ # Profiled it using time and also adding to the top of the file:
+ # set -x
+ # PS4='+ $(date "+%2N") '
+ # allow failure in case there are no snapshots yet.
+ # shellcheck disable=SC2012
+ shopt -s nullglob
+ files=($btrbk_root/$vol.20*)
+ shopt -u nullglob
+ if (( ! ${#files[@]} )); then
+ continue
+ fi
+ snaps=($(ls -1avdr "${files[@]}" 2>/dev/null |head -n1 || : ))
+ now=$EPOCHSECONDS
+ maxtime=0
+ for s in ${snaps[@]}; do
+ file=${s##*/}
+ t=$(date -d $(sed -r 's/(.{4})(..)(.{5})(..)(.*)/\1-\2-\3:\4:\5/' <<<${file#$vol.}) +%s)
+ if (( t > maxtime )); then
+ maxtime=$t