summaryrefslogtreecommitdiff
path: root/src/serve.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/serve.rs')
-rw-r--r--src/serve.rs58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/serve.rs b/src/serve.rs
index 0dff5da..5696f12 100644
--- a/src/serve.rs
+++ b/src/serve.rs
@@ -26,6 +26,21 @@ pub fn get_tracks(name: String, url: String) -> String {
.client_credentials_manager(client_credential)
.build();
let user_id = spotify.current_user().unwrap().id;
+ let mut client = crate::CLIENT.lock().unwrap();
+ client
+ .execute(
+ "INSERT INTO suser (user_name) VALUES ($1) ON CONFLICT (user_name) DO NOTHING;",
+ &[&user_id],
+ )
+ .unwrap();
+ let uid: i32 = client
+ .query(
+ "SELECT user_id FROM suser where user_name = $1;",
+ &[&user_id],
+ )
+ .unwrap()[0]
+ .get(0);
+ drop(client);
let chunk_size = 50;
let mut playlist_index = 0;
loop {
@@ -54,7 +69,47 @@ pub fn get_tracks(name: String, url: String) -> String {
break;
}
for track in tracks.items {
- println!("{:?}", track.track.name);
+ //println!("{:?}", track.track.name);
+ let mut client = crate::CLIENT.lock().unwrap();
+
+ if track.track.id.is_none() {
+ println!("{:#?}", track);
+ continue;
+ }
+ print!(" {} ", track.track.id.clone().unwrap());
+ client
+ .execute(
+ "INSERT INTO track (track_code, name, artist, popularity)
+ VALUES ($1, $2, $3, $4)
+ ON CONFLICT DO NOTHING
+ ",
+ &[&(track.track.id.clone().unwrap()), &track.track.name, &track.track.artists[0].name, &(track.track.popularity as i32)],
+ )
+ .unwrap();
+ let tid: i32 = client
+ .query(
+ "SELECT track_id FROM track where track_code = $1;",
+ &[&(track.track.id.clone().unwrap())],
+ )
+ .unwrap()[0]
+ .get(0);
+ println!("uid: {} tid: {}", uid, tid);
+ client
+ .execute(
+ "INSERT INTO user_track (track_id, user_id, count)
+ VALUES ($1, $2, $3)
+ ON CONFLICT
+ ON CONSTRAINT track_user_pkey
+ DO UPDATE;",
+ &[&tid, &uid, &0],
+ )
+ .unwrap();
+ client
+ .execute(
+ "UPDATE user_track SET count = count + 1 WHERE track_id = $1 AND user_id = $2;",
+ &[&tid, &uid],
+ )
+ .unwrap();
}
}
Err(e) => match e.downcast::<ApiError>() {
@@ -85,6 +140,7 @@ pub fn get_tracks(name: String, url: String) -> String {
}
name
}
+
#[get("/token/<name>")]
pub fn token(name: String) -> Result<Redirect, status::Custom<String>> {
let state = rspotify::spotify::util::generate_random_string(16);