fix(file_handlers): use keystroke Cmd+Return to start pptx slideshow

Replace unreliable AppleScript PowerPoint API (run slide show of settings)
with System Events keystroke approach, matching proven behavior from the
old MasterKey app. Opens the file, waits 3s for load, then sends Cmd+Return
to start the slideshow from slide 1.
This commit is contained in:
Scott Idem
2026-04-20 17:01:04 -04:00
parent 3feaf1bbc3
commit 002c27e73c
5 changed files with 56 additions and 33 deletions

View File

@@ -2,14 +2,16 @@
# deploy.sh — Deploy Aether Native Launcher to onsite Mac laptops
#
# USAGE:
# ./deploy.sh <num> [num ...] Deploy to one or more laptops (e.g. 03 04 05)
# ./deploy.sh all Deploy to all laptops in devices.conf
# ./deploy.sh --seed-only <num> Update seed.json only — skip .app copy
# ./deploy.sh <num> [num ...] Deploy to one or more laptops (e.g. 03 04 05)
# ./deploy.sh all Deploy to all laptops in devices.conf
# ./deploy.sh --seed-only <num> Update seed.json only — skip .app copy
# ./deploy.sh --seed-only all
# ./deploy.sh --build <num> [num ...] Build first (npm run package:mac), then deploy
# ./deploy.sh --build all
#
# REQUIRES:
# event.env — copy from event.env.example and fill in AETHER_API_KEY
# builds/ — run "npm run package:mac" first if .app is missing
# builds/ — pre-built, or use --build to build before deploying
#
# SSH keys must already be installed on each target (run ssh-copy-id once per laptop).
@@ -24,6 +26,7 @@ BUILD_DIR="$SCRIPT_DIR/../builds"
# ── Argument parsing ──────────────────────────────────────────────────────────
SEED_ONLY=false
BUILD_FIRST=false
TARGETS=()
usage() {
@@ -36,6 +39,7 @@ if [[ $# -eq 0 ]]; then usage; fi
while [[ $# -gt 0 ]]; do
case "$1" in
--seed-only) SEED_ONLY=true ;;
--build) BUILD_FIRST=true ;;
--help|-h) usage ;;
all) TARGETS+=("all") ;;
*) TARGETS+=("$1") ;;
@@ -75,8 +79,8 @@ fi
# Returns "ip device_id" for a laptop number, or empty if not found
lookup_device() {
local num="$1"
grep -E "^[[:space:]]*${num}[[:space:]]" "$DEVICES_FILE" \
| grep -v '^[[:space:]]*#' \
grep -v '^[[:space:]]*#' "$DEVICES_FILE" \
| grep -E "^[[:space:]]*${num}[[:space:]]" \
| awk '{print $2, $3}' \
| head -1
}
@@ -134,12 +138,14 @@ deploy_laptop() {
return 1
fi
echo " Arch: $archcopying $(basename "$bundle")..."
scp -r "$bundle" "$SSH_USER@$ip:/Applications/aether_launcher.app" || {
echo " ERROR: scp failed."
echo " Arch: $archsyncing $(basename "$bundle")..."
# rsync --delete syncs contents in-place without removing the top-level .app dir.
# This preserves the inode so macOS Aliases and Desktop shortcuts keep working.
rsync -a --delete -e ssh "$bundle/" "$SSH_USER@$ip:/Applications/aether_launcher.app/" || {
echo " ERROR: rsync failed."
return 1
}
echo " .app copied."
echo " .app synced."
else
echo " (--seed-only: skipping .app copy)"
fi
@@ -168,6 +174,19 @@ EOF
return 0
}
# ── Build if requested ───────────────────────────────────────────────────────
if [[ "$BUILD_FIRST" == "true" ]]; then
echo "══════════════════════════════════════════════"
echo " Building: npm run package:mac"
echo "══════════════════════════════════════════════"
(cd "$SCRIPT_DIR/.." && npm run package:mac) || {
echo "ERROR: Build failed. Aborting deploy."
exit 1
}
echo ""
fi
# ── Expand "all" target ───────────────────────────────────────────────────────
EXPANDED_TARGETS=()