| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:lib.schemas.dart/com/fuchsia/media/media.dart'; |
| import 'package:lib.widgets/model.dart'; |
| |
| /// Tracks progress of Media playback |
| class MediaProgress extends Model { |
| /// Constructor |
| MediaProgress(this._durationMsec, this._normalizedProgress); |
| |
| /// Named constructor for converting an Entity into this model |
| MediaProgress.fromEntity(MediaProgressEntityData entity) { |
| _durationMsec = entity.durationMsec; |
| _normalizedProgress = entity.normalizedProgress; |
| } |
| |
| /// Generate and Entity object capable of being sent over a Link |
| MediaProgressEntityData toEntity() => |
| MediaProgressEntityData(_durationMsec, _normalizedProgress); |
| |
| /// Progress through media in the range [0..1] |
| double _normalizedProgress; |
| |
| /// Full length of the media |
| int _durationMsec; |
| |
| /// Progress through media as an absolute Duration. |
| Duration get position => Duration(milliseconds: positionMsec); |
| |
| /// Progress through media as absolute milliseconds. |
| int get positionMsec => (_durationMsec * _normalizedProgress).floor(); |
| |
| /// Progress of media playback normalized in the range [0.0 .. 1.0]; |
| double get normalizedProgress => _normalizedProgress; |
| |
| /// Duration fo the vide in milliseconds |
| int get durationMsec => _durationMsec; |
| |
| /// Update the duration of the media. |
| set durationMsec(int durationMsec) { |
| _durationMsec = durationMsec; |
| notifyListeners(); |
| } |
| |
| /// Update the normalized progress of the media. This should be called |
| /// with the value from the media player and is clamped to the range |
| /// [0.0 .. 1.0]. |
| set normalizedProgress(double normalizedProgress) { |
| _normalizedProgress = normalizedProgress; |
| notifyListeners(); |
| } |
| } |