aboutsummaryrefslogtreecommitdiffstats
path: root/crates/asist-core/src/config.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/asist-core/src/config.rs')
-rw-r--r--crates/asist-core/src/config.rs49
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('/') {