From 7d32f05f6123dc12ab099cf337f9abe137750e43 Mon Sep 17 00:00:00 2001 From: Sakarias Johansson Date: Tue, 14 Mar 2023 15:39:45 +0100 Subject: =?UTF-8?q?=F0=9F=A7=B9=20Misc=20cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Was pointless to have one event for render and one for cancel. Reduced it to one while fixing a minor bug. - Remove useless dereference and borrow. Not sure how it ended up like that. - Moved around some code. --- racer-tracer/src/image_action.rs | 96 ++++------------------------------------ 1 file changed, 8 insertions(+), 88 deletions(-) (limited to 'racer-tracer/src/image_action.rs') diff --git a/racer-tracer/src/image_action.rs b/racer-tracer/src/image_action.rs index 825c506..d6d212c 100644 --- a/racer-tracer/src/image_action.rs +++ b/racer-tracer/src/image_action.rs @@ -1,8 +1,12 @@ -use std::{path::PathBuf, sync::RwLock}; +pub mod png; +pub mod wait_for_signal; + +use std::sync::RwLock; -use sha2::{Digest, Sha256}; use synchronoise::SignalEvent; +use crate::image_action::{png::SavePng, wait_for_signal::WaitForSignal}; + use crate::{ config::{Config, ImageAction as CImageAction}, error::TracerError, @@ -20,92 +24,8 @@ pub trait ImageAction: Send + Sync { impl From<&CImageAction> for Box { fn from(image_action: &CImageAction) -> Self { match image_action { - CImageAction::WaitForSignal => Box::new(WaitForSignal::new()), - CImageAction::SavePng => Box::new(SavePng::new()), + CImageAction::WaitForSignal => Box::new(WaitForSignal {}), + CImageAction::SavePng => Box::new(SavePng {}), } } } - -pub struct SavePng {} - -impl SavePng { - pub fn new() -> Self { - Self {} - } -} - -impl ImageAction for SavePng { - fn action( - &self, - screen_buffer: &RwLock>, - _event: &SignalEvent, - config: &Config, - ) -> Result<(), TracerError> { - screen_buffer - .read() - .map_err(|e| TracerError::FailedToAcquireLock(e.to_string())) - .map(|buf| { - // Convert ARGB8 to RGBA8 - buf.iter() - .map(|v| { - let a: u32 = (v >> 24) & 0xff; - let r: u32 = (v >> 16) & 0xff; - let g: u32 = (v >> 8) & 0xff; - let b: u32 = v & 0xff; - - (r << 24) | (g << 16) | (b << 8) | a - }) - .flat_map(|val| val.to_be_bytes()) - .collect::>() - }) - .and_then(|buf| match &config.image_output_dir { - Some(image_dir) => { - println!("Saving image..."); - let mut sha = Sha256::new(); - - sha.update(buf.as_slice()); - - let mut file_path = PathBuf::from(image_dir); - file_path.push(format!("{:X}.png", sha.finalize())); - - img::save_buffer( - file_path.as_path(), - buf.as_slice(), - config.screen.width as u32, - config.screen.height as u32, - img::ColorType::Rgba8, - ) - .map_err(|e| { - let error = e.to_string(); - TracerError::ImageSave(error) - }) - .map(|_| { - println!("Saved image to: {}", file_path.to_string_lossy()); - }) - } - None => Ok(()), - }) - } -} - -pub struct WaitForSignal {} - -impl WaitForSignal { - pub fn new() -> Self { - Self {} - } -} - -impl ImageAction for WaitForSignal { - fn action( - &self, - _screen_buffer: &RwLock>, - event: &SignalEvent, - _config: &Config, - ) -> Result<(), TracerError> { - println!("Press R to resume."); - event.wait(); - event.reset(); - Ok(()) - } -} -- cgit v1.2.3