Skip to content

Commit

Permalink
Lookup manufacturer, remove multizone helper. (#345)
Browse files Browse the repository at this point in the history
* Lookup manufacturer, remove multizone helper.
  • Loading branch information
emontnemery authored Apr 8, 2020
1 parent 70d9d42 commit 64d7fb1
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 70 deletions.
9 changes: 5 additions & 4 deletions pychromecast/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@
get_device_status,
reboot,
DeviceStatus,
CAST_TYPES,
CAST_TYPE_CHROMECAST,
)
from .const import CAST_MANUFACTURERS, CAST_TYPES, CAST_TYPE_CHROMECAST
from .controllers.media import STREAM_TYPE_BUFFERED # noqa

__all__ = ("__version__", "__version_info__", "get_chromecasts", "Chromecast")
Expand All @@ -39,10 +38,11 @@ def _get_chromecast_from_host(
ip_address, port, uuid, model_name, friendly_name = host
_LOGGER.debug("_get_chromecast_from_host %s", host)
cast_type = CAST_TYPES.get(model_name.lower(), CAST_TYPE_CHROMECAST)
manufacturer = CAST_MANUFACTURERS.get(model_name.lower(), "Google Inc.")
device = DeviceStatus(
friendly_name=friendly_name,
model_name=model_name,
manufacturer=None,
manufacturer=manufacturer,
uuid=uuid,
cast_type=cast_type,
)
Expand All @@ -67,10 +67,11 @@ def _get_chromecast_from_service(
services, zconf, uuid, model_name, friendly_name = services
_LOGGER.debug("_get_chromecast_from_service %s", services)
cast_type = CAST_TYPES.get(model_name.lower(), CAST_TYPE_CHROMECAST)
manufacturer = CAST_MANUFACTURERS.get(model_name.lower(), "Google Inc.")
device = DeviceStatus(
friendly_name=friendly_name,
model_name=model_name,
manufacturer=None,
manufacturer=manufacturer,
uuid=uuid,
cast_type=cast_type,
)
Expand Down
25 changes: 25 additions & 0 deletions pychromecast/const.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""
Chromecast constants
"""
# Regular chromecast, supports video/audio
CAST_TYPE_CHROMECAST = "cast"
# Cast Audio device, supports only audio
CAST_TYPE_AUDIO = "audio"
# Cast Audio group device, supports only audio
CAST_TYPE_GROUP = "group"

MF_GOOGLE = "Google Inc."

CAST_TYPES = {
"chromecast": CAST_TYPE_CHROMECAST,
"eureka dongle": CAST_TYPE_CHROMECAST,
"chromecast audio": CAST_TYPE_AUDIO,
"google home": CAST_TYPE_AUDIO,
"google home mini": CAST_TYPE_AUDIO,
"google cast group": CAST_TYPE_GROUP,
}

# Known models not manufactured by Google
CAST_MANUFACTURERS = {
}

66 changes: 2 additions & 64 deletions pychromecast/dial.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,6 @@

FORMAT_BASE_URL = "http://{}:8008"

# Regular chromecast, supports video/audio
CAST_TYPE_CHROMECAST = "cast"
# Cast Audio device, supports only audio
CAST_TYPE_AUDIO = "audio"
# Cast Audio group device, supports only audio
CAST_TYPE_GROUP = "group"

CAST_TYPES = {
"chromecast": CAST_TYPE_CHROMECAST,
"eureka dongle": CAST_TYPE_CHROMECAST,
"chromecast audio": CAST_TYPE_AUDIO,
"google home": CAST_TYPE_AUDIO,
"google home mini": CAST_TYPE_AUDIO,
"google cast group": CAST_TYPE_GROUP,
}

_LOGGER = logging.getLogger(__name__)


Expand Down Expand Up @@ -90,16 +74,13 @@ def get_device_status(host, services=None, zconf=None):
status = _get_status(host, services, zconf, "/setup/eureka_info?options=detail")

friendly_name = status.get("name", "Unknown Chromecast")
# model_name and manufacturer is no longer included in the response,
# mark as unknown
model_name = "Unknown model name"
manufacturer = "Unknown manufacturer"
if "detail" in status:
model_name = status["detail"].get("model_name", model_name)
manufacturer = status["detail"].get("manufacturer", manufacturer)

udn = status.get("ssdp_udn", None)

cast_type = CAST_TYPES.get(model_name.lower(), CAST_TYPE_CHROMECAST)

uuid = None
if udn:
uuid = UUID(udn.replace("-", ""))
Expand All @@ -110,49 +91,6 @@ def get_device_status(host, services=None, zconf=None):
return None


def get_multizone_status(host, services=None, zconf=None):
"""
:param host: Hostname or ip to fetch status from
:type host: str
:return: The multizone status as a named tuple.
:rtype: pychromecast.dial.MultizoneStatus or None
"""

try:
status = status = _get_status(
host, services, zconf, "/setup/eureka_info?params=multizone"
)

dynamic_groups = []
if "multizone" in status and "dynamic_groups" in status["multizone"]:
for group in status["multizone"]["dynamic_groups"]:
name = group.get("name", "Unknown group name")
udn = group.get("uuid", None)
uuid = None
if udn:
uuid = UUID(udn.replace("-", ""))
dynamic_groups.append(MultizoneInfo(name, uuid))

groups = []
if "multizone" in status and "groups" in status["multizone"]:
for group in status["multizone"]["groups"]:
name = group.get("name", "Unknown group name")
udn = group.get("uuid", None)
uuid = None
if udn:
uuid = UUID(udn.replace("-", ""))
groups.append(MultizoneInfo(name, uuid))

return MultizoneStatus(dynamic_groups, groups)

except (requests.exceptions.RequestException, OSError, ValueError):
return None


DeviceStatus = namedtuple(
"DeviceStatus", ["friendly_name", "model_name", "manufacturer", "uuid", "cast_type"]
)

MultizoneInfo = namedtuple("MultizoneInfo", ["friendly_name", "uuid"])

MultizoneStatus = namedtuple("MultizoneStatus", ["dynamic_groups", "groups"])
2 changes: 1 addition & 1 deletion pychromecast/socket_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from . import cast_channel_pb2
from .controllers import BaseController
from .controllers.media import MediaController
from .dial import CAST_TYPE_CHROMECAST, CAST_TYPE_AUDIO, CAST_TYPE_GROUP
from .const import CAST_TYPE_AUDIO, CAST_TYPE_CHROMECAST, CAST_TYPE_GROUP
from .discovery import get_info_from_service, get_host_from_service_info
from .error import (
ChromecastConnectionError,
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setup(
name="PyChromecast",
version="4.2.0",
version="4.2.1",
license="MIT",
url="https://github.com/balloob/pychromecast",
author="Paulus Schoutsen",
Expand Down

0 comments on commit 64d7fb1

Please sign in to comment.