From d0c262f3cfeb4bb81ba02589a94624fa0c64bdb8 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 25 Jan 2024 17:29:26 +0100 Subject: [PATCH 1/2] Retry launching app --- pychromecast/controllers/receiver.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pychromecast/controllers/receiver.py b/pychromecast/controllers/receiver.py index e4f2f8343..3d6b86ad1 100644 --- a/pychromecast/controllers/receiver.py +++ b/pychromecast/controllers/receiver.py @@ -31,6 +31,8 @@ TYPE_LAUNCH = "LAUNCH" TYPE_LAUNCH_ERROR = "LAUNCH_ERROR" +LAUNCH_CANCELLED = "CANCELLED" + VOLUME_CONTROL_TYPE_ATTENUATION = "attenuation" VOLUME_CONTROL_TYPE_FIXED = "fixed" VOLUME_CONTROL_TYPE_MASTER = "master" @@ -175,6 +177,8 @@ def _send_launch_message( app_id: str, force_launch: bool, callback_function: CallbackType | None, + *, + retry_on_cancelled_error: bool = True, ) -> None: if force_launch or self.app_id != app_id: self.logger.info("Receiver:Launching app %s", app_id) @@ -182,6 +186,25 @@ def _send_launch_message( self.launch_failure = None def handle_launch_response(msg_sent: bool, response: dict | None) -> None: + if ( + msg_sent + and response + and response.get(MESSAGE_TYPE) == TYPE_LAUNCH_ERROR + and response.get(ERROR_REASON) == LAUNCH_CANCELLED + and not self._launch_error_listeners + and retry_on_cancelled_error + ): + self.logger.info( + "Receiver:Launching app %s failed, retrying once", app_id + ) + self._send_launch_message( + app_id, + force_launch, + callback_function, + retry_on_cancelled_error=False, + ) + return + if not callback_function: return From 685503f475f96fa4c0de7d5a6edcfb846585deb2 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 25 Jan 2024 19:55:08 +0100 Subject: [PATCH 2/2] Override pylint --- pychromecast/controllers/receiver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pychromecast/controllers/receiver.py b/pychromecast/controllers/receiver.py index 3d6b86ad1..070589dba 100644 --- a/pychromecast/controllers/receiver.py +++ b/pychromecast/controllers/receiver.py @@ -187,7 +187,7 @@ def _send_launch_message( def handle_launch_response(msg_sent: bool, response: dict | None) -> None: if ( - msg_sent + msg_sent # pylint: disable=too-many-boolean-expressions and response and response.get(MESSAGE_TYPE) == TYPE_LAUNCH_ERROR and response.get(ERROR_REASON) == LAUNCH_CANCELLED