streamdetails = asyncio.run_coroutine_threadsafe(
self.mass.music.providers[provider].get_stream_details(track_id), self.mass.event_loop).result()
if not streamdetails:
- yield b''
+ yield (True, b'')
return
# TODO: add support for AAC streams (which sox doesn't natively support)
if streamdetails['type'] == 'url':
async def get_stream_details(self, track_id):
''' return the content details for the given track when it will be streamed'''
- # TODO: Report streaming start and streaming end !!
- params = {'format_id': 27, 'track_id': track_id, 'intent': 'stream'}
- streamdetails = await self.__get_data('track/getFileUrl', params, sign_request=True, ignore_cache=True)
- if not streamdetails:
- # simply retry this request
- await asyncio.sleep(2)
+ for format_id in [27, 7, 6, 5]:
+ # it seems that simply requesting for highest available quality does not work
+ # from time to time the api response is empty for this request ?!
+ params = {'format_id': format_id, 'track_id': track_id, 'intent': 'stream'}
streamdetails = await self.__get_data('track/getFileUrl', params, sign_request=True, ignore_cache=True)
+ if streamdetails and streamdetails.get('url'):
+ break
+ else:
+ await asyncio.sleep(1)
if not streamdetails or not streamdetails.get('url'):
LOGGER.error("Unable to retrieve stream url for track %s" % track_id)
return None