Resolves #306 Improve camera connection
This commit is contained in:
		| @@ -12,8 +12,6 @@ class CameraEntity extends Entity { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget _buildAdditionalControlsForPage(BuildContext context) { |   Widget _buildAdditionalControlsForPage(BuildContext context) { | ||||||
|     return CameraControlsWidget( |     return CameraStreamView(); | ||||||
|       url: '$homeAssistantWebHost/api/camera_proxy_stream/$entityId?token=${this.attributes['access_token']}', |  | ||||||
|     ); |  | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -1,35 +1,37 @@ | |||||||
| part of '../../main.dart'; | part of '../../main.dart'; | ||||||
| 
 | 
 | ||||||
| class CameraControlsWidget extends StatefulWidget { | class CameraStreamView extends StatefulWidget { | ||||||
| 
 | 
 | ||||||
|   final String url; |   CameraStreamView({Key key}) : super(key: key); | ||||||
| 
 |  | ||||||
|   CameraControlsWidget({Key key, @required this.url}) : super(key: key); |  | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   _CameraControlsWidgetState createState() => _CameraControlsWidgetState(); |   _CameraStreamViewState createState() => _CameraStreamViewState(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| class _CameraControlsWidgetState extends State<CameraControlsWidget> { | class _CameraStreamViewState extends State<CameraStreamView> { | ||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   void initState() { |   void initState() { | ||||||
|     super.initState(); |     super.initState(); | ||||||
|     _connect(); |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   CameraEntity _entity; | ||||||
|  | 
 | ||||||
|   http.Client client; |   http.Client client; | ||||||
|   http.StreamedResponse response; |   http.StreamedResponse response; | ||||||
|   List<int> binaryImage = []; |   List<int> binaryImage = []; | ||||||
|   String cameraState = "Connecting..."; |   String cameraState = "Connecting..."; | ||||||
|   bool timeToStop = false; |   bool timeToStop = false; | ||||||
|   Completer streamCompleter; |   Completer streamCompleter; | ||||||
|  |   bool started = false; | ||||||
| 
 | 
 | ||||||
|   void _connect() async { |   void _connect() async { | ||||||
|  |     started = true; | ||||||
|     timeToStop = false; |     timeToStop = false; | ||||||
|  |     String streamUrl = '$homeAssistantWebHost/api/camera_proxy_stream/${_entity.entityId}?token=${_entity.attributes['access_token']}'; | ||||||
|     client = new http.Client(); // create a client to make api calls |     client = new http.Client(); // create a client to make api calls | ||||||
|     http.Request request = new http.Request("GET", Uri.parse(widget.url));  // create get request |     http.Request request = new http.Request("GET", Uri.parse(streamUrl));  // create get request | ||||||
|     Logger.d("[Sending] ==> ${widget.url}"); |     Logger.d("[Sending] ==> ${streamUrl}"); | ||||||
|     response = await client.send(request); |     response = await client.send(request); | ||||||
|     setState(() { |     setState(() { | ||||||
|       cameraState = "Starting..."; |       cameraState = "Starting..."; | ||||||
| @@ -126,6 +128,14 @@ class _CameraControlsWidgetState extends State<CameraControlsWidget> { | |||||||
| 
 | 
 | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|  |     if (!started) { | ||||||
|  |       _entity = EntityModel | ||||||
|  |           .of(context) | ||||||
|  |           .entityWrapper | ||||||
|  |           .entity; | ||||||
|  |       _connect(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     if (binaryImage.isEmpty) { |     if (binaryImage.isEmpty) { | ||||||
|       return Column( |       return Column( | ||||||
|         children: <Widget>[ |         children: <Widget>[ | ||||||
| @@ -50,6 +50,7 @@ part 'entity_widgets/common/mode_selector.dart'; | |||||||
| part 'entity_widgets/common/universal_slider.dart'; | part 'entity_widgets/common/universal_slider.dart'; | ||||||
| part 'entity_widgets/common/flat_service_button.dart'; | part 'entity_widgets/common/flat_service_button.dart'; | ||||||
| part 'entity_widgets/common/light_color_picker.dart'; | part 'entity_widgets/common/light_color_picker.dart'; | ||||||
|  | part 'entity_widgets/common/camera_stream_view.dart'; | ||||||
| part 'entity_widgets/entity_colors.class.dart'; | part 'entity_widgets/entity_colors.class.dart'; | ||||||
| part 'entity_widgets/entity_page_container.dart'; | part 'entity_widgets/entity_page_container.dart'; | ||||||
| part 'entity_widgets/history_chart/entity_history.dart'; | part 'entity_widgets/history_chart/entity_history.dart'; | ||||||
| @@ -73,7 +74,6 @@ part 'entity_widgets/controls/light_controls.dart'; | |||||||
| part 'entity_widgets/controls/media_player_widgets.dart'; | part 'entity_widgets/controls/media_player_widgets.dart'; | ||||||
| part 'entity_widgets/controls/fan_controls.dart'; | part 'entity_widgets/controls/fan_controls.dart'; | ||||||
| part 'entity_widgets/controls/alarm_control_panel_controls.dart'; | part 'entity_widgets/controls/alarm_control_panel_controls.dart'; | ||||||
| part 'entity_widgets/controls/camera_controls.dart'; |  | ||||||
| part 'settings.page.dart'; | part 'settings.page.dart'; | ||||||
| part 'configuration.page.dart'; | part 'configuration.page.dart'; | ||||||
| part 'home_assistant.class.dart'; | part 'home_assistant.class.dart'; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user