30s timeout for pusher; No broadcasting after metadata flush; Extra error logging during radio functions

This commit is contained in:
James Barnsley
2017-11-21 11:27:34 +13:00
parent 2b959f7803
commit 62e50e89b7
3 changed files with 57 additions and 55 deletions

View File

@ -372,39 +372,53 @@ class IrisCore(object):
# We only want to play the first batch
added = self.core.tracklist.add(uris = uris[0:3])
if (not added.get()):
logger.error("No recommendations added to queue")
self.radio['enabled'] = 0;
error = {
'message': 'No recommendations added to queue',
'radio': self.radio
}
if (callback):
callback(False, error)
else:
return error
# Save results (minus first batch) for later use
self.radio['results'] = uris[3:]
if added.get():
if starting:
self.core.playback.play()
self.broadcast(
data={
'type': 'radio_started',
'radio': self.radio
}
)
else:
self.broadcast(
data={
'type': 'radio_changed',
'radio': self.radio
}
)
if starting:
self.core.playback.play()
self.broadcast(
data={
'type': 'radio_started',
'radio': self.radio
}
)
else:
self.broadcast(
data={
'type': 'radio_changed',
'radio': self.radio
}
)
self.get_radio(callback=callback)
return
self.get_radio(callback=callback)
return
# failed fetching/adding tracks, so no-go
self.radio['enabled'] = 0;
error = {
'message': 'Could not start radio',
'radio': self.radio
}
if (callback):
callback(False, error)
# Failed fetching/adding tracks, so no-go
else:
return error
logger.error("No recommendations returned by Spotify")
self.radio['enabled'] = 0;
error = {
'message': 'Could not start radio',
'radio': self.radio
}
if (callback):
callback(False, error)
else:
return error
def stop_radio(self, *args, **kwargs):
@ -440,13 +454,10 @@ class IrisCore(object):
def load_more_tracks(self, *args, **kwargs):
# this is crude, but it means we don't need to handle expired tokens
# TODO: address this when it's clear what Jodal and the team want to do with Pyspotify
self.refresh_spotify_token()
try:
token = self.spotify_token
token = token['access_token']
self.get_spotify_token()
spotify_token = self.spotify_token
access_token = spotify_token['access_token']
except:
error = 'IrisFrontend: access_token missing or invalid'
logger.error(error)
@ -460,7 +471,7 @@ class IrisCore(object):
url = url+'&limit=50'
req = urllib2.Request(url)
req.add_header('Authorization', 'Bearer '+self.spotify_token['access_token'])
req.add_header('Authorization', 'Bearer '+access_token)
response = urllib2.urlopen(req, timeout=30).read()
response_dict = json.loads(response)
@ -554,21 +565,6 @@ class IrisCore(object):
self.queue_metadata = cleaned_queue_metadata
self.broadcast(
data={
'type': 'queue_metadata_changed',
'queue_metadata': self.queue_metadata
}
)
response = {
'message': 'Cleaned queue metadata'
}
if (callback):
callback(response)
else:
return response
##
# Spotify authentication
@ -580,6 +576,11 @@ class IrisCore(object):
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()
response = {
'spotify_token': self.spotify_token
}
@ -606,6 +607,10 @@ class IrisCore(object):
request = tornado.httpclient.HTTPRequest(url, method='POST', body=urllib.urlencode(data))
response = http_client.fetch(request)
token = json.loads(response.body)
token['expires_at'] = time.time() + token['expires_in']
self.spotify_token = token
self.broadcast(
data={
'type': 'spotify_token_changed',
@ -613,12 +618,9 @@ class IrisCore(object):
}
)
token = json.loads(response.body)
self.spotify_token = token
response = {
'spotify_token': token
}
if (callback):
callback(response)
else:

View File

@ -19,9 +19,9 @@ class IrisFrontend(pykka.ThreadingActor, CoreListener):
def on_start(self):
logger.info('Starting Iris '+mem.iris.version)
def track_playback_ended( self, tl_track, time_position ):
def track_playback_ended(self, tl_track, time_position):
mem.iris.check_for_radio_update()
def tracklist_changed( self ):
def tracklist_changed(self):
mem.iris.clean_queue_metadata()

View File

@ -83,7 +83,7 @@ const PusherMiddleware = (function(){
store.dispatch(uiActions.stopLoading(request_id));
reject({message: "Request timed out", method: method, data: data});
},
5000 // 30000
30000
);
// add query to our deferred responses