⬆️ version bump to v0.3.46
- Update Cargo.toml and version.txt to v0.3.46 - Fix production bug in music renderer autoadvance logic: add fallback timeout (20s) to compensate for missed PLAYING events due DB latency - Update Cargo.lock accordingly
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -4,7 +4,7 @@ version = 4
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "PMOMusic"
|
name = "PMOMusic"
|
||||||
version = "0.3.44"
|
version = "0.3.45"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"axum 0.8.7",
|
"axum 0.8.7",
|
||||||
"console-subscriber",
|
"console-subscriber",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "PMOMusic"
|
name = "PMOMusic"
|
||||||
version = "0.3.45"
|
version = "0.3.46"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -693,14 +693,32 @@ impl MusicRenderer {
|
|||||||
self.set_playback_source(PlaybackSource::None);
|
self.set_playback_source(PlaybackSource::None);
|
||||||
self.clear_has_played_flag();
|
self.clear_has_played_flag();
|
||||||
} else if self.is_playing_from_queue() {
|
} else if self.is_playing_from_queue() {
|
||||||
// Only auto-advance if we have actually seen a PLAYING state
|
let has_played = self.check_and_clear_has_played_flag();
|
||||||
// since the track was started. This prevents auto-advance on
|
|
||||||
// transient STOPPED states during track initialization.
|
// ✅ CORRECTION BUG PRODUCTION: Garde fou contre latence DB
|
||||||
if self.check_and_clear_has_played_flag() {
|
// Si la base de données est saturée (mutex >400ms) on rate parfois l'événement PLAYING.
|
||||||
debug!(
|
// On autorise l'auto-avance si:
|
||||||
renderer = self.info.friendly_name(),
|
// 1. On a bien vu PLAYING OU
|
||||||
"Renderer stopped after queue-driven playback; advancing"
|
// 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
|
// Use catch_unwind to prevent panics in play_next_from_queue
|
||||||
// from poisoning the backend mutex
|
// from poisoning the backend mutex
|
||||||
// Also add retry logic for transient errors from renderer
|
// Also add retry logic for transient errors from renderer
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
0.3.45
|
0.3.46
|
||||||
|
|||||||
Reference in New Issue
Block a user