Fix no duration crash on media player
This commit is contained in:
@ -24,9 +24,18 @@ class _MediaPlayerProgressBarState extends State<MediaPlayerProgressBar> {
|
|||||||
final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
|
final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
|
||||||
double progress;
|
double progress;
|
||||||
DateTime lastUpdated = DateTime.tryParse("${entity.attributes["media_position_updated_at"]}")?.toLocal();
|
DateTime lastUpdated = DateTime.tryParse("${entity.attributes["media_position_updated_at"]}")?.toLocal();
|
||||||
if (lastUpdated != null) {
|
Duration duration;
|
||||||
Duration duration = Duration(seconds: entity._getIntAttributeValue("media_duration") ?? 1);
|
Duration position;
|
||||||
Duration position = Duration(seconds: entity._getIntAttributeValue("media_position") ?? 0);
|
int durationInSeconds = entity._getIntAttributeValue("media_duration");
|
||||||
|
if (durationInSeconds != null) {
|
||||||
|
duration = Duration(seconds: durationInSeconds);
|
||||||
|
}
|
||||||
|
int positionInSeconds = entity._getIntAttributeValue("media_position");
|
||||||
|
if (positionInSeconds != null) {
|
||||||
|
position = Duration(
|
||||||
|
seconds: positionInSeconds);
|
||||||
|
}
|
||||||
|
if (lastUpdated != null && duration != null && position != null) {
|
||||||
int currentPosition = position.inSeconds;
|
int currentPosition = position.inSeconds;
|
||||||
int differenceInSeconds = DateTime
|
int differenceInSeconds = DateTime
|
||||||
.now()
|
.now()
|
||||||
|
@ -33,11 +33,18 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
|
|||||||
final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
|
final MediaPlayerEntity entity = entityModel.entityWrapper.entity;
|
||||||
DateTime lastUpdated = DateTime.tryParse("${
|
DateTime lastUpdated = DateTime.tryParse("${
|
||||||
entity.attributes["media_position_updated_at"]}")?.toLocal();
|
entity.attributes["media_position_updated_at"]}")?.toLocal();
|
||||||
if (lastUpdated != null) {
|
Duration duration;
|
||||||
Duration duration = Duration(
|
Duration position;
|
||||||
seconds: entity._getIntAttributeValue("media_duration") ?? 1);
|
int durationInSeconds = entity._getIntAttributeValue("media_duration");
|
||||||
Duration position = Duration(
|
if (durationInSeconds != null) {
|
||||||
seconds: entity._getIntAttributeValue("media_position") ?? 0);
|
duration = Duration(seconds: durationInSeconds);
|
||||||
|
}
|
||||||
|
int positionInSeconds = entity._getIntAttributeValue("media_position");
|
||||||
|
if (positionInSeconds != null) {
|
||||||
|
position = Duration(
|
||||||
|
seconds: positionInSeconds);
|
||||||
|
}
|
||||||
|
if (lastUpdated != null && duration != null && position != null) {
|
||||||
if (entity.state == EntityState.playing && !_seekStarted &&
|
if (entity.state == EntityState.playing && !_seekStarted &&
|
||||||
!_changedHere) {
|
!_changedHere) {
|
||||||
_currentPosition = position.inSeconds.toDouble();
|
_currentPosition = position.inSeconds.toDouble();
|
||||||
@ -45,7 +52,7 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
|
|||||||
.now()
|
.now()
|
||||||
.difference(lastUpdated)
|
.difference(lastUpdated)
|
||||||
.inSeconds;
|
.inSeconds;
|
||||||
_currentPosition = (_currentPosition <= duration.inSeconds) ? _currentPosition + differenceInSeconds : duration.inSeconds;
|
_currentPosition = ((_currentPosition + differenceInSeconds) <= duration.inSeconds) ? (_currentPosition + differenceInSeconds) : duration.inSeconds.toDouble();
|
||||||
} else if (_changedHere) {
|
} else if (_changedHere) {
|
||||||
_changedHere = false;
|
_changedHere = false;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +133,7 @@ EventBus eventBus = new EventBus();
|
|||||||
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
|
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
|
||||||
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
|
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
|
||||||
const String appName = "HA Client";
|
const String appName = "HA Client";
|
||||||
const appVersion = "0.6.6";
|
const appVersion = "0.6.7-alpha1";
|
||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
FlutterError.onError = (errorDetails) {
|
FlutterError.onError = (errorDetails) {
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
name: hass_client
|
name: hass_client
|
||||||
description: Home Assistant Android Client
|
description: Home Assistant Android Client
|
||||||
|
|
||||||
version: 0.6.6+662
|
version: 0.6.7+670
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.0.0-dev.68.0 <3.0.0"
|
sdk: ">=2.0.0-dev.68.0 <3.0.0"
|
||||||
|
Reference in New Issue
Block a user