# setup logger
logger = logging.getLogger()
logformat = logging.Formatter(
- "%(asctime)-15s %(levelname)-5s %(name)s.%(module)s -- %(message)s"
+ "%(asctime)-15s %(levelname)-5s %(name)s -- %(message)s"
)
consolehandler = logging.StreamHandler()
consolehandler.setFormatter(logformat)
"""All constants for Music Assistant."""
-__version__ = "0.0.53"
+__version__ = "0.0.54"
REQUIRED_PYTHON_VER = "3.7"
# configuration keys/attributes
from music_assistant.models.provider import ProviderType
from passlib.hash import pbkdf2_sha256
-LOGGER = logging.getLogger("config")
+LOGGER = logging.getLogger("config_manager")
DEFAULT_PLAYER_CONFIG_ENTRIES = [
ConfigEntry(
# pylint: disable=too-many-public-methods
# pylint: disable=too-few-public-methods
-LOGGER = logging.getLogger("mass")
+LOGGER = logging.getLogger("player_queue")
class QueueOption(Enum):
Returns None if queue is empty.
"""
- if self.cur_index is None or not len(self.items) > self.cur_index:
+ cur_item = self.cur_item
+ if not cur_item:
return None
- return self.items[self.cur_index].queue_item_id
+ return cur_item.queue_item_id
@property
def cur_item(self) -> Optional[QueueItem]:
Returns None if queue is empty.
"""
- if self.cur_index is None or not len(self.items) > self.cur_index:
+ if (
+ self.cur_index is None
+ or not self.items
+ or not len(self.items) > self.cur_index
+ ):
return None
return self.items[self.cur_index]
PlayerFeature,
)
-LOGGER = logging.getLogger("mass")
+LOGGER = logging.getLogger("player_state")
# List of all player_state attributes
PLAYER_ATTRIBUTES = [
# pylint: disable=unused-argument
if uuid is None:
return # Discovered chromecast without uuid
+
service = self._listener.services[cast_uuid]
cast_info = ChromecastInfo(
services=service[0],
port=service[5],
)
player_id = cast_info.uuid
- player = self.mass.players.get_player(player_id)
- if player:
- # player already added, the player will take care of reconnects itself.
- self.mass.add_job(player.set_cast_info, cast_info)
- return
LOGGER.debug(
"Chromecast discovered: %s (%s)", cast_info.friendly_name, player_id
)
- player = ChromecastPlayer(self.mass, cast_info)
+ player = self.mass.players.get_player(player_id)
+ if not player:
+ player = ChromecastPlayer(self.mass, cast_info)
+ # if player was already added, it player will take care of reconnects itself.
self.mass.add_job(player.set_cast_info, cast_info)
self.mass.add_job(self.mass.players.async_add_player(player))
def set_cast_info(self, cast_info: ChromecastInfo) -> None:
"""Set the cast information and set up the chromecast object."""
self._cast_info = cast_info
- if self._chromecast and not self._chromecast.socket_client.is_connected:
- self.disconnect()
+ if self._chromecast and not self._available:
+ try:
+ self.disconnect()
+ except Exception as exc: # pylint: disable=broad-except
+ LOGGER.exception(exc)
elif self._chromecast is not None:
return
LOGGER.debug(
mz_controller = MultizoneController(chromecast.uuid)
chromecast.register_handler(mz_controller)
chromecast.mz_controller = mz_controller
- self.mass.add_job(self._chromecast.start)
+ self._chromecast.start()
def disconnect(self) -> None:
"""Disconnect Chromecast object if it is set."""
+ self._available = False
if self._chromecast is None:
return
LOGGER.warning(
"[%s] Disconnecting from chromecast socket", self._cast_info.friendly_name
)
- self._available = False
if (
self._chromecast.socket_client
and not self._chromecast.socket_client.is_stopped
):
- self.mass.add_job(self._chromecast.disconnect)
+ self._chromecast.disconnect()
self._invalidate()
def _invalidate(self) -> None:
"""Try to execute Chromecast command."""
def handle_command(func, *args, **kwarg):
- if not self._chromecast.socket_client.is_connected:
- return
+ if (
+ not self._chromecast
+ or not self._chromecast.socket_client
+ or not self._available
+ ):
+ LOGGER.error(
+ "Error while executing command on player %s: Chromecast is not available!"
+ )
try:
return func(*args, **kwargs)
- except Exception as exc: # pylint: disable=broad-except
+ except (
+ pychromecast.NotConnected,
+ pychromecast.ChromecastConnectionError,
+ ) as exc:
LOGGER.error(
"Error while executing command on player %s: %s",
self.name,
str(exc),
)
+ self._available = False
+ except Exception as exc: # pylint: disable=broad-except
+ LOGGER.exception(exc)
self.mass.add_job(handle_command, func, *args, **kwargs)
PROV_ID = "mass"
PROV_NAME = "Music Assistant"
-LOGGER = logging.getLogger(PROV_ID)
+LOGGER = logging.getLogger("mass_provider")
CONFIG_ENTRIES = []
PLAYER_CONFIG_ENTRIES = []
self._muted = data["muted"]
if "state" in data:
self._state = PlaybackState(data["state"])
- if "cur_time" in data:
+ if "elapsed_time" in data:
self._elapsed_time = data["elapsed_time"]
if "current_uri" in data:
self._current_uri = data["current_uri"]