public void SetElapsedTime(float value)
{
- int currentPosition = (int)(playerModel.CurrentTrack.DurationInMS * value);
+ int currentPosition = (int)(GetTrackDuration() * value);
playerModel.PlayingTime = TimeSpan.FromMilliseconds(currentPosition).ToString(AppConstants.TimeFormat);
}
private void UpdatePlayingTime()
{
int position = PlayerController.Instance.GetPosition();
- playerModel.ElapsedTime = position / (float)playerModel.CurrentTrack.DurationInMS;
+ int duration = GetTrackDuration();
+
+ if (duration <= 0) return;
+
+ float elapsedTime = 1.0f * position / duration;
+ playerModel.ElapsedTime = Math.Min(1.0f, Math.Max(0.0f, elapsedTime));
playerModel.PlayingTime = TimeSpan.FromMilliseconds(position).ToString(AppConstants.TimeFormat);
+ playerModel.TrackLength = TimeSpan.FromMilliseconds(duration).ToString(AppConstants.TimeFormat);
}
private void StartPlayback()
{
PlayerController.Instance.Pause();
}
+
+ private int GetTrackDuration()
+ {
+ int duration = playerModel.CurrentTrack.DurationInMS;
+ if (playerModel.CurrentTrack.DurationInMS <= 0)
+ {
+ duration = PlayerController.Instance.GetTrackDuration();
+ playerModel.CurrentTrack.DurationInMS = duration;
+ playerModel.CurrentTrack.Duration = TimeSpan.FromMilliseconds(duration).ToString(AppConstants.TimeFormat);
+ }
+ return duration;
+ }
+
private void Resume()
{
PlayerController.Instance.Resume();