From bf6a52e0b9178adcfd7792e0fc0fc4f28f277a92 Mon Sep 17 00:00:00 2001 From: estevez-dev Date: Sun, 15 Sep 2019 18:38:02 +0300 Subject: [PATCH] Improve media switching --- .../widgets/media_player_seek_bar.widget.dart | 22 ++---------- .../widgets/media_player_widgets.dart | 35 +++++++++++++++++++ lib/home_assistant.class.dart | 2 +- lib/managers/connection_manager.class.dart | 6 ++-- lib/pages/play_media.page.dart | 1 + 5 files changed, 42 insertions(+), 24 deletions(-) diff --git a/lib/entities/media_player/widgets/media_player_seek_bar.widget.dart b/lib/entities/media_player/widgets/media_player_seek_bar.widget.dart index dc182df..768a57e 100644 --- a/lib/entities/media_player/widgets/media_player_seek_bar.widget.dart +++ b/lib/entities/media_player/widgets/media_player_seek_bar.widget.dart @@ -22,10 +22,6 @@ class _MediaPlayerSeekBarState extends State { @override initState() { super.initState(); - if (HomeAssistant().savedPlayerPosition != null) { - _savedPosition = HomeAssistant().savedPlayerPosition; - HomeAssistant().savedPlayerPosition = null; - } _timer = Timer.periodic(Duration(seconds: 1), (_) { if (!_seekStarted && !_changedHere) { setState(() {}); @@ -33,22 +29,16 @@ class _MediaPlayerSeekBarState extends State { }); } - void _switchTo(entity) { - eventBus.fire(ServiceCallEvent("media_player", "turn_off", entity.entityId, null)); - HomeAssistant().savedPlayerPosition = entity.getActualPosition().toInt(); - HomeAssistant().savedPlayerId = entity.entityId; - Navigator.of(context).pushNamed("/play-media", arguments: {"url": entity.attributes["media_content_id"], "type": entity.attributes["media_content_type"]}); - } - @override Widget build(BuildContext context) { final EntityModel entityModel = EntityModel.of(context); final MediaPlayerEntity entity = entityModel.entityWrapper.entity; if (entity.canCalculateActualPosition()) { - if (HomeAssistant().savedPlayerId != entity.entityId && HomeAssistant().savedPlayerPosition != null) { + if (HomeAssistant().sendToPlayerId == entity.entityId && HomeAssistant().savedPlayerPosition != null) { _savedPosition = HomeAssistant().savedPlayerPosition; HomeAssistant().savedPlayerPosition = null; + HomeAssistant().sendToPlayerId = null; } if (entity.state == EntityState.playing && !_seekStarted && !_changedHere) { @@ -77,14 +67,6 @@ class _MediaPlayerSeekBarState extends State { ) ); } - buttons.add( - RaisedButton( - child: Text("Switch to..."), - color: Colors.blue, - textColor: Colors.white, - onPressed: () => _switchTo(entity), - ) - ); return Padding( padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, 20, Sizes.rightWidgetPadding, 0), child: Column( diff --git a/lib/entities/media_player/widgets/media_player_widgets.dart b/lib/entities/media_player/widgets/media_player_widgets.dart index a60536e..5283da3 100644 --- a/lib/entities/media_player/widgets/media_player_widgets.dart +++ b/lib/entities/media_player/widgets/media_player_widgets.dart @@ -403,6 +403,24 @@ class _MediaPlayerControlsState extends State { ) ); } + children.add( + ButtonBar( + children: [ + RaisedButton( + child: Text("Duplicate to"), + color: Colors.blue, + textColor: Colors.white, + onPressed: () => _duplicateTo(entity), + ), + RaisedButton( + child: Text("Switch to"), + color: Colors.blue, + textColor: Colors.white, + onPressed: () => _switchTo(entity), + ) + ], + ) + ); } return Column( @@ -410,4 +428,21 @@ class _MediaPlayerControlsState extends State { ); } + void _duplicateTo(entity) { + HomeAssistant().savedPlayerPosition = entity.getActualPosition().toInt(); + if (MediaQuery.of(context).size.width < Sizes.tabletMinWidth) { + Navigator.of(context).popAndPushNamed("/play-media", arguments: {"url": entity.attributes["media_content_id"], "type": entity.attributes["media_content_type"]}); + } else { + Navigator.of(context).pushNamed("/play-media", arguments: { + "url": entity.attributes["media_content_id"], + "type": entity.attributes["media_content_type"] + }); + } + } + + void _switchTo(entity) { + eventBus.fire(ServiceCallEvent(entity.domain, "turn_off", entity.entityId, null)); + _duplicateTo(entity); + } + } \ No newline at end of file diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 2b19e7e..5d43977 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -15,7 +15,7 @@ class HomeAssistant { String _userName; HSVColor savedColor; int savedPlayerPosition; - String savedPlayerId; + String sendToPlayerId; String fcmToken; diff --git a/lib/managers/connection_manager.class.dart b/lib/managers/connection_manager.class.dart index 2ace6b8..063fe86 100644 --- a/lib/managers/connection_manager.class.dart +++ b/lib/managers/connection_manager.class.dart @@ -186,16 +186,16 @@ class ConnectionManager { _handleMessage(data) { if (data["type"] == "result") { if (data["id"] != null && data["success"]) { - Logger.d("[Received] <== Request id ${data['id']} was successful"); + //Logger.d("[Received] <== Request id ${data['id']} was successful"); _messageResolver["${data["id"]}"]?.complete(data["result"]); } else if (data["id"] != null) { - Logger.e("[Received] <== Error received on request id ${data['id']}: ${data['error']}"); + //Logger.e("[Received] <== Error received on request id ${data['id']}: ${data['error']}"); _messageResolver["${data["id"]}"]?.completeError("${data['error']["message"]}"); } _messageResolver.remove("${data["id"]}"); } else if (data["type"] == "event") { if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) { - Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}"); + //Logger.d("[Received] <== ${data['type']}.${data["event"]["event_type"]}: ${data["event"]["data"]["entity_id"]}"); onStateChangeCallback(data["event"]["data"]); } else if (data["event"] != null) { Logger.w("Unhandled event type: ${data["event"]["event_type"]}"); diff --git a/lib/pages/play_media.page.dart b/lib/pages/play_media.page.dart index 4514a3f..7d81cfd 100644 --- a/lib/pages/play_media.page.dart +++ b/lib/pages/play_media.page.dart @@ -93,6 +93,7 @@ class _PlayMediaPageState extends State { "media_content_type": _contentType } ); + HomeAssistant().sendToPlayerId = entity.entityId; eventBus.fire(ShowEntityPageEvent(entity: entity)); } }