5c39662cc2
A gtkmm-4.0 control panel (behind -Dgui=true, default off): refresh shows discovered receivers (grouped and preference-sorted), a bitrate scale, and start/stop that runs the whole session on a worker thread so the interactive portal picker never blocks the UI. The CLI and the GUI now share the new sc_app_core static library holding the pipelines, session orchestration (negotiation + PLI feedback), and a state store. The sender pipeline publishes its state to $XDG_RUNTIME_DIR/screencast/sender.json (session id, receiver, bitrate, pid, start time; stale files detected by pid liveness) and persists the last session for one-click restarts. The new 'screencast waybar' subcommand prints a waybar module line and its --toggle flag stops a running sender gracefully or spawns a detached restart of the last receiver. Waybar on the dev machine is wired: custom/screencast module with click-to-toggle and right-click panel, plus styles, with a timestamped backup of both config files. Both binaries are installed to /usr/local/bin. Validated: waybar output (idle and streaming states with a synthetic state file), GUI launches on the desktop (window observed via hyprctl), meson test 5/5 in both build configurations, formatting clean.
40 lines
1.1 KiB
C++
40 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <cstdint>
|
|
#include <optional>
|
|
#include <string_view>
|
|
#include <variant>
|
|
|
|
namespace sc {
|
|
|
|
struct SendCommand {
|
|
std::string_view target = "monitor"; // monitor, window
|
|
std::string_view peer_address; // optional; empty means auto-discover
|
|
int bitrate_kbps = 4000;
|
|
};
|
|
|
|
struct ReceiveCommand {
|
|
std::string_view peer_address; // optional, informational
|
|
int local_rtp_port = 5004;
|
|
int signaling_port = 5005;
|
|
bool fullscreen = false;
|
|
bool software_decode = false; // --swdecode disables the hardware probe
|
|
};
|
|
|
|
struct DiscoverCommand {
|
|
int timeout_seconds = 3;
|
|
};
|
|
|
|
struct WaybarCommand {
|
|
bool toggle = false; // toggle streaming instead of printing status
|
|
};
|
|
|
|
using Command = std::variant<SendCommand, ReceiveCommand, DiscoverCommand, WaybarCommand>;
|
|
|
|
// Parse command line arguments. Prints usage and returns std::nullopt on error.
|
|
// `argv` is `char const* const*` so both `main`'s `char**` and const arrays
|
|
// convert implicitly.
|
|
std::optional<Command> parse_cli(int argc, const char* const argv[]);
|
|
|
|
} // namespace sc
|