⬆️ version bump to v0.3.46 #94

Merged
eric merged 1 commits from push-lprskpllksrm into main 2026-04-09 23:04:54 +02:00
4 changed files with 29 additions and 11 deletions

2
Cargo.lock generated
View File

@@ -4,7 +4,7 @@ version = 4
[[package]]
name = "PMOMusic"
version = "0.3.44"
version = "0.3.45"
dependencies = [
"axum 0.8.7",
"console-subscriber",

View File

@@ -1,6 +1,6 @@
[package]
name = "PMOMusic"
version = "0.3.45"
version = "0.3.46"
edition = "2024"
[dependencies]

View File

@@ -693,14 +693,32 @@ impl MusicRenderer {
self.set_playback_source(PlaybackSource::None);
self.clear_has_played_flag();
} else if self.is_playing_from_queue() {
// Only auto-advance if we have actually seen a PLAYING state
// since the track was started. This prevents auto-advance on
// transient STOPPED states during track initialization.
if self.check_and_clear_has_played_flag() {
debug!(
renderer = self.info.friendly_name(),
"Renderer stopped after queue-driven playback; advancing"
);
let has_played = self.check_and_clear_has_played_flag();
// ✅ CORRECTION BUG PRODUCTION: Garde fou contre latence DB
// Si la base de données est saturée (mutex >400ms) on rate parfois l'événement PLAYING.
// On autorise l'auto-avance si:
// 1. On a bien vu PLAYING OU
// 2. Le titre a été lancé depuis plus de 20 secondes
let track_start = self.state.lock().unwrap().track_start_time;
let elapsed = track_start
.and_then(|t| t.elapsed().ok())
.unwrap_or_default();
let force_advance = elapsed.as_secs() > 20;
if has_played || force_advance {
if force_advance {
debug!(
renderer = self.info.friendly_name(),
elapsed_sec = elapsed.as_secs(),
"⚠️ On force l'auto-avance: on a raté l'événement PLAYING (latence DB)"
);
} else {
debug!(
renderer = self.info.friendly_name(),
"Renderer stopped after queue-driven playback; advancing"
);
}
// Use catch_unwind to prevent panics in play_next_from_queue
// from poisoning the backend mutex
// Also add retry logic for transient errors from renderer

View File

@@ -1 +1 @@
0.3.45
0.3.46