Computing the song duration
The only remaining feature that needs to be implemented in order to be on par with the music player of the previous chapter is to compute and display the song duration. First, we will copy the compute_duration()
method from the previous chapter and paste it in our Player
:
pub fn compute_duration<P: AsRef<Path>>(path: P) -> Option<Duration> { let file = File::open(path).unwrap(); Mp3Decoder::compute_duration(BufReader::new(file)) }
We'll now call this method in the Playlist
:
use std::thread; use futures::sync::oneshot; fn compute_duration(&self, path: &Path) { let path = path.to_path_buf(); let (tx, rx) = oneshot::channel(); thread::spawn(move || { if let Some(duration) = Player::compute_duration(&path) { tx.send((path, duration)) .expect("Cannot send computed duration"); } }); self.model.relm.connect_exec_ignore_err(rx, |(path, duration)| DurationComputed(path...