This commit is contained in:
2025-06-21 14:34:44 +02:00
parent 7b7ebb8c0e
commit 470089ae5b
15 changed files with 334 additions and 27 deletions

View File

@@ -70,9 +70,26 @@ impl Message {
let row: usize = parts[4].parse::<usize>().address_part_result("row")? - 1; // Convert to 0-based
if let Some(rosc::OscType::String(state_str)) = args.first() {
let state = Self::track_state_from_osc_string(state_str);
let state = state_str.parse::<TrackState>().unwrap_or(TrackState::Empty);
return Ok(Some(Message::TrackStateChanged { column, row, state }));
}
} else if addr.starts_with("/looper/cell/") && addr.ends_with("/volume") {
// Parse: /looper/cell/{column}/{row}/volume
let parts: Vec<&str> = addr.split('/').collect();
if parts.len() != 6 {
return Err(Error::AddressParseError(addr));
}
let column: usize = parts[3].parse::<usize>().address_part_result("column")? - 1; // Convert to 0-based
let row: usize = parts[4].parse::<usize>().address_part_result("row")? - 1; // Convert to 0-based
if let Some(rosc::OscType::Float(volume)) = args.first() {
return Ok(Some(Message::TrackVolumeChanged {
column,
row,
volume: *volume
}));
}
} else if addr == "/looper/selected/column" {
if let Some(rosc::OscType::Int(column_1based)) = args.first() {
let column = (*column_1based as usize).saturating_sub(1); // Convert to 0-based
@@ -88,14 +105,4 @@ impl Message {
// Unknown or unsupported message
Ok(None)
}
fn track_state_from_osc_string(s: &str) -> TrackState {
match s {
"empty" => TrackState::Empty,
"idle" => TrackState::Idle,
"recording" => TrackState::Recording,
"playing" => TrackState::Playing,
_ => TrackState::Empty, // Default fallback
}
}
}

View File

@@ -1,8 +1,6 @@
use strum::Display;
use crate::*;
#[derive(Clone, Debug, Display, PartialEq)]
#[derive(Clone, Debug, PartialEq, strum::Display, strum::EnumString)]
pub enum TrackState {
Empty,
Idle,