player for the songs works now
This commit is contained in:
@@ -548,6 +548,41 @@ async fn public_album(
|
||||
)
|
||||
}
|
||||
|
||||
/// Published tracks of an album as JSON, so the audio listing page can
|
||||
/// queue a whole album without navigating to its detail page.
|
||||
#[debug_handler]
|
||||
async fn public_album_tracks(
|
||||
Path(slug): Path<String>,
|
||||
State(ctx): State<AppContext>,
|
||||
) -> Result<Response> {
|
||||
let album = audio_albums::Entity::find()
|
||||
.filter(audio_albums::Column::Slug.eq(slug))
|
||||
.filter(audio_albums::Column::Published.eq(true))
|
||||
.one(&ctx.db)
|
||||
.await?
|
||||
.ok_or_else(|| Error::NotFound)?;
|
||||
|
||||
let tracks = audio_tracks::Entity::find()
|
||||
.filter(audio_tracks::Column::AlbumId.eq(album.id))
|
||||
.filter(audio_tracks::Column::Published.eq(true))
|
||||
.order_by_asc(audio_tracks::Column::TrackNumber)
|
||||
.order_by_asc(audio_tracks::Column::Title)
|
||||
.all(&ctx.db)
|
||||
.await?;
|
||||
|
||||
let items: Vec<serde_json::Value> = tracks
|
||||
.into_iter()
|
||||
.map(|t| {
|
||||
json!({
|
||||
"src": format!("/audio/tracks/{}/stream", t.id),
|
||||
"title": t.title,
|
||||
})
|
||||
})
|
||||
.collect();
|
||||
|
||||
format::json(json!({ "tracks": items }))
|
||||
}
|
||||
|
||||
#[debug_handler]
|
||||
async fn public_tracks(
|
||||
jar: CookieJar,
|
||||
@@ -996,6 +1031,7 @@ pub fn routes() -> Routes {
|
||||
.add("/audio/stream/{filename}", get(raw_audio_stream))
|
||||
.add("/audio/albums", get(public_albums))
|
||||
.add("/audio/albums/{slug}", get(public_album))
|
||||
.add("/audio/albums/{slug}/tracks", get(public_album_tracks))
|
||||
.add("/audio/tracks", get(public_tracks))
|
||||
.add("/audio/tracks/{id}/stream", get(track_stream))
|
||||
.add("/admin/images", get(admin_images))
|
||||
|
||||
Reference in New Issue
Block a user