瀏覽代碼

player: Update the position on pause/play events.

Paul Lietar 9 年之前
父節點
當前提交
de357e63c9
共有 1 個文件被更改,包括 9 次插入19 次删除
  1. 9 19
      src/player.rs

+ 9 - 19
src/player.rs

@@ -159,11 +159,7 @@ impl PlayerInternal {
                             stream.stop().unwrap();
                         }
                         state.end_of_track = false;
-                        state.status = if play {
-                            PlayStatus::kPlayStatusPlay
-                        } else {
-                            PlayStatus::kPlayStatusPause
-                        };
+                        state.status = PlayStatus::kPlayStatusPause;
                         state.position_ms = position;
                         state.position_measured_at = util::now_ms();
                         true
@@ -228,6 +224,9 @@ impl PlayerInternal {
                 Some(PlayerCommand::Play) => {
                     self.update(|state| {
                         state.status = PlayStatus::kPlayStatusPlay;
+                        state.position_ms =
+                            (decoder.as_mut().unwrap().time_tell().unwrap() * 1000f64) as u32;
+                        state.position_measured_at = util::now_ms();
                         true
                     });
 
@@ -237,6 +236,9 @@ impl PlayerInternal {
                     self.update(|state| {
                         state.status = PlayStatus::kPlayStatusPause;
                         state.update_time = util::now_ms();
+                        state.position_ms =
+                            (decoder.as_mut().unwrap().time_tell().unwrap() * 1000f64) as u32;
+                        state.position_measured_at = util::now_ms();
                         true
                     });
 
@@ -253,6 +255,8 @@ impl PlayerInternal {
                         if state.status == PlayStatus::kPlayStatusPlay {
                             state.status = PlayStatus::kPlayStatusPause;
                         }
+                        state.position_ms = 0;
+                        state.position_measured_at = util::now_ms();
                         true
                     });
 
@@ -286,20 +290,6 @@ impl PlayerInternal {
                         decoder = None;
                     }
                 }
-
-                self.update(|state| {
-                    let now = util::now_ms();
-
-                    if now - state.position_measured_at > 5000 {
-                        state.position_ms =
-                            (decoder.as_mut().unwrap().time_tell().unwrap() * 1000f64) as u32;
-                        state.position_measured_at = now;
-
-                        true
-                    } else {
-                        false
-                    }
-                });
             }
         }