feat: Add platform-specific VLC launch profiles (macOS working; Linux deferred)

- macOS: Uses direct binary path (/Applications/VLC.app/Contents/MacOS/VLC)
  with --no-play-and-exit --play-and-pause flags and AppleScript fullscreen toggle.
  Confirmed working: pause on last frame, stays in window.

- Linux: Uses shell command (vlc --no-play-and-exit --play-and-pause).
  Known issue: not going fullscreen, not pausing on end. Deferred for later
  investigation of flag interpretation vs launcher execution layer.

- Created separate profile constants: VLC_MIRROR_MAC_PROFILE and
  VLC_MIRROR_LINUX_PROFILE in ae_launcher__default_launch_profiles.ts

- Updated TODO__Agents.md with Linux VLC issue for future debugging

Files: ae_launcher__default_launch_profiles.ts, documentation/TODO__Agents.md
This commit is contained in:
Scott Idem
2026-05-20 19:09:15 -04:00
parent 5bb06c4904
commit c0f828ec2c
3 changed files with 59 additions and 12 deletions

View File

@@ -335,7 +335,7 @@ tune it later without changing the profile table.
| `keynote_mac_extend` | `key` | Keynote | `extend` | `1000ms` | Keynote slideshow on the external display if available. Post-script polls `count of documents > 0` before starting — handles slow file load on cold start. |
| `libreoffice_mac_extend` | `odp` | LibreOffice for macOS | `extend` | `1000ms` | LibreOffice Impress for OpenDocument presentations. |
| `acrobat_mac_mirror` | `pdf` | Adobe Acrobat for macOS | `mirror` | `1000ms` | PDF handout / deck view uses mirrored display. |
| `vlc_mirror` | `mp4`, `mkv`, `mp3`, `m4v`, `m4a`, `webm`, `wav`, `aac`, `flac`, `mov`, `mpeg`, `avi`, `flv`, `ogg`, `ogv`, `wmv` | VLC for macOS | `mirror` | `1000ms` | Media playback is mirrored so the room sees the same output as the operator. |
| `vlc_mirror` | `mp4`, `mkv`, `mp3`, `m4v`, `m4a`, `webm`, `wav`, `aac`, `flac`, `mov`, `mpeg`, `avi`, `flv`, `ogg`, `ogv`, `wmv` | VLC for macOS | `mirror` | `1000ms` | Media playback is mirrored so the room sees the same output as the operator. Uses `--no-play-and-exit` so playback ends on the last frame instead of closing video output. |
| `powerpoint_win_extend` | `pptxwin`, `pptwin` | PowerPoint for Windows (Parallels) | `extend` | `1500ms` | Windows PowerPoint profile for Parallels-based rooms. Higher base delay to account for Parallels VM startup latency. |
| `libreoffice_win_extend` | `odpwin` | LibreOffice for Windows | `extend` | `1500ms` | Windows LibreOffice profile for Parallels-based rooms. |
| `acrobat_win_mirror` | `pdfwin` | Adobe Acrobat for Windows (Parallels) | `mirror` | `1500ms` | Windows PDF profile for mirrored display rooms. |

View File

@@ -142,10 +142,27 @@ below. The TTL + `verify_in_flight` guards are the current mitigation.
### ~~[IDAA] Server-side Novi verification — 503 not auto-retried~~ ✅ Fixed (2026-05-20)
Fixed in commit `42f40e990` — added `503` status check in `verify_novi_uuid()` before the
generic `!response.ok` throw. On first 503, waits 3s and auto-retries (same path as network
errors). After two consecutive 503s, surfaces "Verification Unavailable" as intended.
File: `src/routes/idaa/(idaa)/+layout.svelte`.
---
### [Launcher/VLC] Linux playback — fullscreen + pause-on-end not working
**Status:** Mac ✅ working perfectly; Linux 🚧 deferred for later investigation
**Date discovered:** 2026-05-20
macOS VLC profile (direct binary path) successfully:
- Opens VLC with the media file
- Plays + pauses on the last frame (instead of returning to playlist)
- Fullscreen toggle works (Cmd+F via AppleScript post-script)
Linux VLC command (`vlc --no-play-and-exit --play-and-pause "{{path}}"`) currently:
- Does NOT go fullscreen
- Does NOT pause on the last frame (plays through, returns to playlist)
**Current state:** Both macOS and Linux commands in `ae_launcher__default_launch_profiles.ts`.
macOS is the primary venue deployment platform; Linux support is nice-to-have.
**Investigation needed:** Determine if the VLC flags are being interpreted on Linux,
or if there's a launcher execution layer issue (e.g. `shell:` prefix handling).
File: `src/lib/ae_events/ae_launcher__default_launch_profiles.ts``make_vlc_mirror_linux_profile()`.
---

