/* Hurry Curry! - a game about cooking Copyright (C) 2025 Hurry Curry! Contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ use crate::replay::replay; use anyhow::Result; use log::info; use std::path::Path; use tokio::{net::TcpListener, process::Command}; pub async fn render( input: &Path, output: &Path, framerate: usize, headless: bool, rendering_driver: &str, video_driver: &str, headless_compositor: &str, ) -> Result<()> { let port = 27090; let ws_listener = TcpListener::bind(("127.0.0.1", port)).await?; let mut args = Vec::new(); if headless { args.push("wlheadless-run"); args.extend(["-c", headless_compositor]); args.push("--"); } if headless && video_driver == "x11" { args.push("xwayland-run"); args.push("--"); } args.push("hurrycurry-client"); if headless { args.extend(["--video-driver", video_driver]); args.extend(["--rendering-driver", rendering_driver]); } args.extend(["--write-movie", output.to_str().unwrap()]); let fps = framerate.to_string(); args.extend(["--fixed-fps", &fps]); args.push("--print-fps"); args.push("--"); let uri = format!("ws://127.0.0.1:{port}"); args.push(&uri); info!("using commandline {:?}", args.join(" ")); let mut client = Command::new(args[0]).args(&args[1..]).spawn()?; info!("listening for websockets on {}", ws_listener.local_addr()?); replay(&ws_listener, &input).await?; client.wait().await?.exit_ok()?; Ok(()) }