ProPresenter updates are safe: any installed copy counts as running, the newest version opens

- newest_of picks by CFBundleShortVersionString, not file name (ProPresenter.app sorted after ProPresenter 20.1.app)
- mac_start takes newest_of; auto-setup uses it for programs on the Companion Mac
- WS and SC switched over; NA's ProP restart re-rendered (same pick today)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-21 14:33:39 -04:00
co-authored by Claude Opus 5.5
parent 5db1d93732
commit 42b325e927
7 changed files with 82 additions and 24 deletions
+7 -6
View File
@@ -155,7 +155,7 @@
},
{
"type": "process",
"match": "/Applications/ProPresenter 20.0.1.app/Contents/MacOS/ProPresenter",
"match": "/Applications/ProPresenter[^/]*\\.app/Contents/MacOS/ProPresenter$",
"name": "PROP",
"fix": "propresenter_ingest"
}
@@ -388,29 +388,30 @@
"params": {
"host": "ingest",
"process": "ProPresenter",
"app": "/Applications/ProPresenter 20.0.1.app"
"app": "$APP",
"newest_of": "/Applications/ProPresenter*.app"
},
"label": "start ProPresenter on this Mac if it is not running",
"short": "PROP",
"kind": "local",
"run": "pgrep -xq ProPresenter || open '/Applications/ProPresenter 20.0.1.app'"
"run": "pgrep -xq ProPresenter || { APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); open \"$APP\"; }"
},
"restart_propresenter_ingest": {
"template": "mac_restart",
"params": {
"host": "ingest",
"process": "ProPresenter",
"app": "/Applications/ProPresenter 20.0.1.app",
"app": "$APP",
"wait_seconds": 10,
"force": true,
"background": false,
"stop_children": false,
"newest_of": ""
"newest_of": "/Applications/ProPresenter*.app"
},
"label": "restart ProPresenter on this Mac (closes it first)",
"short": "PROP",
"kind": "local",
"run": "pkill -TERM -x ProPresenter; i=0; while pgrep -xq ProPresenter && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProPresenter && pkill -KILL -x ProPresenter; sleep 1; open '/Applications/ProPresenter 20.0.1.app'"
"run": "APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); pkill -TERM -x ProPresenter; i=0; while pgrep -xq ProPresenter && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProPresenter && pkill -KILL -x ProPresenter; sleep 1; open \"$APP\""
},
"prop_port_propresenter_api": {
"kind": "propresenter_port",
+10 -9
View File
@@ -71,13 +71,14 @@
"kind": "local",
"label": "start ProPresenter on this Mac if it is not running",
"params": {
"app": "/Applications/ProPresenter.app",
"app": "$APP",
"host": "ingest",
"process": "ProPresenter"
"process": "ProPresenter",
"newest_of": "/Applications/ProPresenter*.app"
},
"run": "pgrep -xq ProPresenter || open /Applications/ProPresenter.app",
"short": "PROP",
"template": "mac_start"
"template": "mac_start",
"run": "pgrep -xq ProPresenter || { APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); open \"$APP\"; }"
},
"restart_ableton_ws_tracks": {
"host": "ws_tracks",
@@ -97,18 +98,18 @@
"kind": "local",
"label": "restart ProPresenter on this Mac (closes it first)",
"params": {
"app": "/Applications/ProPresenter.app",
"app": "$APP",
"background": false,
"force": true,
"host": "ingest",
"newest_of": "",
"newest_of": "/Applications/ProPresenter*.app",
"process": "ProPresenter",
"stop_children": false,
"wait_seconds": 10
},
"run": "pkill -TERM -x ProPresenter; i=0; while pgrep -xq ProPresenter && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProPresenter && pkill -KILL -x ProPresenter; sleep 1; open /Applications/ProPresenter.app",
"short": "PROP",
"template": "mac_restart"
"template": "mac_restart",
"run": "APP=$(for a in /Applications/ProPresenter*.app; do [ -d \"$a\" ] && printf '%s|%s\\n' \"$(defaults read \"$a/Contents/Info\" CFBundleShortVersionString 2>/dev/null)\" \"$a\"; done | sort -t '|' -k1,1V | tail -1 | cut -d '|' -f2-); pkill -TERM -x ProPresenter; i=0; while pgrep -xq ProPresenter && [ $i -lt 20 ]; do sleep 0.5; i=$((i+1)); done; pgrep -xq ProPresenter && pkill -KILL -x ProPresenter; sleep 1; open \"$APP\""
},
"restart_superrack_ws_foh": {
"host": "ws_foh",
@@ -489,7 +490,7 @@
},
{
"fix": "propresenter_ingest",
"match": "/Applications/ProPresenter.app/Contents/MacOS/ProPresenter",
"match": "/Applications/ProPresenter[^/]*\\.app/Contents/MacOS/ProPresenter$",
"name": "PROP",
"type": "process"
}