mirror of
https://github.com/agersant/polaris
synced 2024-12-04 02:29:11 +00:00
Implemented playlist endpoints
This commit is contained in:
parent
2ee33e7615
commit
8354eeff1d
1 changed files with 45 additions and 0 deletions
|
@ -11,6 +11,7 @@ use config::{self, Config, Preferences};
|
||||||
use db::DB;
|
use db::DB;
|
||||||
use errors;
|
use errors;
|
||||||
use index;
|
use index;
|
||||||
|
use playlist;
|
||||||
use serve;
|
use serve;
|
||||||
use thumbnails;
|
use thumbnails;
|
||||||
use user;
|
use user;
|
||||||
|
@ -40,6 +41,10 @@ pub fn get_routes() -> Vec<rocket::Route> {
|
||||||
search_root,
|
search_root,
|
||||||
search,
|
search,
|
||||||
serve,
|
serve,
|
||||||
|
list_playlists,
|
||||||
|
save_playlist,
|
||||||
|
read_playlist,
|
||||||
|
delete_playlist,
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,3 +283,43 @@ fn serve(db: State<DB>, _auth: Auth, path: VFSPathBuf) -> Result<serve::RangeRes
|
||||||
let file = File::open(serve_path)?;
|
let file = File::open(serve_path)?;
|
||||||
Ok(serve::RangeResponder::new(file))
|
Ok(serve::RangeResponder::new(file))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct ListPlaylistsEntry {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/playlists")]
|
||||||
|
fn list_playlists(db: State<DB>, auth: Auth) -> Result<Json<Vec<ListPlaylistsEntry>>, errors::Error> {
|
||||||
|
|
||||||
|
let playlist_names = playlist::list_playlists(&auth.username, db.deref())?;
|
||||||
|
let playlists: Vec<ListPlaylistsEntry> = playlist_names
|
||||||
|
.into_iter()
|
||||||
|
.map(|p| ListPlaylistsEntry { name: p })
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
Ok(Json(playlists))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
struct SavePlaylistInput {
|
||||||
|
tracks: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[put("/playlist/<name>", data = "<playlist>")]
|
||||||
|
fn save_playlist(db: State<DB>, auth: Auth, name: String, playlist: Json<SavePlaylistInput>) -> Result<(), errors::Error> {
|
||||||
|
playlist::save_playlist(&name, &auth.username, &playlist.tracks, db.deref())?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/playlist/<name>")]
|
||||||
|
fn read_playlist(db: State<DB>, auth: Auth, name: String) -> Result<Json<Vec<index::Song>>, errors::Error> {
|
||||||
|
let songs = playlist::read_playlist(&name, &auth.username, db.deref())?;
|
||||||
|
Ok(Json(songs))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[delete("/playlist/<name>")]
|
||||||
|
fn delete_playlist(db: State<DB>, auth: Auth, name: String) -> Result<(), errors::Error> {
|
||||||
|
playlist::delete_playlist(&name, &auth.username, db.deref())?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue