fix: add byte len to prevent unknown track duration when decoding

This commit is contained in:
Tal 2025-08-05 22:07:38 +02:00
parent 0b7638468c
commit 9f7c895154
2 changed files with 11 additions and 5 deletions

View File

@ -30,7 +30,7 @@ use mpris_server::{PlaybackStatus, PlayerInterface, Property};
use crate::{ use crate::{
messages::Messages, messages::Messages,
play::{PersistentVolume}, play::PersistentVolume,
tracks::{self, list::List}, tracks::{self, list::List},
Args, Args,
}; };
@ -109,7 +109,9 @@ impl Player {
let volume = PersistentVolume::load().await?; let volume = PersistentVolume::load().await?;
// Load the track list. // Load the track list.
let list = List::load(args.track_list.as_ref()).await.wrap_err("unable to load the track list")?; let list = List::load(args.track_list.as_ref())
.await
.wrap_err("unable to load the track list")?;
// We should only shut up alsa forcefully on Linux if we really have to. // We should only shut up alsa forcefully on Linux if we really have to.
#[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
@ -118,10 +120,10 @@ impl Player {
} else { } else {
OutputStreamBuilder::open_default_stream()? OutputStreamBuilder::open_default_stream()?
}; };
stream.log_on_drop(false); // Frankly, this is a stupid feature. Stop shoving your crap into my beloved stderr!!! stream.log_on_drop(false); // Frankly, this is a stupid feature. Stop shoving your crap into my beloved stderr!!!
let sink = Sink::connect_new(stream.mixer()); let sink = Sink::connect_new(stream.mixer());
if args.paused { if args.paused {
sink.pause(); sink.pause();
} }

View File

@ -215,7 +215,11 @@ impl DecodedTrack {
/// Creates a new track. /// Creates a new track.
/// This is equivalent to [`QueuedTrack::decode`]. /// This is equivalent to [`QueuedTrack::decode`].
pub fn new(track: QueuedTrack) -> eyre::Result<Self, TrackError> { pub fn new(track: QueuedTrack) -> eyre::Result<Self, TrackError> {
let data = Decoder::new(Cursor::new(track.data))?; let data = Decoder::builder()
.with_byte_len(track.data.len().try_into().unwrap())
.with_data(Cursor::new(track.data))
.build()?;
let info = Info::new(track.name, track.full_path, &data)?; let info = Info::new(track.name, track.full_path, &data)?;
Ok(Self { info, data }) Ok(Self { info, data })