diff --git a/res/sshelper/index.html b/res/sshelper/index.html index 23b27ec..f9f63c1 100644 --- a/res/sshelper/index.html +++ b/res/sshelper/index.html @@ -39,25 +39,22 @@ diff --git a/src-slider_io/src/bin/test_brokenithm.rs b/src-slider_io/src/bin/test_brokenithm.rs index dbb7028..264ef22 100644 --- a/src-slider_io/src/bin/test_brokenithm.rs +++ b/src-slider_io/src/bin/test_brokenithm.rs @@ -18,7 +18,7 @@ async fn main() { let _worker = AsyncHaltableWorker::new( "brokenithm", - BrokenithmJob::new(&state, &BrokenithmSpec::Nostalgia, &false), + BrokenithmJob::new(&state, &BrokenithmSpec::Nostalgia, &false, &1606), ); let mut input = String::new(); io::stdin().read_line(&mut input).unwrap(); diff --git a/src-slider_io/src/config.rs b/src-slider_io/src/config.rs index 27dfa34..8982f7d 100644 --- a/src-slider_io/src/config.rs +++ b/src-slider_io/src/config.rs @@ -35,6 +35,7 @@ impl Config { "disableAirStrings": false, "divaSerialPort": "COM1", "divaBrightness": 63, + "brokenithmPort": 1606, "keyboardSensitivity": 20, "outputPolling": "100", "outputWebsocketUrl": "localhost:3000", diff --git a/src-slider_io/src/context.rs b/src-slider_io/src/context.rs index fd5f32f..1ba2419 100644 --- a/src-slider_io/src/context.rs +++ b/src-slider_io/src/context.rs @@ -42,12 +42,13 @@ impl Context { DeviceMode::Brokenithm { spec, lights_enabled, + port, } => ( None, None, Some(AsyncHaltableWorker::new( "brokenithm", - BrokenithmJob::new(&state, spec, lights_enabled), + BrokenithmJob::new(&state, spec, lights_enabled, port), )), ), DeviceMode::Hardware { spec, disable_air } => ( diff --git a/src-slider_io/src/device/brokenithm.rs b/src-slider_io/src/device/brokenithm.rs index 3d22220..91f5c28 100644 --- a/src-slider_io/src/device/brokenithm.rs +++ b/src-slider_io/src/device/brokenithm.rs @@ -268,14 +268,21 @@ pub struct BrokenithmJob { state: SliderState, spec: BrokenithmSpec, lights_enabled: bool, + port: u16, } impl BrokenithmJob { - pub fn new(state: &SliderState, spec: &BrokenithmSpec, lights_enabled: &bool) -> Self { + pub fn new( + state: &SliderState, + spec: &BrokenithmSpec, + lights_enabled: &bool, + port: &u16, + ) -> Self { Self { state: state.clone(), spec: spec.clone(), lights_enabled: *lights_enabled, + port: *port, } } } @@ -299,7 +306,7 @@ impl AsyncHaltableJob for BrokenithmJob { } }); - let addr = SocketAddr::from(([0, 0, 0, 0], 1606)); + let addr = SocketAddr::from(([0, 0, 0, 0], self.port)); info!("Brokenithm server listening on {}", addr); let server = Server::bind(&addr) diff --git a/src-slider_io/src/device/config.rs b/src-slider_io/src/device/config.rs index 060fd6e..af3cfbf 100644 --- a/src-slider_io/src/device/config.rs +++ b/src-slider_io/src/device/config.rs @@ -25,6 +25,7 @@ pub enum DeviceMode { Brokenithm { spec: BrokenithmSpec, lights_enabled: bool, + port: u16, }, DivaSlider { port: String, @@ -62,6 +63,9 @@ impl DeviceMode { true => BrokenithmSpec::GroundOnly, }, lights_enabled: false, + port: u16::try_from(v["brokenithmPort"].as_i64()?) + .ok() + .or(Some(1606))?, }, "brokenithm-led" => DeviceMode::Brokenithm { spec: match v["disableAirStrings"].as_bool()? { @@ -69,12 +73,25 @@ impl DeviceMode { true => BrokenithmSpec::GroundOnly, }, lights_enabled: true, + port: u16::try_from(v["brokenithmPort"].as_i64()?) + .ok() + .or(Some(1606))?, }, "brokenithm-nostalgia" => DeviceMode::Brokenithm { spec: BrokenithmSpec::Nostalgia, lights_enabled: false, + port: u16::try_from(v["brokenithmPort"].as_i64()?) + .ok() + .or(Some(1606))?, }, _ => return None, }) } + + pub fn get_port(&self) -> Option { + match self { + DeviceMode::Brokenithm { port, .. } => Some(*port), + _ => None, + } + } } diff --git a/src-slider_io/src/system.rs b/src-slider_io/src/system.rs index 83c5626..e9e2012 100644 --- a/src-slider_io/src/system.rs +++ b/src-slider_io/src/system.rs @@ -1,5 +1,6 @@ use directories::ProjectDirs; use image::Luma; +use log::info; use qrcode::QrCode; use std::{error::Error, fs, path::PathBuf}; @@ -25,7 +26,7 @@ fn get_config_dir() -> Option> { } /// Generates a helper QR for connecting with brokenithm -pub fn get_brokenithm_qr_path() -> Option> { +pub fn get_brokenithm_qr_path(port: Option) -> Option> { let config_dir = get_config_dir()?; let brokenithm_qr_path = config_dir.join("brokenithm.png"); @@ -36,7 +37,10 @@ pub fn get_brokenithm_qr_path() -> Option> { .filter(|s| s.as_str().chars().filter(|x| *x == '.').count() == 3) .map(|s| base64::encode_config(s, base64::URL_SAFE_NO_PAD)) .collect::>() - .join(";"); + .join(";") + + "&p=" + + port.or(Some(1606)).unwrap().to_string().as_str(); + info!("Url generated {}", link); let qr = QrCode::new(link).ok()?; let image = qr.render::>().build(); image.save(brokenithm_qr_path.as_path()).ok()?; diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 3981a13..0f89e41 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -110,8 +110,15 @@ fn main() { }); // Show brokenithm qr - app.listen_global("openBrokenithmQr", |_| { - let brokenithm_qr_path = slider_io::get_brokenithm_qr_path(); + let config_clone = Arc::clone(&config); + app.listen_global("openBrokenithmQr", move |_| { + let config_handle = config_clone.lock(); + let brokenithm_qr_path = slider_io::get_brokenithm_qr_path( + config_handle + .as_ref() + .map(|c| c.device_mode.get_port()) + .unwrap_or(None), + ); if let Some(brokenithm_qr_path) = brokenithm_qr_path { open::that(brokenithm_qr_path.as_path()).ok(); } diff --git a/src/App.svelte b/src/App.svelte index bd19af1..808369e 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -13,6 +13,7 @@ let disableAirStrings = false; let divaSerialPort = "COM1"; let divaBrightness = 63; + let brokenithmPort = 1606; let keyboardSensitivity = 20; let outputPolling = "100"; let outputWebsocketUrl = "http://localhost:3000"; @@ -65,6 +66,7 @@ disableAirStrings = payload.disableAirStrings || false; divaSerialPort = payload.divaSerialPort || "COM1"; divaBrightness = payload.divaBrightness || 63; + brokenithmPort = payload.brokenithmPort || 1606; keyboardSensitivity = payload.keyboardSensitivity || 20; outputPolling = payload.outputPolling || "100"; outputWebsocketUrl = @@ -119,6 +121,7 @@ disableAirStrings, divaSerialPort, divaBrightness, + brokenithmPort, keyboardSensitivity, outputPolling, outputWebsocketUrl, @@ -207,14 +210,27 @@ {/if} {#if deviceMode.slice(0, 10) === "brokenithm"} +
+
Brokenithm Port
+
+ +
+
- Brokenithm server running, access at one of: + Brokenithm will be running at one of:
{ips - .map((x) => `http://${x}:1606/`) + .map((x) => `http://${x}:${brokenithmPort || 1606}/`) .join("\n") .trim()}