Skip to content

Commit 767b809

Browse files
committed
Implement favourites
1 parent a4e2f7b commit 767b809

File tree

1 file changed

+38
-23
lines changed

1 file changed

+38
-23
lines changed

aioheos/aioheos.py

Lines changed: 38 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ def __init__(self, loop, host=None, username=None, password=None, verbose=False)
7272
self._media_title = None
7373
self._media_image_url = None
7474
self._media_id = None
75+
self._favourites = []
7576

7677
self._verbose = verbose
7778
self._player_id = None
@@ -144,11 +145,14 @@ def connect(self, host=None, port=HEOS_PORT, callback=None):
144145
if self.player_id:
145146
self.request_now_playing_media()
146147
self.request_play_state()
148+
self.request_mute_state()
147149
self.request_volume()
148150

149151
if self._username is not None:
150152
yield from self.ensure_login()
151153

154+
self.request_browse_source(SID_FAVORITES)
155+
152156
@asyncio.coroutine
153157
def _connect(self, host, port=HEOS_PORT):
154158
" connect "
@@ -193,7 +197,7 @@ def _parse_message(message):
193197
else:
194198
return {}
195199

196-
def _dispatcher(self, command, payload):
200+
def _dispatcher(self, command, message, payload):
197201
" call parser functions "
198202
# if self._verbose:
199203
if self._verbose:
@@ -213,12 +217,14 @@ def _dispatcher(self, command, payload):
213217
PLAYER_NOW_PLAYING_CHANGED: self._parse_player_now_playing_changed,
214218
PLAYER_NOW_PLAYING_PROGRESS: self._parse_player_now_playing_progress,
215219
SYSTEM_SIGNIN: self._parse_system_signin,
220+
BROWSE: self._parse_browse_browse,
216221
}
217222
commands_ignored = (
218223
SYSTEM_PRETTIFY,
219224
)
225+
220226
if command in callbacks.keys():
221-
callbacks[command](payload)
227+
callbacks[command](payload, message)
222228
elif command in commands_ignored:
223229
if self._verbose:
224230
print('[I] command "{}" is ignored.'.format(command))
@@ -230,22 +236,23 @@ def _parse_command(self, data):
230236
try:
231237
data_heos = data['heos']
232238
command = data_heos['command']
239+
message = {}
240+
if ('message' in data_heos):
241+
if data_heos['message'].startswith('command under process'):
242+
return None
243+
message = self._parse_message(data_heos['message'])
233244
if 'result' in data_heos.keys() and data_heos['result'] == 'fail':
234245
raise AioHeosException(data_heos['message'])
235246
if 'payload' in data.keys():
236-
self._dispatcher(command, data['payload'])
247+
self._dispatcher(command, message, data['payload'])
237248
elif 'message' in data_heos.keys():
238-
if data_heos['message'] == 'command under process':
239-
return None
240-
message = self._parse_message(data_heos['message'])
241-
self._dispatcher(command, message)
249+
self._dispatcher(command, message, None)
250+
elif 'command' in data_heos.keys():
251+
self._dispatcher(command, None, None)
242252
else:
243-
raise AioHeosException('No message or payload in reply.')
244-
# pylint: disable=bare-except
245-
except AioHeosException as exc:
246-
raise AioHeosException('Problem parsing ({})'.format(exc))
253+
raise AioHeosException('No message or payload in reply. payload: {}'.format(data))
247254
except:
248-
raise AioHeosException('Problem parsing command.')
255+
raise AioHeosException('Problem parsing command: {}'.format(data))
249256

250257
return None
251258

@@ -323,7 +330,7 @@ def login(self):
323330
" login "
324331
self.send_command(SYSTEM_SIGNIN, { 'un': self._username, 'pw': self._password })
325332

326-
def _parse_players(self, payload):
333+
def _parse_players(self, payload, message):
327334
self._players = payload
328335
self._player_id = self._players[0]['pid']
329336

@@ -343,8 +350,8 @@ def request_play_state(self):
343350
" request play state "
344351
self.send_command(GET_PLAY_STATE, {'pid': self.player_id})
345352

346-
def _parse_play_state(self, payload):
347-
self._play_state = payload['state']
353+
def _parse_play_state(self, payload, message):
354+
self._play_state = message['state']
348355

349356
def get_play_state(self):
350357
""" get play state """
@@ -354,13 +361,17 @@ def request_mute_state(self):
354361
" request mute state "
355362
self.send_command(GET_MUTE_STATE, {'pid': self.player_id})
356363

357-
def _parse_mute_state(self, payload):
358-
self._mute_state = payload['state']
364+
def _parse_mute_state(self, payload, message):
365+
self._mute_state = message['state']
359366

360367
def get_mute_state(self):
361368
""" get mute state """
362369
return self._mute_state
363370

371+
def get_favourites(self):
372+
""" get favourites """
373+
return self._favourites
374+
364375
def request_volume(self):
365376
" request volume "
366377
self.send_command(GET_VOLUME, {'pid': self.player_id})
@@ -374,7 +385,7 @@ def set_volume(self, volume_level):
374385
self.send_command(SET_VOLUME, {'pid': self.player_id,
375386
'level': volume_level})
376387

377-
def _parse_volume(self, message):
388+
def _parse_volume(self, payload, message):
378389
self._volume_level = message['level']
379390

380391
def get_volume(self):
@@ -413,7 +424,7 @@ def request_now_playing_media(self):
413424
" get playing media "
414425
self.send_command(GET_NOW_PLAYING_MEDIA, {'pid': self.player_id})
415426

416-
def _parse_now_playing_media(self, payload):
427+
def _parse_now_playing_media(self, payload, message):
417428
if 'artist' in payload.keys():
418429
self._media_artist = payload['artist']
419430
if 'album' in payload.keys():
@@ -511,18 +522,22 @@ def play_content(self, content, content_type='audio/mpeg'):
511522
self._loop.create_task(self._upnp.play_content(content, content_type))
512523
# asyncio.wait([task])
513524

514-
def _parse_player_volume_changed(self, message):
525+
def _parse_player_volume_changed(self, payload, message):
515526
self._mute_state = message['mute']
516527
self._volume_level = int(message['level'])
517528

518-
def _parse_player_state_changed(self, message):
529+
def _parse_player_state_changed(self, payload, message):
519530
self._play_state = message['state']
520531

521-
def _parse_player_now_playing_changed(self, _): # pylint: disable=invalid-name
532+
def _parse_player_now_playing_changed(self, payload, message): # pylint: disable=invalid-name
522533
" event / now playing changed, request what changed. "
523534
self.request_now_playing_media()
524535

525-
def _parse_player_now_playing_progress(self, message): # pylint: disable=invalid-name
536+
def _parse_player_now_playing_progress(self, payload, message): # pylint: disable=invalid-name
526537
self._current_position = int(message['cur_pos'])
527538
self._current_position_updated_at = datetime.utcnow()
528539
self._duration = int(message['duration'])
540+
541+
def _parse_browse_browse(self, payload, message):
542+
if (message['sid'] == str(SID_FAVORITES)):
543+
self._favourites = payload

0 commit comments

Comments
 (0)