diff --git a/src/tui/app/app.rs b/src/tui/app/app.rs index 5b0d8bb..a27145e 100644 --- a/src/tui/app/app.rs +++ b/src/tui/app/app.rs @@ -21,13 +21,21 @@ pub type App = AppState< >; impl App { - pub fn new(music_hoard: MH) -> Self { - match AppMachine::new(music_hoard) { - Ok(browse) => browse.into(), - Err(critical) => critical.into(), + pub fn new(mut music_hoard: MH) -> Self { + let init_result = Self::init(&mut music_hoard); + let inner = AppInner::new(music_hoard); + match init_result { + Ok(()) => AppMachine::browse(inner).into(), + Err(err) => AppMachine::critical(inner, err.to_string()).into(), } } + fn init(music_hoard: &mut MH) -> Result<(), musichoard::Error> { + music_hoard.load_from_database()?; + music_hoard.rescan_library()?; + Ok(()) + } + fn inner_ref(&self) -> &AppInner { match self { AppState::Browse(browse) => browse.inner_ref(), diff --git a/src/tui/app/state/browse.rs b/src/tui/app/state/browse.rs index 5b572d5..76fa079 100644 --- a/src/tui/app/state/browse.rs +++ b/src/tui/app/state/browse.rs @@ -2,7 +2,7 @@ use crate::tui::{ app::{ app::App, selection::{Delta, ListSelection}, - state::{critical::AppCritical, AppInner, AppMachine}, + state::{AppInner, AppMachine}, AppPublic, AppState, IAppInteractBrowse, }, lib::IMusicHoard, @@ -17,21 +17,6 @@ impl AppMachine { state: AppBrowse, } } - - pub fn new(mut music_hoard: MH) -> Result> { - let init_result = Self::init(&mut music_hoard); - let inner = AppInner::new(music_hoard); - match init_result { - Ok(()) => Ok(AppMachine::browse(inner)), - Err(err) => Err(AppMachine::critical(inner, err.to_string())), - } - } - - fn init(music_hoard: &mut MH) -> Result<(), musichoard::Error> { - music_hoard.load_from_database()?; - music_hoard.rescan_library()?; - Ok(()) - } } impl From> for App { diff --git a/src/tui/app/state/mod.rs b/src/tui/app/state/mod.rs index 45eaf49..1aae8b6 100644 --- a/src/tui/app/state/mod.rs +++ b/src/tui/app/state/mod.rs @@ -59,6 +59,8 @@ impl<'a, MH: IMusicHoard> From<&'a mut AppInner> for AppPublicInner<'a> { } } +// FIXME: split tests - into parts that test functionality in isolation and move those where +// appropriate, and parts that verify transitions between states. #[cfg(test)] mod tests { use musichoard::collection::Collection;