|
|
- """Discover Yamaha Receivers."""
- from . import SSDPDiscoverable
-
-
- class Discoverable(SSDPDiscoverable):
- """Add support for discovering Yamaha Receivers."""
-
- INCOMPATIBLE_MODELS = set('N301')
-
- REMOTE_CONTROL_SPEC_TYPE =\
- 'urn:schemas-yamaha-com:service:X_YamahaRemoteControl:1'
-
- def info_from_entry(self, entry):
- """Return the most important info from a uPnP entry."""
- info = super().info_from_entry(entry)
-
- yam = entry.description['X_device']
- services = yam['X_serviceList']['X_service']
- if isinstance(services, list):
- service = next(
- (s for s in services
- if s['X_specType'] == self.REMOTE_CONTROL_SPEC_TYPE),
- services[0])
- else:
- service = services
- # do a slice of the second element so we don't have double /
- info['control_url'] = yam['X_URLBase'] + service['X_controlURL'][1:]
- info['description_url'] = (yam['X_URLBase'] +
- service['X_unitDescURL'][1:])
-
- return info
-
- def get_entries(self):
- """Get all the Yamaha uPnP entries."""
- devices = self.find_by_device_description({
- "manufacturer": "Yamaha Corporation",
- "deviceType": "urn:schemas-upnp-org:device:MediaRenderer:1"
- })
-
- return [device for device in devices if
- device.description['device'].get('modelNumber', '') not in
- self.INCOMPATIBLE_MODELS]
|