Files
SubMiner/backlog/tasks/task-356 - Close-launcher-started-background-app-when-mpv-exits.md
T
sudacode 7c9b65db8b feat: inject bundled mpv plugin for managed launches, remove legacy glob (#62)
* feat: inject bundled mpv plugin for managed launches, remove legacy glob

- SubMiner-managed launcher and Windows shortcut launches inject the bundled plugin when no global plugin is detected
- First-run setup detects and removes legacy global plugin files via OS trash before managed playback starts
- Makefile `install-plugin` target and Windows config-rewrite script removed; Linux/macOS install now copies plugin to app data dir
- AniList stats search and post-watch tracking now go through the shared rate limiter
- Stats cover-art lookup reuses cached AniList data before issuing a new request
- Closing mpv in a launcher-managed session now terminates the background Electron app

* harden bootstrap version load and clean plugin on uninstall

- Use pcall for version.lua in bootstrap.lua so missing version module does not crash plugin startup
- Remove plugin/subminer from app-data dirs in uninstall-linux and uninstall-macos targets
- Add Lua compat test asserting bootstrap uses defensive pcall for version load
- Add release-workflow test asserting uninstall targets clean bundled plugin dirs
- Delete completed planning document
2026-05-12 23:11:19 -07:00

2.9 KiB

id, title, status, assignee, created_date, updated_date, labels, dependencies, priority
id title status assignee created_date updated_date labels dependencies priority
TASK-356 Close launcher-started background app when mpv exits Done
codex
2026-05-13 01:37 2026-05-13 01:40
bug
launcher
mpv
medium

Description

When SubMiner is started through the launcher-managed mpv flow, closing the mpv window should also close the background Electron app instead of leaving it running in the tray. Preserve intentional tray/background behavior for normal app startup.

Acceptance Criteria

  • #1 Launcher-managed mpv sessions signal or otherwise cause the spawned background app to quit when the mpv process exits.
  • #2 Normal background/tray startup remains available when SubMiner is launched without a launcher-managed playback session.
  • #3 A regression test covers the launcher mpv close/shutdown behavior.

Implementation Plan

  1. Add a launcher command regression test for mpv plugin auto-start playback: no direct startOverlay call, mpv exits, launcher marks the session as managed and runs cleanup.
  2. Add a small launcher mpv lifecycle helper to mark a SubMiner app session as launcher-managed when the launcher relies on plugin auto-start.
  3. Wire playback-command to call that helper only for launcher-managed playback paths where mpv plugin auto-start is expected.
  4. Run the focused launcher tests, then update TASK-356 acceptance criteria/notes.

Implementation Notes

Implemented launcher ownership marking for plugin-auto-start playback sessions. Direct startOverlay already marks launcher ownership; the plugin-auto-start branch now does the same before waiting for mpv exit, so existing cleanup sends the app --stop when mpv closes. Added regression coverage in launcher/commands/playback-command.test.ts. Verification: bun test launcher/commands/playback-command.test.ts; bun test launcher/mpv.test.ts launcher/commands/playback-command.test.ts; bun run test:launcher:src; bun run typecheck. Typecheck initially caught a nullable test fixture assignment and passed after fixing it.

Final Summary

Summary:

  • Added markOverlayManagedByLauncher() to centralize launcher ownership tracking for SubMiner app sessions.
  • Mark plugin-auto-start playback sessions as launcher-managed, so closing mpv triggers existing cleanup and stops the background app instead of leaving it in the tray.
  • Added a regression test covering mpv exit after launcher-managed plugin auto-start playback.

Tests:

  • bun test launcher/commands/playback-command.test.ts
  • bun test launcher/mpv.test.ts launcher/commands/playback-command.test.ts
  • bun run test:launcher:src
  • bun run typecheck