diff options
Diffstat (limited to 'crates/asist-core/src/config.rs')
| -rw-r--r-- | crates/asist-core/src/config.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/crates/asist-core/src/config.rs b/crates/asist-core/src/config.rs index 792ad3f..c2a9d55 100644 --- a/crates/asist-core/src/config.rs +++ b/crates/asist-core/src/config.rs @@ -19,6 +19,7 @@ pub struct Config { pub tools: ToolsConfig, pub search: SearchConfig, pub camera: CameraConfig, + pub screen: ScreenConfig, pub supervisor: SupervisorConfig, } @@ -430,6 +431,48 @@ impl Default for CameraConfig { } } +/// Mirar la pantalla. +#[derive(Debug, Clone, Serialize, Deserialize)] +#[serde(default, deny_unknown_fields)] +pub struct ScreenConfig { + pub enabled: bool, + /// Programa de captura. `{ancho}` y `{salida}` se sustituyen antes de + /// ejecutar, y tiene que escribir un JPEG por la salida estándar. Está + /// fuera del binario para que añadir un compositor sea editar un guion. + pub command: Vec<String>, + /// Ancho al que se reduce la captura antes de mandarla al modelo. + /// + /// **No lo bajes a la ligera.** Medido con tipografía de interfaz de 13 px + /// y preguntando por datos concretos: a 1280 px acierta 3 de 3 en 7,6 s; a + /// 960, 2 de 3; a 640, 1 de 3. Y cuando falla no dice que no lo lee: se + /// inventa el contenido con aplomo. + pub width: u32, + /// Monitor concreto. Vacío = todo lo que haya. + pub output: String, + pub timeout_secs: u64, + /// Carpeta donde guardar las capturas. Vacío = no se guarda ninguna, que + /// es lo que corresponde: en una captura caben contraseñas y mensajes + /// privados. + pub save_dir: String, +} + +impl Default for ScreenConfig { + fn default() -> Self { + Self { + enabled: true, + command: vec![ + "scripts/capturar-pantalla.sh".into(), + "{ancho}".into(), + "{salida}".into(), + ], + width: 1280, + output: String::new(), + timeout_secs: 20, + save_dir: String::new(), + } + } +} + #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(default, deny_unknown_fields)] pub struct SupervisorConfig { @@ -569,6 +612,12 @@ impl Config { fix(&mut self.supervisor.tts.binary); fix(&mut self.supervisor.tts.model); fix(&mut self.supervisor.tts.codec); + if let Some(program) = self.screen.command.first_mut() { + let path = PathBuf::from(&*program); + if path.is_relative() && program.contains('/') { + *program = base.join(path).to_string_lossy().into_owned(); + } + } if let Some(program) = self.search.command.first_mut() { let path = PathBuf::from(&*program); if path.is_relative() && program.contains('/') { |