wip: provide more components to app

This commit is contained in:
🪞👃🪞 2025-01-11 21:09:21 +01:00
parent ed462cd0f6
commit 2cd56e7391
3 changed files with 126 additions and 21 deletions

View file

@ -3,7 +3,7 @@ use crate::*;
#[derive(Debug)]
pub struct JackPort<T: PortSpec> {
/// Port name
pub name: String,
pub name: Arc<str>,
/// Handle to JACK client, for receiving reconnect events.
pub jack: Arc<RwLock<JackConnection>>,
/// Port handle.
@ -23,7 +23,7 @@ impl<T: PortSpec> JackPort<T> {
if port.as_str() == &**name {
if let Some(port) = self.jack.port_by_name(port.as_str()) {
let port_status = Self::try_both_ways(&self.jack, &port, &self.port);
let name = port.name()?;
let name = port.name()?.into();
status.push((port, name, port_status));
if port_status == Connected {
break
@ -34,7 +34,7 @@ impl<T: PortSpec> JackPort<T> {
RegExp(re) => for port in self.jack.ports(Some(&re), None, PortFlags::empty()).iter() {
if let Some(port) = self.jack.port_by_name(port.as_str()) {
let port_status = Self::try_both_ways(&self.jack, &port, &self.port);
let name = port.name()?;
let name = port.name()?.into();
status.push((port, name, port_status));
if port_status == Connected && connect.scope == One {
break
@ -64,7 +64,7 @@ impl<T: PortSpec> JackPort<T> {
pub struct PortConnection {
pub name: PortConnectionName,
pub scope: PortConnectionScope,
pub status: Vec<(Port<Unowned>, String, PortConnectionStatus)>,
pub status: Vec<(Port<Unowned>, Arc<str>, PortConnectionStatus)>,
}
impl PortConnection {
pub fn collect (exact: &[impl AsRef<str>], re: &[impl AsRef<str>], re_all: &[impl AsRef<str>])
@ -89,14 +89,14 @@ impl PortConnection {
let name = PortConnectionName::RegExp(name.as_ref().into());
Self { name, scope: PortConnectionScope::All, status: vec![] }
}
pub fn info (&self) -> String {
pub fn info (&self) -> Arc<str> {
format!("{} {} {}", match self.scope {
PortConnectionScope::One => " ",
PortConnectionScope::All => "*",
}, match &self.name {
PortConnectionName::Exact(name) => format!("= {name}"),
PortConnectionName::RegExp(name) => format!("~ {name}"),
}, self.status.len())
}, self.status.len()).into()
}
}
#[derive(Clone, Debug, PartialEq)]
@ -123,7 +123,7 @@ impl JackPort<MidiIn> {
let mut port = JackPort {
jack: jack.clone(),
port: jack.midi_in(name.as_ref())?,
name: name.as_ref().to_string(),
name: name.as_ref().into(),
connect: connect.to_vec()
};
port.connect_to_matching()?;
@ -137,7 +137,7 @@ impl JackPort<MidiOut> {
let mut port = Self {
jack: jack.clone(),
port: jack.midi_out(name.as_ref())?,
name: name.as_ref().to_string(),
name: name.as_ref().into(),
connect: connect.to_vec()
};
port.connect_to_matching()?;
@ -151,7 +151,7 @@ impl JackPort<AudioIn> {
let mut port = Self {
jack: jack.clone(),
port: jack.audio_in(name.as_ref())?,
name: name.as_ref().to_string(),
name: name.as_ref().into(),
connect: connect.to_vec()
};
port.connect_to_matching()?;
@ -165,7 +165,7 @@ impl JackPort<AudioOut> {
let mut port = Self {
jack: jack.clone(),
port: jack.audio_out(name.as_ref())?,
name: name.as_ref().to_string(),
name: name.as_ref().into(),
connect: connect.to_vec()
};
port.connect_to_matching()?;