#!/usr/bin/env bash # ssr-schedule — manage the launchd scheduled sync job. set -euo pipefail SSR_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=../lib/common.sh source "$SSR_ROOT/lib/common.sh" ssr::require_macos ssr::load_config LABEL="${SSR_LAUNCHD_LABEL:-de.surke.ssr.sync}" PLIST_SRC="$SSR_ROOT/launchd/${LABEL}.plist" PLIST_DST="$HOME/Library/LaunchAgents/${LABEL}.plist" LOG_DIR="${SSR_LOG_DIR:-$HOME/.local/state/ssr/logs}" INTERVAL_HOUR="${SSR_SCHEDULE_HOUR:-9}" INTERVAL_MIN="${SSR_SCHEDULE_MINUTE:-0}" SSR_BIN="$SSR_ROOT/bin/ssr" render_plist() { ssr::ensure_dir "$LOG_DIR" ssr::ensure_dir "$(dirname "$PLIST_DST")" # Substitute placeholders from the template into the user's LaunchAgents dir. sed \ -e "s|@@LABEL@@|${LABEL}|g" \ -e "s|@@SSR_BIN@@|${SSR_BIN}|g" \ -e "s|@@LOG_DIR@@|${LOG_DIR}|g" \ -e "s|@@HOUR@@|${INTERVAL_HOUR}|g" \ -e "s|@@MINUTE@@|${INTERVAL_MIN}|g" \ "$PLIST_SRC" > "$PLIST_DST" chmod 600 "$PLIST_DST" } cmd_on() { [[ -f "$PLIST_SRC" ]] || ssr::die "launchd template missing: $PLIST_SRC" render_plist # Reload to pick up changes if it was already loaded. launchctl unload "$PLIST_DST" 2>/dev/null || true launchctl load -w "$PLIST_DST" ssr::ok "Scheduled sync enabled (${INTERVAL_HOUR}:$(printf '%02d' "$INTERVAL_MIN") daily) → $PLIST_DST" } cmd_off() { if [[ -f "$PLIST_DST" ]]; then launchctl unload "$PLIST_DST" 2>/dev/null || true rm -f "$PLIST_DST" ssr::ok "Scheduled sync disabled" else ssr::log "Scheduled sync was not installed" fi } cmd_status() { if [[ -f "$PLIST_DST" ]] && launchctl list | grep -q "$LABEL"; then ssr::ok "Scheduled sync: active (label=$LABEL)" else ssr::log "Scheduled sync: inactive" fi } case "${1:-status}" in on|enable) cmd_on ;; off|disable) cmd_off ;; status) cmd_status ;; *) ssr::die "Usage: ssr schedule [on|off|status]" ;; esac