From f665c4e9f3b4eaa226b0c813f6845e247a4e6977 Mon Sep 17 00:00:00 2001 From: krolxon Date: Thu, 25 Apr 2024 12:58:13 +0530 Subject: better event handling with tick, search --- src/connection.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/connection.rs') diff --git a/src/connection.rs b/src/connection.rs index b464b23..a741206 100755 --- a/src/connection.rs +++ b/src/connection.rs @@ -2,6 +2,7 @@ use mpd::song::Song; use mpd::{Client, State}; use simple_dmenu::dmenu; use std::process::Command; +use std::time::Duration; pub type Result = core::result::Result; pub type Error = Box; @@ -11,6 +12,8 @@ pub struct Connection { pub conn: Client, pub songs_filenames: Vec, pub state: String, + pub elapsed: Duration, + pub total_duration: Duration, } impl Connection { @@ -24,10 +27,14 @@ impl Connection { .map(|x| x.file) .collect(); + let (elapsed, total) = conn.status().unwrap().time.unwrap_or_default(); + Ok(Self { conn, songs_filenames, state: "Stopped".to_string(), + elapsed, + total_duration: total, }) } @@ -64,6 +71,26 @@ impl Connection { self.state.clone() } + pub fn update_progress(&mut self) { + let (elapsed, total) = self.conn.status().unwrap().time.unwrap_or_default(); + self.elapsed = elapsed; + self.total_duration = total; + } + + pub fn get_progress_ratio(&self) -> f64 { + let total = self.total_duration.as_secs_f64(); + if total == 0.0 { + 0.0 + } else { + let ratio = self.elapsed.as_secs_f64() / self.total_duration.as_secs_f64(); + if ratio > 1.0 || ratio == 0.0 { + 1.0 + } else { + ratio + } + } + } + /// push the given song to queue pub fn push(&mut self, song: &Song) -> Result<()> { if self.conn.queue().unwrap().is_empty() { -- cgit v1.2.3