From 4be33bb15b4149110c74b491ae340e4809d1cfd4 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Tue, 6 Oct 2015 23:12:20 -0400 Subject: [PATCH 1/9] add a way to play a playlist with the client --- homeassistant/components/media_player/itunes.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index ecbb144e033..d3c992d267b 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -118,6 +118,16 @@ class Itunes(object): """ Skips back and returns the current state. """ return self._command('previous') + def play_playlist(self, playlist_id_or_name): + """ Sets a playlist to be current and returns the current state. """ + response = self._request('GET', '/playlists') + playlists = response.get('playlists', []) + + found_playlists = [playlist for playlist in playlists if playlist["name"] == playlist_id_or_name or playlist["id"] == playlist_id_or_name] + if len(found_playlists) > 0: + playlist = found_playlists[0] + return self._request('PUT', '/playlists/' + playlist['id'] + '/play') + def artwork_url(self): """ Returns a URL of the current track's album art. """ return self._base_url + '/artwork' From e84ddb036f63dc63d99ffa4ae2e4e2aa3c3009bb Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Tue, 6 Oct 2015 23:12:30 -0400 Subject: [PATCH 2/9] return what playlist is playing --- homeassistant/components/media_player/itunes.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index d3c992d267b..a94dc0d1585 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -304,6 +304,11 @@ class ItunesDevice(MediaPlayerDevice): """ Album of current playing media. (Music track only) """ return self.current_album + @property + def media_playlist(self): + """ Title of the currently playing playlist. """ + return self.current_playlist + @property def supported_media_commands(self): """ Flags of media commands that are supported. """ From 1b22f71a191372b8f3a8bd970154e52e781c0935 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Tue, 6 Oct 2015 23:12:41 -0400 Subject: [PATCH 3/9] implement play_media --- homeassistant/components/media_player/itunes.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index a94dc0d1585..22f987e0845 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -344,6 +344,11 @@ class ItunesDevice(MediaPlayerDevice): response = self.client.previous() self.update_state(response) + def play_media(self, media_type:None, media_id:None): + """ play_media media player. """ + response = self.client.play_playlist(media_id) + self.update_state(response) + class AirPlayDevice(MediaPlayerDevice): """ Represents an AirPlay device via an iTunes-API instance. """ From bdb42bf4a2f12dc7b0b3dcaf23302d78534ded5a Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Tue, 6 Oct 2015 23:12:48 -0400 Subject: [PATCH 4/9] support play_media --- homeassistant/components/media_player/itunes.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index 22f987e0845..82038c3134a 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -35,9 +35,10 @@ URL of your running version of iTunes-API. Example: http://192.168.1.50:8181 import logging from homeassistant.components.media_player import ( - MediaPlayerDevice, MEDIA_TYPE_MUSIC, SUPPORT_PAUSE, SUPPORT_SEEK, - SUPPORT_VOLUME_SET, SUPPORT_VOLUME_MUTE, SUPPORT_PREVIOUS_TRACK, - SUPPORT_NEXT_TRACK, SUPPORT_TURN_ON, SUPPORT_TURN_OFF, + MediaPlayerDevice, MEDIA_TYPE_MUSIC, MEDIA_TYPE_PLAYLIST, SUPPORT_PAUSE, + SUPPORT_SEEK, SUPPORT_VOLUME_SET, SUPPORT_VOLUME_MUTE, + SUPPORT_PREVIOUS_TRACK, SUPPORT_NEXT_TRACK, SUPPORT_TURN_ON, + SUPPORT_TURN_OFF, SUPPORT_PLAY_MEDIA, ATTR_ENTITY_PICTURE, ATTR_SUPPORTED_MEDIA_COMMANDS) from homeassistant.const import ( STATE_IDLE, STATE_PLAYING, STATE_PAUSED, STATE_OFF, STATE_ON) @@ -47,7 +48,8 @@ import requests _LOGGER = logging.getLogger(__name__) SUPPORT_ITUNES = SUPPORT_PAUSE | SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \ - SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | SUPPORT_SEEK + SUPPORT_PREVIOUS_TRACK | SUPPORT_NEXT_TRACK | SUPPORT_SEEK | \ + SUPPORT_PLAY_MEDIA SUPPORT_AIRPLAY = SUPPORT_VOLUME_SET | SUPPORT_TURN_ON | SUPPORT_TURN_OFF From 9a3c76c2636d93e8f350f3f0bcd5747e3782a1d6 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:41:57 -0400 Subject: [PATCH 5/9] these are required --- homeassistant/components/media_player/itunes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index 82038c3134a..022dccdbb25 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -346,7 +346,7 @@ class ItunesDevice(MediaPlayerDevice): response = self.client.previous() self.update_state(response) - def play_media(self, media_type:None, media_id:None): + def play_media(self, media_type, media_id): """ play_media media player. """ response = self.client.play_playlist(media_id) self.update_state(response) From 85338887b48ae78f42ec273030c1a03f2a7e9cec Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:42:50 -0400 Subject: [PATCH 6/9] wrap it --- homeassistant/components/media_player/itunes.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index 022dccdbb25..85b5e4dedc6 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -125,7 +125,10 @@ class Itunes(object): response = self._request('GET', '/playlists') playlists = response.get('playlists', []) - found_playlists = [playlist for playlist in playlists if playlist["name"] == playlist_id_or_name or playlist["id"] == playlist_id_or_name] + found_playlists = [playlist for playlist in \ + playlists if playlist["name"] == playlist_id_or_name or \ + playlist["id"] == playlist_id_or_name] + if len(found_playlists) > 0: playlist = found_playlists[0] return self._request('PUT', '/playlists/' + playlist['id'] + '/play') From c2fe97777833bb25aa46d891023017d0328ebc32 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 01:55:15 -0400 Subject: [PATCH 7/9] style --- homeassistant/components/media_player/itunes.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index 85b5e4dedc6..f0049e1ff18 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -125,13 +125,14 @@ class Itunes(object): response = self._request('GET', '/playlists') playlists = response.get('playlists', []) - found_playlists = [playlist for playlist in \ - playlists if playlist["name"] == playlist_id_or_name or \ + found_playlists = [playlist for playlist in + playlists if playlist["name"] == playlist_id_or_name or playlist["id"] == playlist_id_or_name] - + if len(found_playlists) > 0: playlist = found_playlists[0] - return self._request('PUT', '/playlists/' + playlist['id'] + '/play') + path = '/playlists/' + playlist['id'] + '/play' + return self._request('PUT', path) def artwork_url(self): """ Returns a URL of the current track's album art. """ @@ -351,8 +352,9 @@ class ItunesDevice(MediaPlayerDevice): def play_media(self, media_type, media_id): """ play_media media player. """ - response = self.client.play_playlist(media_id) - self.update_state(response) + if media_type == MEDIA_TYPE_PLAYLIST: + response = self.client.play_playlist(media_id) + self.update_state(response) class AirPlayDevice(MediaPlayerDevice): From 3b58e8628dee4887054ba29b614ec3a6957a3ac0 Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 02:02:25 -0400 Subject: [PATCH 8/9] style --- homeassistant/components/media_player/itunes.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index f0049e1ff18..7bf5e5eefc6 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -125,8 +125,9 @@ class Itunes(object): response = self._request('GET', '/playlists') playlists = response.get('playlists', []) - found_playlists = [playlist for playlist in - playlists if playlist["name"] == playlist_id_or_name or + found_playlists = \ + [playlist for playlist in playlists if + playlist["name"] == playlist_id_or_name or playlist["id"] == playlist_id_or_name] if len(found_playlists) > 0: From ffbaf0cd5a3069989952c21d014088fd76ad9dbe Mon Sep 17 00:00:00 2001 From: Jon Maddox Date: Wed, 7 Oct 2015 02:13:13 -0400 Subject: [PATCH 9/9] simpler --- homeassistant/components/media_player/itunes.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/homeassistant/components/media_player/itunes.py b/homeassistant/components/media_player/itunes.py index 7bf5e5eefc6..70def719146 100644 --- a/homeassistant/components/media_player/itunes.py +++ b/homeassistant/components/media_player/itunes.py @@ -127,8 +127,7 @@ class Itunes(object): found_playlists = \ [playlist for playlist in playlists if - playlist["name"] == playlist_id_or_name or - playlist["id"] == playlist_id_or_name] + (playlist_id_or_name in [playlist["name"], playlist["id"]])] if len(found_playlists) > 0: playlist = found_playlists[0]