* Fix Sonos album art for non-radio streams
* Revert "Fix Sonos album art for non-radio streams"
This reverts commit d71502d18f.
* Fix Sonos album art for non-radio streams
* Move art existance check into _format_media_image_url
Updated the schema check to accept any string
Search custom sources in app title and app id
The makes the short list redundant and thus removed
Tested by adding livetv, netflix, youtube, makovod and others
This is also compatible with the list that was supported till now
so current users won't see any difference.
Signed-off-by: Roi Dayan <roi.dayan@gmail.com>
* Removed return False so the Panasonic Viera TV can be added even if it doesn't connect
* Removed return False so the Panasonic Viera TV can be added even if it doesn't connect
* Removed return False so the Panasonic Viera TV can be added even if it doesn't connect
* Remove try/except to connect to the TV
* Update panasonic_viera.py
* Update panasonic_viera.py
* Added Volume Set option and autodiscovery functions to Denon AVR receivers
* Corrected issues in SSDP discovery and in case no host could be discovered
* Corrected discovery handling / added denonavr to discovery platform
* No needless discoveries anymore / add_devices() with list instead of loop
* TTS Component / Google speech platform
* Change file backend handling / cache
* Use mimetype / rename Provider function / allow cache on service call
* Add a memcache for faster response
* Add demo platform
* First version of unittest
* Address comments
* improve error handling / address comments
* Add google unittest & check http response code
* Change url param handling
* add test for other language
* Change hash to sha256 for same hash on every os/hardware
* add unittest for receive demo data
* add test for error cases
* Test case load from file to mem over aiohttp server
* Use cache SpeechManager level, address other comments
* Add service for clear cache
* Update service.yaml
* add support for spliting google message
* Add media position support and trailer type to Emby
* Adjustments to mitigate TypeError
* Simplify media_position property
* Update handling when data isn't available
* Update emby.py
* Add debug level logging of messages in denon
* Added media stop for Denon AVR Media Player
* Sort source list
* Rework input selection for Denon AVR
This reworks the input selection, adding more modes and making it so
that the media controls are only announced in modes where they actually
makes sense.
* Added real media info for Denon AVR Media modes
* Read more configuration from denon devices
This reads network name, and overrides the local name with that.
This also reads the source names and reconfigures the input list to
those names, and also reads the source deleted list and removes the
inputs that are set to deleted in the device.
* Discover and handle max volume in Denon media player
* Rework source discovery in Denon media player
This uses SSFUN as authorative source for which sources that we should
present.
* Add source_list to universal media player
* Expanded attirubte and command support for UMP
Added support to the universal media player
for the following:
Volume Set
Current Source
Set Source
Current Volume
The goal is to facilitate a single-card media player
that includes source selection and setting the volume
of the receiver.
Example setup:
```
media_player:
- platform: universal
name: Media Center
children:
- media_player.kodi
- media_player.cast
commands:
select_source:
service: media_player.select_source
data:
entity_id: media_player.receiver
volume_set:
service: media_player.volume_set
data:
entity_id: media_player.receiver
volume_mute:
service: media_player.volume_mute
data:
entity_id: media_player.receiver
turn_on:
service: homeassistant.turn_on
data:
entity_id: media_player.receiver
turn_off:
service: homeassistant.turn_off
data:
entity_id: media_player.receiver
attributes:
state: media_player.receiver
is_volume_muted: media_player.receiver|is_volume_muted
volume_level: media_player.receiver|volume_level
source: media_player.receiver|source
source_list: media_player.receiver|source_list
```
* Remove print statements
* Change service call back to use call_from_config
* Modified service calls to use template data
* linting fixes
* Add tests
* linting fices
* More pylinting
If the mpd client ran into an socket timeout, the socket will raise an
OSError on every further request. This adds OSError to the list of
excptions, that causes a client reconnect.
This fixes#4650
Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
In media_content_id() the "id" of the current song was returned. as
stated in bug #4652 the id is only the Tracklist-Id in the current
tracklist and is omitted if the track is not part of a tracklist (what
caused the bug in the first place).
To match the semantics described in the dockstring, to return a "Content
ID", this chooses the filename of the current song as id and returns
it.
It also uses get() instead of [] to prevent KeyError.
This fixes bug #4652
Signed-off-by: Jan Losinski <losinski@wh2.tu-dresden.de>
* Add channel switching for philips tvs.
* Disable track buttons when not watching tv.
* Undo isort config.
* Yes it does.
* Just testing some assumption on hound's flake8 behaviour.
* Revert "Just testing some assumption on hound's flake8 behaviour."
This reverts commit ff9940b39e.
* poke
* Implement WAQI sensor
* Corrections based on CI check.
* Updated requirements_all.txt for pwaqi==1.2
* Require latest version of pwaqi
* Initial implementation of DuneHD media player component based on pdunehd.
* Major: avoid update() in property fetch,
Major: implement source support,
Major: single device per media player instance,
Major: support for volume / mute controls
* Pythonify pdunehd.
Support media_title.
* Fix pylint.
* Further pylint.
* docstring
* Formatting and indentation.
* Change indentation to spaces.
* Update coverage and recorded requirements before PR.
* Further pylint / fake8 / pydocstyle fixes.
* Implement next / prev track,
Properly decode blu-ray playback,
Attempt to decode media title
* Fix play / pause
Linting
* Update requirements.
Fix lint.
* Fix lint and syntax error
* Yet more linting.
* Yet more linting.
* Fix lint: line too long.
* Force update of HA state.
* Added support for media_position property to media_player + implementation for sonos.
* Pla yback progress now updates without needed state transitions in HA.
* Linting fixes
* media_position_update_at property is now a datetime.
* Minor fix.
* Linting fixes.
* Move HTTP to own folder
* Break HTTP into middlewares
* Lint
* Split tests per middleware
* Clean up HTTP tests
* Make HomeAssistantViews more stateless
* Lint
* Make HTTP setup async
* Added source selection for Denon AVR Media Player
* Update denon.py
* Update denon.py
* Update denon.py
* Update denon.py
* Update denon.py
slight format update (space issue and new line)
* Further update regarding formatting
* Updated the source name with lowercase
* Update denon.py
* Migrate callbacks to use schedule_update_ha_state
* Migrate MQTT sensor callback to async
* Migrate wemo to not update inside schedule_update_ha_state
* Make MQTT switch async
* Fix nx584 test
* Migrate tellstick callback
* Migrate vera callback
* Alarm control panel - manual: use async callbacks
* Run the switch rest tests that work
This makes it so that media playback support for inputs is dynamically
fetched from the receiver, instead of assuming that all playback
commands work for all inputs.
Tests are added for this, using a FakeYamaha class, which has some
sample data stubbed in for key methods that need to be called. We also
include an example of the desc.xml needed to dynamically parse these
features for these tests (as this is done in platform init).
* Fix "argument of type 'NoneType' is not iterable" during discovery
When yamaha receivers are dynamically discovered, there config is
empty, which means that we need to set zone_ignore to [] otherwise the
iteration over receivers fails.
* Bump rxv library version to fix play_status bug
rxv version 0.3 will issue the play_status command even for sources
that don't support it, causing stack traces during updates when
receivers are on HDMI inputs.
This was fixed in rxv 0.3.1. Bump to fix bug #4226.
* Don't discovery receivers that we've already configured
The discovery component doesn't know anything about already configured
receivers. This means that specifying a receiver manually will make it
show up twice if you have the discovery component enabled.
This puts a platform specific work around here that ensures that if
the media_player is found, we ignore the discovery system.
* Added support for Philips Tvs with JointSpace API
* Flake + Lint fixes
* Lint be like "lol fu"
* Changes as requested by reviewers, except lib-requirement
* Switched to library-usage
* lint... newline-bingo...
* Sonos responsiveness improvements (async_ coroutines, event based updating, album art caching) + Better radio station information
* Docstring fixes.
* Docstring fixes.
* Updated SoCo dependency + fixed file permissions.
* Only fetch speaker info if needed.
* PEP8 fixes
* Fixed SoCoMock.get_speaker_info to get test to pass.
* Regenerated requirements_all.txt + async fetching of album art with caching + added http_session to HomeAssistant object.
* Unit test fixed.
* Add blank line as per flake8
* Fixed media image proxy unit test.
* Removed async stuff.
* Removed last remnants of async stuff.
* Add Emby Server media_player component
* Code cleanup, move to request sessions, generate UUID per session
* Make media image fetch more robust
* Allow for http or https
* Cleanup some Keyerror conditions found through more testing
* Move EmbyRemote to pip, update requirements
* Code cleanup, add SSL config option
* Add zone_ignore option for yamaha.
We attempt to discover all zones for yamaha receivers. There are times
when users may want to suppress some zones from showing up. When a
Zone isn't actually connected to speakers, or on some newer receivers
where Zone_4 is an HDMI only zone, that doesn't support even basic
media_player UI.
This provide a mechanism for users to do that.
Fixes#4088
* Update yamaha.py
This uses the discovery code from netdisco/ha to discover yamaha
receivers. The old discovery code remains if discovery is turned of in
HA, at least for now. Though it probably is worth turning that off in
the future.
* Sonos improvements: media_* properties delegate to coordinator if speaker is a slave, media_image_url and media_title now works for radio streams, source selection/list takes speaker model into account, commands on slaves delegate to coordinator.
* Fixed failing unit tests.
* Adds support for Pioneer AVR interface port number
https://community.home-assistant.io/t/support-for-pioneer-avr/503
telnetlib supports a port number so adding port as
an optional config element with a default of 23 resolves this.
* Adds timeout to Pioneer AVR
timeout in telnetlib defaults to socket._GLOBAL_DEFAULT_TIMEOUT
which is not a value, but rather a bare Object used for comparison.
telnetlib says the following about the timeout optional argument:
"The optional timeout parameter specifies a timeout in seconds
for blocking operations like the connection attempt (if not
specified, the global default timeout setting will be used)."
From the documentation for sockets:
"Sockets are by default always created in blocking mode"
Catching connect and timeout errors, logging to debug
and continuing.
* Catches timeout exceptions, logs and continues.
* Work better with password-protected Squeezebox / LMS servers, including getting file art. Refactored to only have a single method calling the telent lib. (Should make it easier to convert to the more appropriate JSON interface)
* Update squeezebox.py
* Update squeezebox.py
* Update squeezebox.py
* Update squeezebox.py
* Update squeezebox.py
Changelog: https://github.com/SoCo/SoCo/releases/tag/v0.12
Backwards Compatability changes:
Dropped support for Python 3.2
Methods relating to the music library (get_artists, get_album_artists, get_albums and others) have been moved to the music_library module. Instead of device.get_album_artists(), please now use device.music_library.get_album_artists() etc. Old code will continue to work for the moment, but will raise deprecation warnings
Made a hard deprecation of the Spotify plugin since the API it relied on has been deprecated and it therefore no longer worked
Dropped pylint checks for Python 2.6
* Enhance yamaha component
This enhances the yamaha component to create 1 player per zone,
instead of only one play, which provides direct control of the various
zones for the player.
It also exposes play_media for NET_RADIO sources, which allows direct
setting of that.
This requires code changes in rxv 0.2.0, so the requirement dependency
is raised.
* Support current playback metadata for NET_RADIO
When on NET RADIO, support the currently playing information.
* Fixes an issue where Chromecast audio groups were not properly discovered
* Forgot to commit the main fix
* Removes unused variable
* Doesn't use a protected API anymore
* PR remarks
* Fixes tests, adds comment
* Restores line as it was in the original commit, rephrases comment
* Should fix lint issues
* Trailing whitespace
* Some more lint
* Added play media to squeezebox
The squeezebox component can now add a URI to an existing playlist or just over write it to force a stream to play.
* Cleaned up flake8 issues with formatting.
Spacing... The end of the world! Fixed. Once day the tools will fix this on the fly, one day...
[x] ./homeassistant/components/media_player/squeezebox.py:307:1: W293 blank line contains whitespace
[x] ./homeassistant/components/media_player/squeezebox.py:366:1: W391 blank line at end of file
[x] ./homeassistant/components/media_player/squeezebox.py:366:1: W293 blank line contains whitespace
Updated SUPPORT_SQUEEZEBOX to add SUPPORT_PLAY_MEDIA
[x] ./homeassistant/components/media_player/squeezebox.py:13:1: F401 'homeassistant.components.media_player.SUPPORT_PLAY_MEDIA' imported but unused
* Updates from review
Updated the comments to indicate they are developer / API comments and not for end users.
Marked the private functions with a leading underscore (_)
* Fixed Lint issues.
202ERROR: InvocationError: '/home/travis/build/home-assistant/home-assistant/.tox/lint/bin/flake8'
203lint runtests: commands[1] | pylint homeassistant
204************* Module homeassistant.components.media_player.squeezebox
205C:322, 0: Trailing whitespace (trailing-whitespace)
* Added the possibility to manually specify a Yamaha Receiver
* Added the possibility to manually specify a Yamaha AVR
* Using string formatting
* Hostname checks for None now
* Do not use add_devices for each if-branch separately
* Fixed linting
* Implemented onkyo reconnect
Connection object is cleared after a failed command. It will be
automatically recreated upon the next command running. This should allow
for failed connections to be restored.
* Remove reduntant error catching
* Run all update commands with command wrapper.
* Handle errors better
* Removed unused global
I have no idea how that got there.
Currently there are only hw inputs in the sources list.
Other interesting inputs can be live tv (dvbt) and vod apps.
* add customize option for webos
* add short names for livetv, youtube, mako apps
* add current app as a source
* use large icon (largeIcon is the same as icon if doesn't exists)
* filter out hw inputs that are not connected
Signed-off-by: Roi Dayan <roi.dayan@gmail.com>
* Update to latest Plex API, add music support.
* Fix PyLint errors.
* Update Plex sensor module to latest PlexAPI.
* Oops - update Python sensor import.
* According to PlexAPI docs, this is the new API for Plex Pass members.
* More pylint STFUs.
* Move pylint suppression.
* Use plexapi NA type directly.
* Pylint objects to short variable names.
* Initial media_player component for the MPC-HC web API.
* Update .coveragerc to exclude the MPC-HC media player component.
* We don't need a session for every HTTP fetch.
* Use host in configuration YAML to match Kodi component.
* Fix PyLint errors.
* Fix PEP8 errors and use more idiomatic Python to get dict() values.
* Add MPC-HC remote command capabilities for basic control.
* add media_player/clear_playlist and line-in/tv support to sonos
* add support source radio
* fix bug
* print TV/Line-In as media_title
* implement universal player
* add to demo platform
* Update demo.py
Better handling for demo object
* add unit tests
* fix unit test
* Replace switch with lock
* Update docstrings
* Add link to docs
* Add link to docs and update docstrings
* Update docstring
* Update docstrings and fix typos
* Add link to docs
* Add link to docs
* Add link to docs and update docstrings
* Fix link to docs and update docstrings
* Remove blank line
* Add link to docs
* Stick version numbers
* Move elevation to core config
* Migrate forecast test to requests-mock
* Migrate YR tests to requests-mock
* Add requests_mock to requirements_test.txt
* Move conf code from bootstrap to config
* More config fixes
* Fix some more issues
* Add test for set config and failing auto detect
* Added Sony Bravia support to HA
* Improvements to make it work on my poor raspberry 1
* Just a typo
* A few fixes in order to pass pylint
* - Remove noqa: was due to the 80 characters max per line restriction
- Move communication logic to a separate library at https://github.com/aparraga/braviarc.git
- Added dependency and adapt the code according to that
* A few improvements
* Just a typo in a comment
* Rebase from HM/dev
* Update requirements by executing the script/gen_requirements_all.py
* More isolation level for braviarc lib
* Remove unnecessary StringIO usage
* Revert submodule polymer commit
* Small refactorization and clean up of unused functions
* Executed script/gen_requirements_all.py
* Added a missing condition to ensure that a map is not null
* Fix missing parameter detected by pylint
* A few improvements, also added an empty line to avoid the lint error
* A typo
* Pandora cleanups and enhancements
Added media_content_type
reduced debug messages
made more robust station list
Eliminated auto-pause detection issue
* Added proper de-init of LIRC
* Now won't re-spawn Pandora client if turn_on command is sent twice
* Added Pandora media player utilizing the Pianobar client
* Added Pandora to .coveragerc ignore
* Fixes some docstring formats in Pandora
* More minor formatting tweaks for Pandora
* Eliminated non-portable assumption from Pandora component
* Updated Pandora to properly update currently-playing song.
* Docstring fixes in Pandora
* Added check to ensure Pianobar client is available in path for Pandora.
* Made Pandora client verification a function instead of method.
* Better handling of dependency verification in Pandora.
A new configuration option `turn_off_action` is added to kodi. It may be
one of: none, quit, hibernate, suspend, reboot, or poweroff. The
appropriate command is sent to kodi when the turn_off action is
requested. Default value is none.
Kodi will only report turn_off supported if it is configured to
something other than none.
* use sane defaults for openzwave config
Use sane default if libopenzwave is installed. In most cases this will
mean that the zwave config path will not need to e manually specified.
* Resuming work on onkyo component
* Source control added to UI for onkyo receiver
Source will now display in the UI. Source mappings can be defined in the
config, and a rudimentary mapping is defined by default as a fallback.
When the onkyo source is updated, it will resolve to a defined name if
possible. This may break existing automations.
* fix lint errors
* Updated Onkyo receiver
Now takes an optional ip/name in additional to atempting to discover
deivces.
Source select will now take a sources mapping in the config. It will
provide default values if no source mapping is provided.
example:
- platform: onkyo
host: 10.0.0.2
name: receiver
sources:
HTPC: 'pc'
Chromecast: 'aux1'
Bluray: 'bd'
Wii U: 'game'
* fix pylint error
* Use HA's error log instead of stack trace
* Flipped source mappings, code cleanup
Sonos platform supports a `party mode` feature that groups all
available players into a single group, of which the calling player
will be the coordinator.
Sonos (SoCo) supports add_uri_to_queue capability, making it possible
to stream media available via HTTP for example. This patch extends
media_player component and sonos platform to support this feature
* Added the `lgtv` platform to control a LG Smart TV running NetCast 3.0
(LG Smart TV models released in 2012) and NetCast 4.0 (LG Smart TV models released in 2013).
* Fixed multi-line docstring closing quotes
* Rename lgtv to lg_netcast
* Rename lgtv to lg_netcast
* Extracted class to control the LG TV into a separate Python package 'pylgnetcast' and changed requirements accordingly.
* regenerated requirements_all.txt with script
* now uses pylgnetcast v0.2.0 which uses the requests package for the communication with the TV
* fixed lint error: Catching too general exception Exception
Sonos players can be dynamically set in various modes, for example
as TV players or Line-IN or straming from radios channels, therefore
some methods could not be available, and when invoked they cause
long exceptions to be logged. This partially solves the problem
reducing the output and logging some more informative error message
* Added GPM Desktop Plaeyr component
* Updated requirements_all.txt
* Pylint fix
* Updated GPMDP.py to include @balloob's comments
* Updated to work with the latest version of GPMDP
* Removed setting "self._ws.recv()" as a variable
* Made line 52 shorter
* Updated to check weather it is connected or not
* Pylint and @balloob fixes
* Updated with simplified code and pylint fix
* Made `json.loads` shorter
* Pylint fix
Some Sonos devices (e.g SUB) does not have
a upnp media renderer, but are discovered as sonos
devices. Creating a SonosDevice object from such a
device will fail.
When a sonos player goes offline an endless stream of
exceptions is raised. That happens because homeassistant keeps trying
to refresh its status.
This can happen even when a sonos player has gone offline **before**
homeassistant is started. The sonos players take some time before
realizing one of their mates is no longer online, leading to the same
stream of exceptions inside of homeassistant.
Three types of exceptions of can be raised:
- `requests.packages.urllib3.exceptions.MaxRetryError`
- `requests.packages.urllib3.exceptions.NewConnectionError`
- `TimeoutError`
It's not possible to handle all of them with a single `except` block
because they are raised in a random order and after some delays. That
means a 2nd or 3rd exception can take place while handling the 1st one.
The only solution is to check whether a a player is actually reachable
by attempting to connect to a service that must be running on it.
Also all the players in a 'unknown' state should not be polled by
homeassistant (despite of their brand).
I'm going to upstream the `_is_reachable` method I added to the
`sonos.py` file into `SoCo`. In the meantime we must ship this piece
of code with homeassistant.
Signed-off-by: Flavio Castelli <fcastelli@suse.com>
Text Update
Additional additions and better support for volume, and mute. Cleanup
Added rxv to requirements_all
Added yamaha.py to .coveragerc
Made uppercase, and removed tabs
Added requirements variable
Added doc string for lint
Removed global variable, and simplified state as per balloobs suggestion
Refactored the component with balloobs suggestions
-Added import in the method
- Only get receiver information on init
- A bit of cleanup
Remove up and down volume
Uneeded as this is handled by set volume instead
Fixed a lint build error
More lint fixes
Removed unused imports
Lint Fixes
Simplified if statement
Minor refactoring since the init calls update.
Fixed lint error
Just variable naming change
Added support for an optional name for the receiver.
Better error handling, a bit of refactoring based on balloobs suggestions
Fixed lint error.
Another lint error fix
Changed raise to return
Disable pylint error handling
Pylint broad exception
Made exception handling in the setup platform instead of the constructor.
Lint error fix
Refactored the way devices are found. This allows for multiple receivers
Because the LMS discovery mechanism uses the SlimProto protocol to discover the
presence of a Logitech Media server which operates on port 3483/udp and
3483/tcp. But HA uses a different 'CLI' protocol that is typically on port
9090/tcp to query player state.
However the CLI port number is configurable and if someone runs the CLI on a
different port, and has the server configured in configuration.yaml, we get an
error in the logs when we try to connect to 9090/tcp when we find the server
through discovery. Because of the way local slim player discover the server
using SlimProto we can be fairly certain only a single server will run on a
given IP address so if one is already configured with a user defined port, we
should ignore the discovered one that assumes the default port.
* Log error for services called without required attributes, in
media_player, notify and thermostat platforms.
* Add fan property and methods in thermostat demo component.
* Add tests for notify file and thermostat demo component.
* Increase coverage of tests for media_player, notify and thermostat
platforms.
* Fix some PEP issues, but not all. Tests still have old linting
errors.
* Add tests to reach full coverage for helpers/state.py.
* Refactor reproduce_state function in helpers/state.py. Add two dicts,
as global constants, service_attributes and service_to_state. Use
these in combination with the dict of services per domain from
ServiceRegistry, to find the correct service to use in a scene state
change.
* Use break statement in for loop, to break if service was selected
to update state, in preference to update state attributes, ie state
update takes precedence.
* Add ATTR_CODE and ATTR_CODE_FORMAT in const. Import these in
alarm_control_panel and lock platforms instead of making duplicate
constants in multiple modules.
* Use ATTR_MEDIA_CONTENT_TYPE and ATTR_MEDIA_CONTENT_ID in media_player
platform in SERVICE_PLAY_MEDIA and play_media methods, instead of
'media_type' and 'media_id'.
* Fix PEP257 in modified files.
Currently we interact with players regardless of thir coordinator
role, hence soco.exceptions.SoCoSlaveException are thrown. The use
of the decorator for each interactive method should address this
* From configuration.yaml is easy to provide iterable elements like lists,
this adds the possibility to provide a list of Sonos hosts using a yaml
and still supports the comma separated string version
* Remove superfluous host reassignment
The universal media player contained a private method that was replaced
by the update method. It was meant to be removed and wasn’t. This
commit removed that method.
If the computer is sleeping that are running xbmc then
the traceback is printed in the log all the time.
Keep the traceback in debug mode of the module if needed.
Signed-off-by: Robert Marklund <robbelibobban@gmail.com>
Config can now specify one or more hosts to connect and
also a interface_addr to multicast on if multiple interfaces exists.
Signed-off-by: Robert Marklund <robbelibobban@gmail.com>
Renamed update_state method in universal media player to update so that
it would be called by HA when the state was being published. Moved the
update_ha_state to a function inside of __init__. Updated the tests
accordingly.
Forced all parsed attribute configurations to be of length 2. Removed
entity_id=None option from entity lookups. Explicitly passed entity
lookup information to _entity_lkp.
The dependencies property was only being called once by the __init__
method so it was removed and the code was moved to the __init__ method.
The tests were updated to reflect this.
The active_child_state property was unnecessary as it was not being
referenced outside the class. This commit removes it and updates the
tests accordingly.
Revised universal media player to cache the active player when updating
the state when any of the children change. Revised tests to accommodate
this change.
1) Removed children property because it was only being used by one
method.
2) Removed option to return state as object from _entity_lkp as it was
no longer needed.
3) Used hass.states.get to get entity state objects.
4) Revised test to remove children property.
Changed universal media player to use the call_from_config helper to
call services specified in the configuration file. This was done to
copy what is done in the Alexa and Automation components.
When using a radio stream, the name of the station is often available in
currentsong['name']. Just like the 'mpc' CLI client, this change displays
the name of the station before the current song title.
For example: "Mick Jagger - Let's Work" becomes "Radio 10: Mick Jagger - Let's Work"