diff --git a/src-slider_io/src/config.rs b/src-slider_io/src/config.rs index 92e1558..ab77f5b 100644 --- a/src-slider_io/src/config.rs +++ b/src-slider_io/src/config.rs @@ -1,22 +1,10 @@ -use directories::ProjectDirs; -use image::Luma; use log::{info, warn}; -use qrcode::QrCode; use serde_json::Value; -use std::{error::Error, fs, path::PathBuf}; +use std::fs; -use crate::{device::config::DeviceMode, lighting::config::LedMode, output::config::OutputMode}; - -pub fn list_ips() -> Result, Box> { - let mut ips = vec![]; - for adapter in ipconfig::get_adapters()? { - for ip_address in adapter.ip_addresses() { - ips.push(format!("{}", ip_address)); - } - } - - Ok(ips) -} +use crate::{ + input::config::DeviceMode, lighting::config::LedMode, output::config::OutputMode, system, +}; #[derive(Debug, Clone)] pub struct Config { @@ -38,48 +26,6 @@ impl Config { }) } - pub fn get_log_file_path() -> Option> { - let project_dir = ProjectDirs::from("me", "impress labs", "slidershim").unwrap(); - let config_dir = project_dir.config_dir(); - fs::create_dir_all(config_dir).ok()?; - - let log_path = config_dir.join("log.txt"); - - return Some(Box::new(log_path)); - } - - pub fn get_brokenithm_qr_path() -> Option> { - let project_dir = ProjectDirs::from("me", "impress labs", "slidershim").unwrap(); - let config_dir = project_dir.config_dir(); - fs::create_dir_all(config_dir).ok()?; - - let brokenithm_qr_path = config_dir.join("brokenithm.png"); - - let ips = list_ips().ok()?; - let link = "http://imp.ress.me/t/sshelper?d=".to_string() - + &ips - .into_iter() - .filter(|s| s.as_str().chars().filter(|x| *x == '.').count() == 3) - .map(|s| base64::encode_config(s, base64::URL_SAFE_NO_PAD)) - .collect::>() - .join(";"); - let qr = QrCode::new(link).ok()?; - let image = qr.render::>().build(); - image.save(brokenithm_qr_path.as_path()).ok()?; - - return Some(Box::new(brokenithm_qr_path)); - } - - fn get_config_path() -> Option> { - let project_dir = ProjectDirs::from("me", "impress labs", "slidershim").unwrap(); - let config_dir = project_dir.config_dir(); - fs::create_dir_all(config_dir).ok()?; - - let config_path = config_dir.join("config.json"); - - return Some(Box::new(config_path)); - } - fn default() -> Self { Self::from_str( r#"{ @@ -99,7 +45,7 @@ impl Config { } fn load_saved() -> Option { - let config_path = Self::get_config_path()?; + let config_path = system::get_config_path()?; if !config_path.exists() { return None; } @@ -119,7 +65,7 @@ impl Config { pub fn save(&self) -> Option<()> { info!("Config saving..."); - let config_path = Self::get_config_path()?; + let config_path = system::get_config_path()?; info!("Config saving to {:?}", config_path); fs::write(config_path.as_path(), self.raw.as_str()).unwrap(); info!("Config saved"); diff --git a/src-slider_io/src/context.rs b/src-slider_io/src/context.rs index 75c6aa9..2d6e6a4 100644 --- a/src-slider_io/src/context.rs +++ b/src-slider_io/src/context.rs @@ -4,8 +4,8 @@ use std::sync::{atomic::Ordering, Arc}; use crate::{ config::Config, - device::{brokenithm::BrokenithmJob, config::DeviceMode, device::HidDeviceJob}, - lighting::{config::LedMode, led::LedJob}, + input::{brokenithm::BrokenithmJob, config::DeviceMode, device::HidDeviceJob}, + lighting::{config::LedMode, lighting::LedJob}, output::{config::OutputMode, output::OutputJob}, shared::{ utils::LoopTimer, diff --git a/src-slider_io/src/device/acio.rs b/src-slider_io/src/input/acio.rs similarity index 100% rename from src-slider_io/src/device/acio.rs rename to src-slider_io/src/input/acio.rs diff --git a/src-slider_io/src/device/brokenithm-www/app.js b/src-slider_io/src/input/brokenithm-www/app.js similarity index 100% rename from src-slider_io/src/device/brokenithm-www/app.js rename to src-slider_io/src/input/brokenithm-www/app.js diff --git a/src-slider_io/src/device/brokenithm-www/config.js b/src-slider_io/src/input/brokenithm-www/config.js similarity index 100% rename from src-slider_io/src/device/brokenithm-www/config.js rename to src-slider_io/src/input/brokenithm-www/config.js diff --git a/src-slider_io/src/device/brokenithm-www/favicon.ico b/src-slider_io/src/input/brokenithm-www/favicon.ico similarity index 100% rename from src-slider_io/src/device/brokenithm-www/favicon.ico rename to src-slider_io/src/input/brokenithm-www/favicon.ico diff --git a/src-slider_io/src/device/brokenithm-www/icon.png b/src-slider_io/src/input/brokenithm-www/icon.png similarity index 100% rename from src-slider_io/src/device/brokenithm-www/icon.png rename to src-slider_io/src/input/brokenithm-www/icon.png diff --git a/src-slider_io/src/device/brokenithm-www/index-go.html b/src-slider_io/src/input/brokenithm-www/index-go.html similarity index 100% rename from src-slider_io/src/device/brokenithm-www/index-go.html rename to src-slider_io/src/input/brokenithm-www/index-go.html diff --git a/src-slider_io/src/device/brokenithm-www/index.html b/src-slider_io/src/input/brokenithm-www/index.html similarity index 100% rename from src-slider_io/src/device/brokenithm-www/index.html rename to src-slider_io/src/input/brokenithm-www/index.html diff --git a/src-slider_io/src/device/brokenithm-www/src.js b/src-slider_io/src/input/brokenithm-www/src.js similarity index 100% rename from src-slider_io/src/device/brokenithm-www/src.js rename to src-slider_io/src/input/brokenithm-www/src.js diff --git a/src-slider_io/src/device/brokenithm.rs b/src-slider_io/src/input/brokenithm.rs similarity index 100% rename from src-slider_io/src/device/brokenithm.rs rename to src-slider_io/src/input/brokenithm.rs diff --git a/src-slider_io/src/device/config.rs b/src-slider_io/src/input/config.rs similarity index 100% rename from src-slider_io/src/device/config.rs rename to src-slider_io/src/input/config.rs diff --git a/src-slider_io/src/device/device.rs b/src-slider_io/src/input/device.rs similarity index 100% rename from src-slider_io/src/device/device.rs rename to src-slider_io/src/input/device.rs diff --git a/src-slider_io/src/device/mod.rs b/src-slider_io/src/input/mod.rs similarity index 100% rename from src-slider_io/src/device/mod.rs rename to src-slider_io/src/input/mod.rs diff --git a/src-slider_io/src/lib.rs b/src-slider_io/src/lib.rs index 184334f..32915f2 100644 --- a/src-slider_io/src/lib.rs +++ b/src-slider_io/src/lib.rs @@ -9,12 +9,15 @@ mod config; mod shared; mod state; -mod device; +mod input; mod lighting; mod output; +mod system; + mod context; mod manager; -pub use config::{list_ips, Config}; +pub use config::Config; pub use manager::Manager; +pub use system::{get_brokenithm_qr_path, get_log_file_path, list_ips}; diff --git a/src-slider_io/src/lighting/led.rs b/src-slider_io/src/lighting/lighting.rs similarity index 100% rename from src-slider_io/src/lighting/led.rs rename to src-slider_io/src/lighting/lighting.rs diff --git a/src-slider_io/src/lighting/mod.rs b/src-slider_io/src/lighting/mod.rs index 36cecb2..e894cdf 100644 --- a/src-slider_io/src/lighting/mod.rs +++ b/src-slider_io/src/lighting/mod.rs @@ -1,3 +1,3 @@ pub mod config; -pub mod led; +pub mod lighting; diff --git a/src-slider_io/src/system.rs b/src-slider_io/src/system.rs new file mode 100644 index 0000000..83c5626 --- /dev/null +++ b/src-slider_io/src/system.rs @@ -0,0 +1,59 @@ +use directories::ProjectDirs; +use image::Luma; +use qrcode::QrCode; +use std::{error::Error, fs, path::PathBuf}; + +pub fn list_ips() -> Result, Box> { + let mut ips = vec![]; + for adapter in ipconfig::get_adapters()? { + for ip_address in adapter.ip_addresses() { + ips.push(format!("{}", ip_address)); + } + } + + Ok(ips) +} + +/// Get the %APPDATA% path for config files (and create if it does not already +/// exist). +fn get_config_dir() -> Option> { + let project_dir = ProjectDirs::from("me", "impress labs", "slidershim").unwrap(); + let config_dir = project_dir.config_dir(); + fs::create_dir_all(config_dir).ok()?; + + Some(Box::new(config_dir.to_path_buf())) +} + +/// Generates a helper QR for connecting with brokenithm +pub fn get_brokenithm_qr_path() -> Option> { + let config_dir = get_config_dir()?; + let brokenithm_qr_path = config_dir.join("brokenithm.png"); + + let ips = list_ips().ok()?; + let link = "http://imp.ress.me/t/sshelper?d=".to_string() + + &ips + .into_iter() + .filter(|s| s.as_str().chars().filter(|x| *x == '.').count() == 3) + .map(|s| base64::encode_config(s, base64::URL_SAFE_NO_PAD)) + .collect::>() + .join(";"); + let qr = QrCode::new(link).ok()?; + let image = qr.render::>().build(); + image.save(brokenithm_qr_path.as_path()).ok()?; + + return Some(Box::new(brokenithm_qr_path)); +} + +pub fn get_log_file_path() -> Option> { + let config_dir = get_config_dir()?; + let log_path = config_dir.join("log.txt"); + + return Some(Box::new(log_path)); +} + +pub fn get_config_path() -> Option> { + let config_dir = get_config_dir()?; + let config_path = config_dir.join("config.json"); + + return Some(Box::new(config_path)); +} diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index ea02110..e673e8c 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -102,7 +102,7 @@ fn main() { // Show logs app.listen_global("openLogfile", |_| { - let log_file_path = slider_io::Config::get_log_file_path(); + let log_file_path = slider_io::get_log_file_path(); if let Some(log_file_path) = log_file_path { open::that(log_file_path.as_path()).ok(); } @@ -110,7 +110,7 @@ fn main() { // Show brokenithm qr app.listen_global("openBrokenithmQr", |_| { - let brokenithm_qr_path = slider_io::Config::get_brokenithm_qr_path(); + let brokenithm_qr_path = slider_io::get_brokenithm_qr_path(); if let Some(brokenithm_qr_path) = brokenithm_qr_path { open::that(brokenithm_qr_path.as_path()).ok(); }