From 71f4194cdfc05bf714628817963ad98702947dd7 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Fri, 27 Dec 2024 16:17:47 +0100 Subject: [PATCH] whatever the fuck is up with the groovebox mode --- crates/cli/src/cli_groovebox.rs | 41 +++++++++++++++++++++++++-------- crates/cli/src/cli_sequencer.rs | 27 ---------------------- crates/cli/src/lib.rs | 27 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 37 deletions(-) diff --git a/crates/cli/src/cli_groovebox.rs b/crates/cli/src/cli_groovebox.rs index ae7abab1..68689338 100644 --- a/crates/cli/src/cli_groovebox.rs +++ b/crates/cli/src/cli_groovebox.rs @@ -2,19 +2,40 @@ include!("./lib.rs"); pub fn main () -> Usually<()> { GrooveboxCli::parse().run() } #[derive(Debug, Parser)] #[command(version, about, long_about = None)] -pub struct GrooveboxCli; +pub struct GrooveboxCli { + /// Name of JACK client + #[arg(short, long)] + name: Option, + + /// Whether to include a transport toolbar (default: true) + #[arg(short, long, default_value_t = true)] + transport: bool, + + /// MIDI outs to connect to (multiple accepted) + #[arg(short='i', long)] + midi_from: Vec, + + /// MIDI ins to connect to (multiple accepted) + #[arg(short='o', long)] + midi_to: Vec, + + /// Audio ins to connect to (multiple accepted) + #[arg(short='I', long)] + audio_from: Vec, + + /// Audio outs to connect to (multiple accepted) + #[arg(short='O', long)] + audio_to: Vec, +} impl GrooveboxCli { fn run (&self) -> Usually<()> { Tui::run(JackClient::new("tek_groovebox")?.activate_with(|jack|{ - let app = tek::tui::GrooveboxTui::try_from(jack)?; - let jack = jack.read().unwrap(); - let _midi_out = jack.register_port("out", MidiOut::default())?; - let _midi_in_1 = jack.register_port("in1", MidiIn::default())?; - let _midi_in_2 = jack.register_port("in2", MidiIn::default())?; - let _audio_in_1 = jack.register_port("inL", AudioIn::default())?; - let _audio_in_2 = jack.register_port("inR", AudioIn::default())?; - let _audio_out_1 = jack.register_port("out1", AudioOut::default())?; - let _audio_out_2 = jack.register_port("out2", AudioOut::default())?; + let mut app = tek::tui::GrooveboxTui::try_from(jack)?; + let jack = jack.read().unwrap(); + let midi_in = jack.register_port("i", MidiIn::default())?; + let midi_out = jack.register_port("o", MidiOut::default())?; + app.sequencer.player.midi_ins.push(midi_in); + app.sequencer.player.midi_outs.push(midi_out); Ok(app) })?)?; Ok(()) diff --git a/crates/cli/src/cli_sequencer.rs b/crates/cli/src/cli_sequencer.rs index fcbb8e9f..40696efa 100644 --- a/crates/cli/src/cli_sequencer.rs +++ b/crates/cli/src/cli_sequencer.rs @@ -42,30 +42,3 @@ impl SequencerCli { Ok(()) } } - -fn connect_from (jack: &JackClient, input: &Port, ports: &[String]) -> Usually<()> { - for port in ports.iter() { - if let Some(port) = jack.port_by_name(port).as_ref() { - jack.client().connect_ports(port, input)?; - } else { - panic!("Missing MIDI output: {port}. Use jack_lsp to list all port names."); - } - } - Ok(()) -} - -fn connect_to (jack: &JackClient, output: &Port, ports: &[String]) -> Usually<()> { - for port in ports.iter() { - if let Some(port) = jack.port_by_name(port).as_ref() { - jack.client().connect_ports(output, port)?; - } else { - panic!("Missing MIDI input: {port}. Use jack_lsp to list all port names."); - } - } - Ok(()) -} - -#[test] fn verify_sequencer_cli () { - use clap::CommandFactory; - SequencerCli::command().debug_assert(); -} diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 4b1f648a..e8d37d2b 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -1,3 +1,30 @@ #[allow(unused_imports)] use std::sync::Arc; #[allow(unused_imports)] use clap::{self, Parser}; #[allow(unused_imports)] use tek::{*, jack::*}; + +fn connect_from (jack: &JackClient, input: &Port, ports: &[String]) -> Usually<()> { + for port in ports.iter() { + if let Some(port) = jack.port_by_name(port).as_ref() { + jack.client().connect_ports(port, input)?; + } else { + panic!("Missing MIDI output: {port}. Use jack_lsp to list all port names."); + } + } + Ok(()) +} + +fn connect_to (jack: &JackClient, output: &Port, ports: &[String]) -> Usually<()> { + for port in ports.iter() { + if let Some(port) = jack.port_by_name(port).as_ref() { + jack.client().connect_ports(output, port)?; + } else { + panic!("Missing MIDI input: {port}. Use jack_lsp to list all port names."); + } + } + Ok(()) +} + +#[test] fn verify_sequencer_cli () { + use clap::CommandFactory; + SequencerCli::command().debug_assert(); +}