Resolves #492 Infinity media player progress error

This commit is contained in:
Yegor Vialov 2019-11-28 17:42:48 +00:00
parent ca1eec6602
commit 90504047b4
3 changed files with 17 additions and 16 deletions

View File

@ -84,25 +84,22 @@ class MediaPlayerEntity extends Entity {
} }
bool canCalculateActualPosition() { bool canCalculateActualPosition() {
return positionLastUpdated != null && durationSeconds != null && positionSeconds != null && durationSeconds >= 0; return positionLastUpdated != null && durationSeconds != null && positionSeconds != null && durationSeconds > 0;
} }
double getActualPosition() { double getActualPosition() {
double result = 0; double result = 0;
if (canCalculateActualPosition()) { Duration durationD;
Duration durationD; Duration positionD;
Duration positionD; durationD = Duration(seconds: durationSeconds);
durationD = Duration(seconds: durationSeconds); positionD = Duration(
positionD = Duration(
seconds: positionSeconds); seconds: positionSeconds);
result = positionD.inSeconds.toDouble(); result = positionD.inSeconds.toDouble();
int differenceInSeconds = DateTime int differenceInSeconds = DateTime
.now() .now()
.difference(positionLastUpdated) .difference(positionLastUpdated)
.inSeconds; .inSeconds;
result = ((result + differenceInSeconds) <= durationD.inSeconds) ? (result + differenceInSeconds) : durationD.inSeconds.toDouble(); result = ((result + differenceInSeconds) <= durationD.inSeconds) ? (result + differenceInSeconds) : durationD.inSeconds.toDouble();
}
return result; return result;
} }

View File

@ -22,13 +22,13 @@ class _MediaPlayerProgressBarState extends State<MediaPlayerProgressBar> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final EntityModel entityModel = EntityModel.of(context); final EntityModel entityModel = EntityModel.of(context);
final MediaPlayerEntity entity = entityModel.entityWrapper.entity; final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
double progress; double progress = 0;
int currentPosition; int currentPosition;
if (entity.canCalculateActualPosition()) { if (entity.canCalculateActualPosition()) {
currentPosition = entity.getActualPosition().toInt(); currentPosition = entity.getActualPosition().toInt();
progress = (currentPosition <= entity.durationSeconds) ? currentPosition / entity.durationSeconds : 100; if (currentPosition > 0) {
} else { progress = (currentPosition <= entity.durationSeconds) ? currentPosition / entity.durationSeconds : 100;
progress = 0; }
} }
return LinearProgressIndicator( return LinearProgressIndicator(
value: progress, value: progress,

View File

@ -460,7 +460,11 @@ class _MediaPlayerControlsState extends State<MediaPlayerControls> {
} }
void _duplicateTo(entity) { void _duplicateTo(entity) {
HomeAssistant().savedPlayerPosition = entity.getActualPosition().toInt(); if (entity.canCalculateActualPosition()) {
HomeAssistant().savedPlayerPosition = entity.getActualPosition().toInt();
} else {
HomeAssistant().savedPlayerPosition = 0;
}
Navigator.of(context).pushNamed("/play-media", arguments: { Navigator.of(context).pushNamed("/play-media", arguments: {
"url": entity.attributes["media_content_id"], "url": entity.attributes["media_content_id"],
"type": entity.attributes["media_content_type"] "type": entity.attributes["media_content_type"]