use crate::*;
pub(crate) struct Services {
pub(crate) engine: Engine,
pub(crate) picker: Picker,
pub(crate) webapi: Arc<Mutex<WebApi>>,
}
pub(crate) const FADE_MS: u64 = 1500;
pub(crate) struct ThemeState {
pub(crate) displayed: Theme,
pub(crate) target: Theme,
pub(crate) fade: Option<ThemeFade>,
}
impl ThemeState {
pub(crate) fn start_fade(&mut self, to: Theme) {
self.fade = Some(ThemeFade::new(
self.displayed,
to,
Duration::from_millis(FADE_MS),
));
self.target = to;
}
pub(crate) fn advance(&mut self) {
if let Some(fade) = &self.fade {
self.displayed = fade.current();
if fade.is_done() {
self.displayed = self.target;
self.fade = None;
}
}
}
}
pub(crate) struct Transport {
pub(crate) shuffle: bool,
pub(crate) repeat: bool,
pub(crate) volume: u8, pub(crate) queue: Vec<String>,
pub(crate) queue_uris: Vec<String>,
pub(crate) playback_started: bool,
pub(crate) source: PlaySource,
pub(crate) source_name: String,
}
pub(crate) struct BrowseState {
pub(crate) library: Library,
pub(crate) section: Section,
pub(crate) selected: usize,
pub(crate) sort: SortMode,
pub(crate) details: Vec<Detail>,
}
pub(crate) struct SearchState {
pub(crate) input_mode: bool,
pub(crate) query: String,
pub(crate) searching: bool,
pub(crate) search_results: Vec<LibItem>,
}
pub(crate) struct ViewState {
pub(crate) mode: RightView,
pub(crate) zen: bool,
pub(crate) lyrics: Vec<(u32, String)>,
pub(crate) lyrics_synced: bool,
pub(crate) actions: Option<ActionMenu>,
}
pub(crate) struct SessionState {
pub(crate) restore_uri: Option<String>,
pub(crate) pending_meta: Option<String>,
pub(crate) reclaimed: bool,
pub(crate) last_ctrl_c: Option<Instant>,
pub(crate) last_click: Option<(u16, Instant)>,
}