Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-PyChromecast for
openSUSE:Factory checked in at 2023-06-01 17:20:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-PyChromecast (Old)
and /work/SRC/openSUSE:Factory/.python-PyChromecast.new.2531 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-PyChromecast"
Thu Jun 1 17:20:57 2023 rev:23 rq:1090244 version:13.0.7
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-PyChromecast/python-PyChromecast.changes
2023-01-03 15:05:53.826696076 +0100
+++
/work/SRC/openSUSE:Factory/.python-PyChromecast.new.2531/python-PyChromecast.changes
2023-06-01 17:20:59.338682713 +0200
@@ -1,0 +2,16 @@
+Thu Jun 1 10:07:16 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 13.0.7:
+ * Wait longer when attempting to play media (#720) @emontnemery
+ * Fix socket leak
+ * Don't call launch callback on error
+ * Wait for response when stopping app
+ * Simplify request callback handling
+ * Make sure handler is unregistered after quickplay
+ * Fix lint issues
+ * Add SVS Pro SoundBase
+ * Add JBL Link 10, 20, 300, 500
+ * Fix poll/select for Windows
+ * Add Smart Soundbar 10
+
+-------------------------------------------------------------------
Old:
----
PyChromecast-13.0.4.tar.gz
New:
----
PyChromecast-13.0.7.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-PyChromecast.spec ++++++
--- /var/tmp/diff_new_pack.GNu18K/_old 2023-06-01 17:20:59.842685700 +0200
+++ /var/tmp/diff_new_pack.GNu18K/_new 2023-06-01 17:20:59.850685748 +0200
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-PyChromecast
-Version: 13.0.4
+Version: 13.0.7
Release: 0
Summary: Python module to talk to Google Chromecast
License: MIT
++++++ PyChromecast-13.0.4.tar.gz -> PyChromecast-13.0.7.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/PKG-INFO
new/PyChromecast-13.0.7/PKG-INFO
--- old/PyChromecast-13.0.4/PKG-INFO 2022-12-13 08:18:42.790731700 +0100
+++ new/PyChromecast-13.0.7/PKG-INFO 2023-04-03 17:52:34.413555400 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: PyChromecast
-Version: 13.0.4
+Version: 13.0.7
Summary: Python module to talk to Google Chromecast.
Home-page: https://github.com/balloob/pychromecast
Author: Paulus Schoutsen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/PyChromecast.egg-info/PKG-INFO
new/PyChromecast-13.0.7/PyChromecast.egg-info/PKG-INFO
--- old/PyChromecast-13.0.4/PyChromecast.egg-info/PKG-INFO 2022-12-13
08:18:42.000000000 +0100
+++ new/PyChromecast-13.0.7/PyChromecast.egg-info/PKG-INFO 2023-04-03
17:52:34.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: PyChromecast
-Version: 13.0.4
+Version: 13.0.7
Summary: Python module to talk to Google Chromecast.
Home-page: https://github.com/balloob/pychromecast
Author: Paulus Schoutsen
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/pychromecast/__init__.py
new/PyChromecast-13.0.7/pychromecast/__init__.py
--- old/PyChromecast-13.0.4/pychromecast/__init__.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/__init__.py 2023-04-03
17:52:22.000000000 +0200
@@ -385,9 +385,19 @@
def quit_app(self):
"""Tells the Chromecast to quit current app_id."""
- self.logger.info("Quiting current app")
+ self.logger.info("Quitting current app")
- self.socket_client.receiver_controller.stop_app()
+ def stop_app_callback(_response):
+ """Set event when stop app request has been handled."""
+ stop_app_done.set()
+
+ stop_app_done = threading.Event()
+ self.socket_client.receiver_controller.stop_app(
+ callback_function_param=stop_app_callback
+ )
+ stop_app_done.wait(10)
+ if not stop_app_done.is_set():
+ self.logger.warning("Failed to stop app")
def volume_up(self, delta=0.1):
"""Increment volume by 0.1 (or delta) unless it is already maxed.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/pychromecast/const.py
new/PyChromecast-13.0.7/pychromecast/const.py
--- old/PyChromecast-13.0.4/pychromecast/const.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/const.py 2023-04-03
17:52:22.000000000 +0200
@@ -8,7 +8,9 @@
# Cast Audio group device, supports only audio
CAST_TYPE_GROUP = "group"
+MF_CANTON = "Canton Elektronik GmbH + Co. KG"
MF_GOOGLE = "Google Inc."
+MF_JBL = "JBL"
MF_LENOVO = "LENOVO"
MF_LG = "LG"
MF_MARSHALL = "Marshall"
@@ -16,6 +18,7 @@
MF_PHILIPS = "Philips"
MF_PIONEER = "Pioneer"
MF_SONY = "Sony"
+MF_SVS = "SVS"
MF_VIZIO = "Vizio"
MF_WNC = "wnc"
MF_XIAOMI = "Xiaomi"
@@ -36,6 +39,10 @@
"nest wifi point": (CAST_TYPE_AUDIO, MF_GOOGLE),
"bravia 4k vh2": (CAST_TYPE_CHROMECAST, MF_SONY),
"C4A": (CAST_TYPE_AUDIO, MF_SONY),
+ "JBL Link 10": (CAST_TYPE_AUDIO, MF_JBL),
+ "JBL Link 20": (CAST_TYPE_AUDIO, MF_JBL),
+ "JBL Link 300": (CAST_TYPE_AUDIO, MF_JBL),
+ "JBL Link 500": (CAST_TYPE_AUDIO, MF_JBL),
"lenovocd-24502f": (CAST_TYPE_AUDIO, MF_LENOVO),
"Lenovo Smart Display 7": (CAST_TYPE_CHROMECAST, MF_LENOVO),
"LG WK7 ThinQ Speaker": (CAST_TYPE_AUDIO, MF_LG),
@@ -45,7 +52,9 @@
"Pioneer VSX-1131": (CAST_TYPE_AUDIO, MF_PIONEER),
"Pioneer VSX-LX305": (CAST_TYPE_AUDIO, MF_PIONEER),
"shield android tv": (CAST_TYPE_CHROMECAST, MF_NVIDIA),
+ "Smart Soundbar 10": (CAST_TYPE_AUDIO, MF_CANTON),
"Stream TV": (CAST_TYPE_CHROMECAST, MF_WNC),
+ "SVS Pro SoundBase": (CAST_TYPE_AUDIO, MF_SVS),
"TPM191E": (CAST_TYPE_CHROMECAST, MF_PHILIPS),
"V705-H3": (CAST_TYPE_CHROMECAST, MF_VIZIO),
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyChromecast-13.0.4/pychromecast/controllers/homeassistant.py
new/PyChromecast-13.0.7/pychromecast/controllers/homeassistant.py
--- old/PyChromecast-13.0.4/pychromecast/controllers/homeassistant.py
2022-12-13 08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/controllers/homeassistant.py
2023-04-03 17:52:22.000000000 +0200
@@ -104,7 +104,7 @@
try:
if not self._hass_connecting_event.is_set():
self.logger.warning("_connect_hass failed for %s",
self.hass_url)
- raise PyChromecastError()
+ raise PyChromecastError() # pylint:
disable=broad-exception-raised
finally:
self._hass_connecting_event.set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyChromecast-13.0.4/pychromecast/controllers/media.py
new/PyChromecast-13.0.7/pychromecast/controllers/media.py
--- old/PyChromecast-13.0.4/pychromecast/controllers/media.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/controllers/media.py 2023-04-03
17:52:22.000000000 +0200
@@ -539,12 +539,12 @@
**kwargs,
callback_function=start_play_media_sent_callback,
)
- start_play_media_sent.wait(10)
+ start_play_media_sent.wait(30)
if not start_play_media_sent.is_set():
self.logger.warning(
"Quick Play failed for %s:%s(%s)", media_id, media_type, kwargs
)
- raise PyChromecastError()
+ raise PyChromecastError() # pylint: disable=broad-exception-raised
class MediaController(BaseMediaPlayer):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyChromecast-13.0.4/pychromecast/controllers/receiver.py
new/PyChromecast-13.0.7/pychromecast/controllers/receiver.py
--- old/PyChromecast-13.0.4/pychromecast/controllers/receiver.py
2022-12-13 08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/controllers/receiver.py
2023-04-03 17:52:22.000000000 +0200
@@ -79,9 +79,7 @@
self.status = None
self.launch_failure = None
- self.app_to_launch = None
self.cast_type = cast_type
- self.app_launch_event_function = None
self._status_listeners = []
self._launch_error_listeners = []
@@ -152,11 +150,19 @@
if force_launch or self.app_id != app_id:
self.logger.info("Receiver:Launching app %s", app_id)
- self.app_to_launch = app_id
- self.app_launch_event_function = callback_function
self.launch_failure = None
- self.send_message({MESSAGE_TYPE: TYPE_LAUNCH, APP_ID: app_id})
+ def handle_launch_response(response) -> None:
+ if not callback_function:
+ return
+
+ if response and response[MESSAGE_TYPE] == TYPE_RECEIVER_STATUS:
+ callback_function()
+
+ self.send_message(
+ {MESSAGE_TYPE: TYPE_LAUNCH, APP_ID: app_id},
+ callback_function=handle_launch_response,
+ )
else:
self.logger.info("Not launching app %s - already running", app_id)
if callback_function:
@@ -224,19 +230,11 @@
def _process_get_status(self, data):
"""Processes a received STATUS message and notifies listeners."""
status = self._parse_status(data, self.cast_type)
- is_new_app = self.app_id != status.app_id and self.app_to_launch
self.status = status
self.logger.debug("Received status: %s", self.status)
self._report_status()
- if is_new_app and self.app_to_launch == self.app_id:
- self.app_to_launch = None
- if self.app_launch_event_function:
- self.logger.debug("Start app_launch_event_function...")
- self.app_launch_event_function()
- self.app_launch_event_function = None
-
def _report_status(self):
"""Reports the current status to all listeners."""
for listener in self._status_listeners:
@@ -266,9 +264,6 @@
launch_failure = self._parse_launch_error(data)
self.launch_failure = launch_failure
- if self.app_to_launch:
- self.app_to_launch = None
-
self.logger.debug("Launch status: %s", launch_failure)
for listener in self._launch_error_listeners:
@@ -285,6 +280,5 @@
self.status = None
self.launch_failure = None
- self.app_to_launch = None
self._status_listeners = []
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyChromecast-13.0.4/pychromecast/controllers/supla.py
new/PyChromecast-13.0.7/pychromecast/controllers/supla.py
--- old/PyChromecast-13.0.4/pychromecast/controllers/supla.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/controllers/supla.py 2023-04-03
17:52:22.000000000 +0200
@@ -60,4 +60,4 @@
)
play_media_done_event.wait(10)
if not play_media_done_event.is_set():
- raise PyChromecastError()
+ raise PyChromecastError() # pylint: disable=broad-exception-raised
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/PyChromecast-13.0.4/pychromecast/controllers/yleareena.py
new/PyChromecast-13.0.7/pychromecast/controllers/yleareena.py
--- old/PyChromecast-13.0.4/pychromecast/controllers/yleareena.py
2022-12-13 08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/controllers/yleareena.py
2023-04-03 17:52:22.000000000 +0200
@@ -72,4 +72,4 @@
play_media_done_event.wait(10)
if not play_media_done_event.is_set():
- raise PyChromecastError()
+ raise PyChromecastError() # pylint: disable=broad-exception-raised
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/pychromecast/quick_play.py
new/PyChromecast-13.0.7/pychromecast/quick_play.py
--- old/PyChromecast-13.0.4/pychromecast/quick_play.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/quick_play.py 2023-04-03
17:52:22.000000000 +0200
@@ -74,6 +74,7 @@
cast.register_handler(controller)
- controller.quick_play(**data)
-
- cast.unregister_handler(controller)
+ try:
+ controller.quick_play(**data)
+ finally:
+ cast.unregister_handler(controller)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/pychromecast/socket_client.py
new/PyChromecast-13.0.7/pychromecast/socket_client.py
--- old/PyChromecast-13.0.4/pychromecast/socket_client.py 2022-12-13
08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/pychromecast/socket_client.py 2023-04-03
17:52:22.000000000 +0200
@@ -56,6 +56,8 @@
CONNECTION_STATUS_FAILED_RESOLVE = "FAILED_RESOLVE"
# The socket connection was lost and needs to be retried
CONNECTION_STATUS_LOST = "LOST"
+# Check for select poll method
+SELECT_HAS_POLL = hasattr(select, "poll")
HB_PING_TIME = 10
HB_PONG_TIME = 10
@@ -206,7 +208,7 @@
self.destination_id = None
self.session_id = None
self._request_id = 0
- # dict mapping requestId on threading.Event objects
+ # dict mapping requestId to callback functions
self._request_callbacks = {}
self._open_channels = []
@@ -239,10 +241,6 @@
self.socket.close()
self.socket = None
- # Make sure nobody is blocking.
- for callback in self._request_callbacks.values():
- callback["event"].set()
-
self.app_namespaces = []
self.destination_id = None
self.session_id = None
@@ -281,6 +279,10 @@
if now < retry["next_retry"]:
continue
try:
+ if self.socket is not None:
+ self.socket.close()
+ self.socket = None
+
self.socket = new_socket()
self.socket.settimeout(self.timeout)
self._report_connection_status(
@@ -555,7 +557,7 @@
Use run_once() in your own main loop after you
receive something on the socket (get_socket()).
"""
- # pylint: disable=too-many-branches, too-many-return-statements
+ # pylint: disable=too-many-branches, too-many-statements,
too-many-return-statements
try:
if not self._check_connection():
@@ -565,15 +567,19 @@
# poll the socket, as well as the socketpair to allow us to be
interrupted
rlist = [self.socket, self.socketpair[0]]
- # Map file descriptors to socket objects because select.select does
not support fd > 1024
- #
https://stackoverflow.com/questions/14250751/how-to-increase-filedescriptors-range-in-python-select
- fd_to_socket = {rlist_item.fileno(): rlist_item for rlist_item in
rlist}
try:
- poll_obj = select.poll()
- for poll_fd in rlist:
- poll_obj.register(poll_fd, select.POLLIN)
- poll_result = poll_obj.poll(timeout * 1000) # timeout in
milliseconds
- can_read = [fd_to_socket[fd] for fd, _status in poll_result]
+ if SELECT_HAS_POLL is True:
+ # Map file descriptors to socket objects because select.select
does not support fd > 1024
+ #
https://stackoverflow.com/questions/14250751/how-to-increase-filedescriptors-range-in-python-select
+ fd_to_socket = {rlist_item.fileno(): rlist_item for rlist_item
in rlist}
+
+ poll_obj = select.poll()
+ for poll_fd in rlist:
+ poll_obj.register(poll_fd, select.POLLIN)
+ poll_result = poll_obj.poll(timeout * 1000) # timeout in
milliseconds
+ can_read = [fd_to_socket[fd] for fd, _status in poll_result]
+ else:
+ can_read, _, _ = select.select(rlist, [], [], timeout)
except (ValueError, OSError) as exc:
self.logger.error(
"[%s(%s):%s] Error in select call: %s",
@@ -638,15 +644,8 @@
# See if any handlers will accept this message
self._route_message(message, data)
- if REQUEST_ID in data:
- callback = self._request_callbacks.pop(data[REQUEST_ID], None)
- if callback is not None:
- event = callback["event"]
- callback["response"] = data
- function = callback["function"]
- event.set()
- if function:
- function(data)
+ if REQUEST_ID in data and data[REQUEST_ID] in self._request_callbacks:
+ self._request_callbacks.pop(data[REQUEST_ID], None)(data)
return 0
@@ -704,7 +703,6 @@
"""Route message to any handlers on the message namespace"""
# route message to handlers
if message.namespace in self._handlers:
-
# debug messages
if message.namespace != NS_HEARTBEAT:
self.logger.debug(
@@ -913,11 +911,7 @@
try:
if callback_function:
if not no_add_request_id:
- self._request_callbacks[request_id] = {
- "event": threading.Event(),
- "response": None,
- "function": callback_function,
- }
+ self._request_callbacks[request_id] = callback_function
else:
callback_function(None)
self.socket.sendall(be_size + msg.SerializeToString())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/PyChromecast-13.0.4/setup.py
new/PyChromecast-13.0.7/setup.py
--- old/PyChromecast-13.0.4/setup.py 2022-12-13 08:18:33.000000000 +0100
+++ new/PyChromecast-13.0.7/setup.py 2023-04-03 17:52:22.000000000 +0200
@@ -5,7 +5,7 @@
setup(
name="PyChromecast",
- version="13.0.4",
+ version="13.0.7",
license="MIT",
url="https://github.com/balloob/pychromecast",
author="Paulus Schoutsen",