49 lines
1.3 KiB
Bash
Executable File
49 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
fail() {
|
|
printf 'focus-session expiry: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
cleanup() {
|
|
qs ipc call focus end >/dev/null 2>&1 || true
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
qs ipc call focus end >/dev/null 2>&1 || true
|
|
qs ipc call focus start >/dev/null
|
|
|
|
state_file=$(find "${XDG_STATE_HOME:-$HOME/.local/state}/quickshell/by-shell" -name focus-session.json -print -quit)
|
|
[[ -n "$state_file" ]] || fail 'persistent state file was not created'
|
|
|
|
expired=$(mktemp "${state_file}.expired.XXXXXX")
|
|
jq '.paused = false | .deadlineMs = 1' "$state_file" >"$expired"
|
|
chmod --reference="$state_file" "$expired"
|
|
mv "$expired" "$state_file"
|
|
|
|
qs kill >/dev/null
|
|
for _ in $(seq 1 50); do
|
|
qs list 2>&1 | rg -q '^Instance ' || break
|
|
sleep 0.1
|
|
done
|
|
if qs list 2>&1 | rg -q '^Instance '; then
|
|
fail 'shell did not stop before restart'
|
|
fi
|
|
quickshell --daemonize >/dev/null
|
|
|
|
status=""
|
|
for _ in $(seq 1 60); do
|
|
status=$(qs ipc call focus status 2>/dev/null || true)
|
|
if jq -e '.active == false' <<<"$status" >/dev/null 2>&1; then
|
|
break
|
|
fi
|
|
sleep 0.2
|
|
done
|
|
|
|
jq -e '.active == false and .caffeine == false and .doNotDisturb == false' <<<"$status" >/dev/null || fail 'expired session was not completed and released'
|
|
|
|
trap - EXIT
|
|
printf 'focus-session expiry: PASS\n'
|