wip: refactor pt.22: api traits in snd

This commit is contained in:
🪞👃🪞 2024-11-13 19:49:52 +01:00
parent 029614631e
commit e7e57cea1e
8 changed files with 100 additions and 67 deletions

View file

@ -2,9 +2,10 @@ use crate::*;
pub trait ArrangerModelApi: JackModelApi + ClockModelApi {
fn name (&self) -> &Arc<RwLock<String>>;
fn phrases (&self) -> &Arc<RwLock<PhrasePool>>;
fn tracks (&self) -> &Vec<ArrangerTrack>;
fn tracks_mut (&mut self) -> &mut Vec<ArrangerTrack>;
fn scenes (&self) -> &Vec<ArrangerScene>;
fn scenes_mut (&mut self) -> &mut Vec<ArrangerScene>;
@ -54,13 +55,31 @@ pub trait ArrangerModelApi: JackModelApi + ClockModelApi {
impl JackModelApi for ArrangerModel {
fn jack (&self) -> &Arc<RwLock<JackClient>> {
&self.jack
&self.transport.jack()
}
}
impl ClockModelApi for ArrangerModel {
fn clock (&self) -> &Arc<Clock> {
&self.clock
&self.transport.clock()
}
}
impl TransportModelApi for ArrangerModel {
fn transport (&self) -> &jack::Transport {
&self.transport.transport()
}
fn metronome (&self) -> bool {
self.transport.metronome()
}
}
impl PhrasePoolModelApi for ArrangerModel {
fn phrases (&self) -> &Vec<Arc<RwLock<Phrase>>> {
&self.phrases
}
fn phrases_mut (&mut self) -> &mut Vec<Arc<RwLock<Phrase>>> {
&mut self.phrases
}
}
@ -68,9 +87,6 @@ impl ArrangerModelApi for ArrangerModel {
fn name (&self) -> &Arc<RwLock<String>> {
&self.name
}
fn phrases (&self) -> &Arc<RwLock<PhrasePool>> {
&self.phrases
}
fn tracks (&self) -> &Vec<ArrangerTrack> {
&self.tracks
}
@ -87,18 +103,16 @@ impl ArrangerModelApi for ArrangerModel {
#[derive(Debug)]
pub struct ArrangerModel {
/// JACK client handle (needs to not be dropped for standalone mode to work).
jack: Arc<RwLock<JackClient>>,
/// Global timebase
clock: Arc<Clock>,
/// Name of arranger
name: Arc<RwLock<String>>,
/// State of the JACK transport.
transport: TransportModel,
/// Collection of phrases.
phrases: Arc<RwLock<PhrasePool>>,
phrases: Vec<Arc<RwLock<Phrase>>>,
/// Collection of tracks.
tracks: Vec<ArrangerTrack>,
tracks: Vec<ArrangerTrack>,
/// Collection of scenes.
scenes: Vec<ArrangerScene>,
scenes: Vec<ArrangerScene>,
/// Name of arranger
name: Arc<RwLock<String>>,
}
#[derive(Debug)]