track: remove ports on delete

This commit is contained in:
🪞👃🪞 2025-05-01 01:20:12 +03:00
parent 80964d5b4a
commit 3c2d490f83

View file

@ -92,7 +92,12 @@ impl Tek {
width: (name.len() + 2).max(12),
color: color.unwrap_or_else(ItemTheme::random),
player: MidiPlayer::new(
&format!("{name}"), self.jack(), Some(self.clock()), None, mins, mouts
&format!("{name}"),
self.jack(),
Some(self.clock()),
None,
mins,
mouts
)?,
name,
..Default::default()
@ -120,11 +125,22 @@ impl Tek {
}
/// Delete a track
pub fn track_del (&mut self, index: usize) {
self.tracks_mut().remove(index);
for scene in self.scenes_mut().iter_mut() {
scene.clips.remove(index);
pub fn track_del (&mut self, index: usize) -> Usually<()> {
let exists = self.tracks().get(index).is_some();
if exists {
let track = self.tracks_mut().remove(index);
let Track { player: MidiPlayer { midi_ins, midi_outs, .. }, .. } = track;
for port in midi_ins.into_iter() {
port.close()?;
}
for port in midi_outs.into_iter() {
port.close()?;
}
for scene in self.scenes_mut().iter_mut() {
scene.clips.remove(index);
}
}
Ok(())
}
/// Add multiple scenes