diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index 8a73882..fe08d54 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -136,12 +136,6 @@ impl EpisodeWidget { error!("Failed to set duration state: {}", err); } - // Set the size label. - if let Err(err) = self.set_total_size(episode.length()) { - error!("Failed to set the Size label."); - error!("Error: {}", err); - } - // Determine what the state of the progress bar should be. if let Err(err) = self.determine_progess_bar(&episode) { error!("Something went wrong determining the ProgressBar State."); @@ -207,22 +201,6 @@ impl EpisodeWidget { Ok(()) } - /// Set the Episode label dependings on its size - fn set_total_size(&self, bytes: Option) -> Result<(), Error> { - let size = bytes.ok_or_else(|| format_err!("Size is None."))?; - if size == 0 { - bail!("Size is of 0 MB."); - } - - let s = size.file_size(SIZE_OPTS.clone()) - .map_err(|err| format_err!("{}", err))?; - - self.total_size.set_text(&s); - self.total_size.show(); - self.separator2.show(); - Ok(()) - } - // FIXME: REFACTOR ME // Something Something State-Machine? fn determine_progess_bar(&self, episode: &EpisodeWidgetQuery) -> Result<(), Error> { @@ -242,7 +220,7 @@ impl EpisodeWidget { if let Some(prog) = active_dl { let mut lock = self.media.lock().map_err(|err| format_err!("{}", err))?; take_mut::take(lock.deref_mut(), |media| { - media.determine_state(episode.local_uri().is_some(), true) + media.determine_state(episode.length(), true, episode.local_uri().is_some()) }); let progress_bar = self.progress.clone(); @@ -266,7 +244,7 @@ impl EpisodeWidget { } else { let mut lock = self.media.lock().map_err(|err| format_err!("{}", err))?; take_mut::take(lock.deref_mut(), |media| { - media.determine_state(episode.local_uri().is_some(), false) + media.determine_state(episode.length(), false, episode.local_uri().is_some()) }); } diff --git a/hammond-gtk/src/widgets/episode_states.rs b/hammond-gtk/src/widgets/episode_states.rs index 581bd36..9e90f9a 100644 --- a/hammond-gtk/src/widgets/episode_states.rs +++ b/hammond-gtk/src/widgets/episode_states.rs @@ -252,6 +252,7 @@ pub struct Size { impl Size { fn set_size(self, s: &str) -> Size { self.size.set_text(s); + self.size.show(); self.separator.show(); Size { size: self.size, @@ -356,11 +357,14 @@ impl DownloadPlay { } } - fn connect_download(&self, f: F) -> glib::SignalHandlerId { + fn download_connect_clicked( + &self, + f: F, + ) -> glib::SignalHandlerId { self.download.connect_clicked(f) } - fn connect_play_button(&self, f: F) -> glib::SignalHandlerId { + fn play_connect_clicked(&self, f: F) -> glib::SignalHandlerId { self.play.connect_clicked(f) } } @@ -543,15 +547,121 @@ impl From for Playable { } } -// impl Media {} +impl Media { + fn set_size(self, s: &str) -> Media { + Media { + dl: self.dl, + size: self.size.set_size(s), + progress: self.progress, + } + } + + fn hide_size(self) -> Media { + Media { + dl: self.dl, + size: self.size.into_hidden(), + progress: self.progress, + } + } + + fn into_new(self, size: &str) -> New { + Media { + dl: self.dl.into_fetchable(), + size: self.size.set_size(size), + progress: self.progress.into_hidden(), + } + } + + fn into_playable(self, size: &str) -> Playable { + Media { + dl: self.dl.into_playable(), + size: self.size.set_size(size), + progress: self.progress.into_hidden(), + } + } +} #[derive(Debug, Clone)] -pub enum MediaMachine { - UnInitialized(Media), +pub enum ButtonsState { New(Media