Improve media switching

This commit is contained in:
estevez-dev 2019-09-15 18:38:02 +03:00
parent 72aad5cc16
commit bf6a52e0b9
5 changed files with 42 additions and 24 deletions

View File

@ -22,10 +22,6 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
@override @override
initState() { initState() {
super.initState(); super.initState();
if (HomeAssistant().savedPlayerPosition != null) {
_savedPosition = HomeAssistant().savedPlayerPosition;
HomeAssistant().savedPlayerPosition = null;
}
_timer = Timer.periodic(Duration(seconds: 1), (_) { _timer = Timer.periodic(Duration(seconds: 1), (_) {
if (!_seekStarted && !_changedHere) { if (!_seekStarted && !_changedHere) {
setState(() {}); setState(() {});
@ -33,22 +29,16 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
}); });
} }
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 @override
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;
if (entity.canCalculateActualPosition()) { if (entity.canCalculateActualPosition()) {
if (HomeAssistant().savedPlayerId != entity.entityId && HomeAssistant().savedPlayerPosition != null) { if (HomeAssistant().sendToPlayerId == entity.entityId && HomeAssistant().savedPlayerPosition != null) {
_savedPosition = HomeAssistant().savedPlayerPosition; _savedPosition = HomeAssistant().savedPlayerPosition;
HomeAssistant().savedPlayerPosition = null; HomeAssistant().savedPlayerPosition = null;
HomeAssistant().sendToPlayerId = null;
} }
if (entity.state == EntityState.playing && !_seekStarted && if (entity.state == EntityState.playing && !_seekStarted &&
!_changedHere) { !_changedHere) {
@ -77,14 +67,6 @@ class _MediaPlayerSeekBarState extends State<MediaPlayerSeekBar> {
) )
); );
} }
buttons.add(
RaisedButton(
child: Text("Switch to..."),
color: Colors.blue,
textColor: Colors.white,
onPressed: () => _switchTo(entity),
)
);
return Padding( return Padding(
padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, 20, Sizes.rightWidgetPadding, 0), padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, 20, Sizes.rightWidgetPadding, 0),
child: Column( child: Column(

View File

@ -403,6 +403,24 @@ class _MediaPlayerControlsState extends State<MediaPlayerControls> {
) )
); );
} }
children.add(
ButtonBar(
children: <Widget>[
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( return Column(
@ -410,4 +428,21 @@ class _MediaPlayerControlsState extends State<MediaPlayerControls> {
); );
} }
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);
}
} }

View File

@ -15,7 +15,7 @@ class HomeAssistant {
String _userName; String _userName;
HSVColor savedColor; HSVColor savedColor;
int savedPlayerPosition; int savedPlayerPosition;
String savedPlayerId; String sendToPlayerId;
String fcmToken; String fcmToken;

View File

@ -186,16 +186,16 @@ class ConnectionManager {
_handleMessage(data) { _handleMessage(data) {
if (data["type"] == "result") { if (data["type"] == "result") {
if (data["id"] != null && data["success"]) { 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"]); _messageResolver["${data["id"]}"]?.complete(data["result"]);
} else if (data["id"] != null) { } 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["${data["id"]}"]?.completeError("${data['error']["message"]}");
} }
_messageResolver.remove("${data["id"]}"); _messageResolver.remove("${data["id"]}");
} else if (data["type"] == "event") { } else if (data["type"] == "event") {
if ((data["event"] != null) && (data["event"]["event_type"] == "state_changed")) { 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"]); onStateChangeCallback(data["event"]["data"]);
} else if (data["event"] != null) { } else if (data["event"] != null) {
Logger.w("Unhandled event type: ${data["event"]["event_type"]}"); Logger.w("Unhandled event type: ${data["event"]["event_type"]}");

View File

@ -93,6 +93,7 @@ class _PlayMediaPageState extends State<PlayMediaPage> {
"media_content_type": _contentType "media_content_type": _contentType
} }
); );
HomeAssistant().sendToPlayerId = entity.entityId;
eventBus.fire(ShowEntityPageEvent(entity: entity)); eventBus.fire(ShowEntityPageEvent(entity: entity));
} }
} }