View File

@@ -52,15 +52,20 @@ export interface LaunchProfile {
// url?: string;
}
function make_vlc_mirror_profile(): LaunchProfile {
/**
* macOS VLC profile — uses direct binary path for max reliability.
* Bypasses `open -a` argument-handling quirks that could lose file path or re-use existing process.
*/
function make_vlc_mirror_mac_profile(): LaunchProfile {
return {
app: 'VLC',
app: 'VLC (macOS)',
display_mode: 'mirror',
open_cmd: 'open -a "VLC" "{{path}}"',
// Direct binary path ensures VLC receives media file + flags reliably.
// `--no-play-and-exit` prevents closing on end, `--play-and-pause` holds final frame.
open_cmd: '/Applications/VLC.app/Contents/MacOS/VLC --no-play-and-exit --play-and-pause "{{path}}"',
post_delay_ms: 1000,
// Poll until VLC is frontmost before sending Cmd+F. A fixed delay is unreliable because
// `open -a VLC` returns immediately (just fires an Apple Event) — VLC cold-start on a
// loaded conference Mac can take 3-5 seconds before the window is visible and interactive.
// VLC cold-start on a loaded conference Mac can take 3-5 seconds.
// Polling (15 × 0.5 s = up to 7.5 s after the initial wait) fires as soon as VLC is ready.
post_script: `tell application "VLC"
activate
@@ -80,6 +85,20 @@ end tell`
};
}
/**
* Linux VLC profile — uses shell command for compatibility.
*/
function make_vlc_mirror_linux_profile(): LaunchProfile {
return {
app: 'VLC (Linux)',
display_mode: 'mirror',
// shell: prefix runs as bash command. Same flags as macOS: `--no-play-and-exit` keeps window open, `--play-and-pause` holds final frame.
open_cmd: 'shell:vlc --no-play-and-exit --play-and-pause "{{path}}"',
post_delay_ms: 1000
// No post_script on Linux — VLC opens fullscreen by default, no need to send F.
};
}
const POWERPOINT_MAC_EXTEND_PROFILE: LaunchProfile = {
app: 'Microsoft PowerPoint',
display_mode: 'extend',
@@ -168,7 +187,8 @@ tell application "System Events"
end tell`
};
const VLC_MIRROR_PROFILE: LaunchProfile = make_vlc_mirror_profile();
const VLC_MIRROR_MAC_PROFILE: LaunchProfile = make_vlc_mirror_mac_profile();
const VLC_MIRROR_LINUX_PROFILE: LaunchProfile = make_vlc_mirror_linux_profile();
const POWERPOINT_WIN_EXTEND_PROFILE: LaunchProfile = {
app: 'Microsoft Office PowerPoint (Windows)',
@@ -272,10 +292,20 @@ export const DEFAULT_LAUNCH_PROFILE_DEFS: DefaultLaunchProfileDefinition[] = [
aliases: ['pdf'],
profile: ACROBAT_MAC_MIRROR_PROFILE
},
{
name: 'vlc_mirror_mac',
aliases: [],
profile: VLC_MIRROR_MAC_PROFILE
},
{
name: 'vlc_mirror_linux',
aliases: [],
profile: VLC_MIRROR_LINUX_PROFILE
},
{
name: 'vlc_mirror',
aliases: ['mp4', 'mkv', 'mov', 'mpeg', 'avi', 'flv', 'ogg', 'ogv', 'mp3', 'm4v', 'm4a', 'webm', 'wmv', 'wav', 'aac', 'flac'],
profile: VLC_MIRROR_PROFILE
profile: VLC_MIRROR_MAC_PROFILE // Default to macOS (primary deployment platform)
},
{
name: 'powerpoint_win_extend',