player for the songs works now

This commit is contained in:
Priec
2026-05-19 19:11:01 +02:00
parent 4597b120f4
commit f405ddab65
6 changed files with 356 additions and 22 deletions

View File

@@ -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))