Commit graph

8 commits

Author SHA1 Message Date
spearzificial
5988785d57 fix(cli): dispatch from argv[0] so daemon symlinks work; harden e2e run
Multicall dispatch used std::env::current_exe(), which reads /proc/self/exe
and resolves symlinks. Every installed alias therefore reported the stem
"scythe", so scythe-daemon and vrec-daemon fell through to client mode and
opened the HUD instead of starting the engine. The aliases shipped by
install.sh, the deb/rpm/flatpak packages and the Hyprland exec_cmd line were
all affected; a stale pre-consolidation target/release/scythe-daemon masked
it during local testing.

invoked_stem() now reads argv[0] and only falls back to current_exe() when
argv[0] has no usable stem. Verified against a packaged tarball: both daemon
aliases hit the running-instance guard while scythe, scythe-ui, vrec and
vrec-ui open the client.

The e2e guard also probed liveness with `scythe --status`, which calls
ensure_daemon_running() and so spawned a daemon while probing, then chased
its own tail. It now connects to the socket directly, records the running
daemon's command line and working directory, stops it gracefully, and
restores it on exit so a developer's recorder survives a test run.

Help text now reports the unified binary and marks --gtk as a deprecated
alias, since the GTK backend was retired.
2026-10-20 16:55:33 +05:30
spearzificial
6c9b8a8d82 feat(ipc): implement ShowOverlay and drop settings that never worked
ShowOverlay was declared in the Command enum but the daemon dispatcher had
no arm for it, so it fell through to `_ => {}`. Nothing could open the HUD
once it was closed except the --menu toggle path.

- daemon: spawn_overlay_once() checks the overlay pid file for a live
  process and launches `scythe --menu` only when none is running, so
  repeated requests cannot stack overlays
- cli: `scythe --show-overlay` sends the command, falling back to a direct
  launch when the daemon is unreachable

Fourteen config keys were persisted and shown in the settings UI while no
capture, encoder, muxer or daemon path ever read them. Removed from
ScytheConfig, from the overlay state, and from their UI panels:
capture_source, replay_storage, change_resolution, resolution_w/h,
container_format, show_scroll_lock_led, autostart_on_game,
save_folder_by_game, name_by_game, language, ui_color_theme, record_enabled.
Unknown JSON keys are ignored by serde, so existing configs still load.

The e2e script also unlinked a live daemon's socket: it ran rm -f on the
socket path unconditionally and only stopped the systemd unit, so a daemon
started by execs.lua or by hand kept its flock while losing its path entry,
leaving the session broken until the process died. It now sends StopDaemon,
waits for the socket to disappear, and aborts without unlinking if the
daemon will not stop.
2026-10-20 16:33:41 +05:30
3cc718fa69 feat(arch): consolidate daemon and UI into singular multicall binary scythe 2026-10-11 14:28:14 +05:30
f41b827b41 feat(ui): screenshot resolution presets, low-end hardware optimizations, and all 8 keybind tests 2026-10-09 07:47:38 +05:30
4d28bb7ed5 feat(ui): complete overhaul of settings modal and notification engine 2026-10-04 12:15:58 +05:30
8ed53faefd rebrand: rename project and components to scythe 2026-09-05 15:21:30 +05:30
df9a1a0522 perf(core): Implement pure VRAM zero-copy for Windows, MIT-SHM for X11, High-Quality VBR rate control, and output directory management 2026-09-03 07:55:01 +05:30
20a8c2f53e test: Add end-to-end automated testing suite and headless display fallback 2026-09-03 06:50:29 +05:30