Radio now functional; Fetching lyrics still triggers 'Cannot run the event loop while another loop is running' error...
This commit is contained in:
@ -585,7 +585,7 @@ class IrisCore(pykka.ThreadingActor):
|
||||
else:
|
||||
return response
|
||||
|
||||
def change_radio(self, *args, **kwargs):
|
||||
async def change_radio(self, *args, **kwargs):
|
||||
callback = kwargs.get('callback', False)
|
||||
data = kwargs.get('data', {})
|
||||
|
||||
@ -604,7 +604,7 @@ class IrisCore(pykka.ThreadingActor):
|
||||
'enabled': 1,
|
||||
'results': []
|
||||
}
|
||||
uris = self.load_more_tracks()
|
||||
uris = await self.load_more_tracks()
|
||||
|
||||
# make sure we got recommendations
|
||||
if uris:
|
||||
@ -656,7 +656,7 @@ class IrisCore(pykka.ThreadingActor):
|
||||
# Failed fetching/adding tracks, so no-go
|
||||
else:
|
||||
logger.error("No recommendations returned by Spotify")
|
||||
self.radio['enabled'] = 0;
|
||||
self.radio['enabled'] = 0
|
||||
error = {
|
||||
'code': 32500,
|
||||
'message': 'Could not start radio',
|
||||
@ -701,10 +701,10 @@ class IrisCore(pykka.ThreadingActor):
|
||||
return response
|
||||
|
||||
|
||||
def load_more_tracks(self, *args, **kwargs):
|
||||
async def load_more_tracks(self, *args, **kwargs):
|
||||
|
||||
try:
|
||||
self.get_spotify_token()
|
||||
await self.get_spotify_token()
|
||||
spotify_token = self.spotify_token
|
||||
access_token = spotify_token['access_token']
|
||||
except:
|
||||
@ -712,27 +712,32 @@ class IrisCore(pykka.ThreadingActor):
|
||||
logger.error(error)
|
||||
return False
|
||||
|
||||
try:
|
||||
url = 'https://api.spotify.com/v1/recommendations/'
|
||||
url = url+'?seed_artists='+(",".join(self.radio['seed_artists'])).replace('spotify:artist:','')
|
||||
url = url+'&seed_genres='+(",".join(self.radio['seed_genres'])).replace('spotify:genre:','')
|
||||
url = url+'&seed_tracks='+(",".join(self.radio['seed_tracks'])).replace('spotify:track:','')
|
||||
url = url+'&limit=50'
|
||||
http_client = AsyncHTTPClient()
|
||||
|
||||
req = urllib.request(url)
|
||||
req.add_header('Authorization', 'Bearer '+access_token)
|
||||
|
||||
response = urllib.urlopen(req, timeout=30).read()
|
||||
response_dict = json.loads(response)
|
||||
try:
|
||||
http_response = await http_client.fetch(
|
||||
url,
|
||||
'POST',
|
||||
headers={'Authorization': 'Bearer '+access_token}
|
||||
)
|
||||
response_body = json.loads(http_response.body)
|
||||
|
||||
uris = []
|
||||
for track in response_dict['tracks']:
|
||||
for track in response_body['tracks']:
|
||||
uris.append( track['uri'] )
|
||||
|
||||
return uris
|
||||
|
||||
except:
|
||||
logger.error('IrisFrontend: Failed to fetch Spotify recommendations')
|
||||
except (urllib.error.HTTPError, urllib.error.URLError) as e:
|
||||
error = json.loads(e.read())
|
||||
error = {'message': 'Could not fetch Spotify recommendations: '+error['error_description']}
|
||||
logger.error('Could not fetch Spotify recommendations: '+error['error_description'])
|
||||
logger.debug(error)
|
||||
return False
|
||||
|
||||
|
||||
@ -971,12 +976,12 @@ class IrisCore(pykka.ThreadingActor):
|
||||
# passing token to frontend for javascript requests without use of the Authorization Code Flow.
|
||||
##
|
||||
|
||||
def get_spotify_token(self, *args, **kwargs):
|
||||
async def get_spotify_token(self, *args, **kwargs):
|
||||
callback = kwargs.get('callback', False)
|
||||
|
||||
# Expired, so go get a new one
|
||||
if (not self.spotify_token or self.spotify_token['expires_at'] <= time.time()):
|
||||
self.refresh_spotify_token()
|
||||
await self.refresh_spotify_token()
|
||||
|
||||
response = {
|
||||
'spotify_token': self.spotify_token
|
||||
|
||||
@ -178,7 +178,7 @@ class HttpHandler(tornado.web.RequestHandler):
|
||||
else:
|
||||
getattr(iris, slug)(data=params, request=self.request, callback=lambda response=False, error=False: self.handle_result(id=id, method=slug, response=response, error=error))
|
||||
|
||||
except HTTPError as e:
|
||||
except tornado.web.HTTPError as e:
|
||||
self.handle_result(id=id, error={'code': 32601, 'message': "Invalid JSON payload"})
|
||||
return
|
||||
|
||||
|
||||
@ -70840,7 +70840,7 @@ var MopidyMiddleware = function () {
|
||||
break;
|
||||
|
||||
case 'MOPIDY_REMOVE_TRACKS':
|
||||
request(socket, store, 'tracklist.remove', { tlid: action.tlids }).then(function (response) {
|
||||
request(socket, store, 'tracklist.remove', { criteria: { tlid: action.tlids } }).then(function (response) {
|
||||
store.dispatch(pusherActions.deliverBroadcast('notification', {
|
||||
notification: {
|
||||
content: store.getState().pusher.username + ' removed ' + action.tlids.length + ' tracks'
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -446,7 +446,7 @@ const MopidyMiddleware = (function () {
|
||||
break;
|
||||
|
||||
case 'MOPIDY_REMOVE_TRACKS':
|
||||
request(socket, store, 'tracklist.remove', { tlid: action.tlids })
|
||||
request(socket, store, 'tracklist.remove', { criteria: { tlid: action.tlids } })
|
||||
.then((response) => {
|
||||
store.dispatch(pusherActions.deliverBroadcast(
|
||||
'notification',
|
||||
|
||||
Reference in New Issue
Block a user