From 3c2d490f83371e334b32687f2661643db11756c8 Mon Sep 17 00:00:00 2001 From: unspeaker Date: Thu, 1 May 2025 01:20:12 +0300 Subject: [PATCH] track: remove ports on delete --- crates/app/src/model.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/crates/app/src/model.rs b/crates/app/src/model.rs index 7b13bfcf..85dc5dd2 100644 --- a/crates/app/src/model.rs +++ b/crates/app/src/model.rs @@ -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