Refresh token in main thread before search
This commit is contained in:
@@ -59,6 +59,7 @@ pub struct Spotify {
|
|||||||
api: RwLock<SpotifyAPI>,
|
api: RwLock<SpotifyAPI>,
|
||||||
elapsed: RwLock<Option<Duration>>,
|
elapsed: RwLock<Option<Duration>>,
|
||||||
since: RwLock<Option<SystemTime>>,
|
since: RwLock<Option<SystemTime>>,
|
||||||
|
token_issued: RwLock<Option<SystemTime>>,
|
||||||
channel: mpsc::UnboundedSender<WorkerCommand>,
|
channel: mpsc::UnboundedSender<WorkerCommand>,
|
||||||
user: String,
|
user: String,
|
||||||
}
|
}
|
||||||
@@ -205,6 +206,7 @@ impl Spotify {
|
|||||||
api: RwLock::new(SpotifyAPI::default()),
|
api: RwLock::new(SpotifyAPI::default()),
|
||||||
elapsed: RwLock::new(None),
|
elapsed: RwLock::new(None),
|
||||||
since: RwLock::new(None),
|
since: RwLock::new(None),
|
||||||
|
token_issued: RwLock::new(None),
|
||||||
channel: tx,
|
channel: tx,
|
||||||
user,
|
user,
|
||||||
};
|
};
|
||||||
@@ -324,7 +326,16 @@ impl Spotify {
|
|||||||
(*since)
|
(*since)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn refresh_token(&self) {
|
pub fn refresh_token(&self) {
|
||||||
|
{
|
||||||
|
let expiry = self.token_issued.read().unwrap();
|
||||||
|
if let Some(time) = *expiry {
|
||||||
|
if time.elapsed().unwrap() < Duration::from_secs(3000) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let (token_tx, token_rx) = oneshot::channel();
|
let (token_tx, token_rx) = oneshot::channel();
|
||||||
self.channel
|
self.channel
|
||||||
.unbounded_send(WorkerCommand::RequestToken(token_tx))
|
.unbounded_send(WorkerCommand::RequestToken(token_tx))
|
||||||
@@ -333,6 +344,7 @@ impl Spotify {
|
|||||||
|
|
||||||
// update token used by web api calls
|
// update token used by web api calls
|
||||||
self.api.write().expect("can't writelock api").access_token = Some(token.access_token);
|
self.api.write().expect("can't writelock api").access_token = Some(token.access_token);
|
||||||
|
self.token_issued.write().unwrap().replace(SystemTime::now());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// retries once when rate limits are hit
|
/// retries once when rate limits are hit
|
||||||
|
|||||||
@@ -157,6 +157,8 @@ impl SearchView {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.spotify.refresh_token();
|
||||||
|
|
||||||
{
|
{
|
||||||
let spotify = self.spotify.clone();
|
let spotify = self.spotify.clone();
|
||||||
let results = self.results_tracks.clone();
|
let results = self.results_tracks.clone();
|
||||||
|
|||||||
Reference in New Issue
Block a user