Improve media switching
This commit is contained in:
parent
72aad5cc16
commit
bf6a52e0b9
@ -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(
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -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;
|
||||||
|
|
||||||
|
@ -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"]}");
|
||||||
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user