Bump PMOMusic version and improve snapshot update logic
Version bump for PMOMusic from 0.3.1 to 0.3.3 - Updated snapshot update logic in useRenderers.ts to directly update local snapshot state based on event types - Improved handling of various events like state_changed, position_changed, volume_changed, etc. - Adjusted polling interval in control_point.rs from 500ms to 250ms for smoother UI updates
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -4,7 +4,7 @@ version = 4
|
||||
|
||||
[[package]]
|
||||
name = "PMOMusic"
|
||||
version = "0.3.1"
|
||||
version = "0.3.3"
|
||||
dependencies = [
|
||||
"axum 0.8.7",
|
||||
"console-subscriber",
|
||||
|
||||
@@ -105,12 +105,103 @@ function ensureSSEConnected() {
|
||||
return;
|
||||
}
|
||||
|
||||
// Pour les autres événements, comportement existant
|
||||
// Pour les autres événements, mettre à jour le snapshot local directement
|
||||
snapshotState.lastEventAt.set(rendererId, timestamp);
|
||||
const lastSnapshot = snapshotState.lastSnapshotAt.get(rendererId) ?? 0;
|
||||
if (!snapshotState.snapshots.has(rendererId) || timestamp > lastSnapshot) {
|
||||
|
||||
const snapshot = snapshotState.snapshots.get(rendererId);
|
||||
|
||||
// Si pas de snapshot, on doit fetch
|
||||
if (!snapshot) {
|
||||
void fetchRendererSnapshot(rendererId, { force: true });
|
||||
return;
|
||||
}
|
||||
|
||||
// Sinon, mettre à jour le snapshot localement selon le type d'événement
|
||||
switch (event.type) {
|
||||
case "state_changed":
|
||||
snapshot.state.transport_state = event.state as any;
|
||||
break;
|
||||
|
||||
case "position_changed":
|
||||
// Convertir rel_time (HH:MM:SS) en millisecondes
|
||||
if (event.rel_time) {
|
||||
const parts = event.rel_time.split(":").map(Number);
|
||||
if (parts.length === 3) {
|
||||
snapshot.state.position_ms =
|
||||
((parts[0] ?? 0) * 3600 +
|
||||
(parts[1] ?? 0) * 60 +
|
||||
(parts[2] ?? 0)) *
|
||||
1000;
|
||||
}
|
||||
}
|
||||
// Convertir track_duration (HH:MM:SS) en millisecondes
|
||||
if (event.track_duration) {
|
||||
const parts = event.track_duration.split(":").map(Number);
|
||||
if (parts.length === 3) {
|
||||
snapshot.state.duration_ms =
|
||||
((parts[0] ?? 0) * 3600 +
|
||||
(parts[1] ?? 0) * 60 +
|
||||
(parts[2] ?? 0)) *
|
||||
1000;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case "volume_changed":
|
||||
snapshot.state.volume = event.volume;
|
||||
break;
|
||||
|
||||
case "mute_changed":
|
||||
snapshot.state.mute = event.mute;
|
||||
break;
|
||||
|
||||
case "metadata_changed":
|
||||
if (!snapshot.state.current_track) {
|
||||
snapshot.state.current_track = {
|
||||
title: null,
|
||||
artist: null,
|
||||
album: null,
|
||||
album_art_uri: null,
|
||||
};
|
||||
}
|
||||
snapshot.state.current_track.title = event.title;
|
||||
snapshot.state.current_track.artist = event.artist;
|
||||
snapshot.state.current_track.album = event.album;
|
||||
snapshot.state.current_track.album_art_uri = event.album_art_uri;
|
||||
break;
|
||||
|
||||
case "queue_updated":
|
||||
snapshot.state.queue_len = event.queue_length;
|
||||
// Pour la queue complète, on doit refetch
|
||||
void fetchRendererSnapshot(rendererId, { force: true });
|
||||
break;
|
||||
|
||||
case "binding_changed":
|
||||
if (event.server_id && event.container_id) {
|
||||
snapshot.binding = {
|
||||
server_id: event.server_id,
|
||||
container_id: event.container_id,
|
||||
has_seen_update: false,
|
||||
};
|
||||
snapshot.state.attached_playlist = snapshot.binding;
|
||||
} else {
|
||||
snapshot.binding = null;
|
||||
snapshot.state.attached_playlist = null;
|
||||
}
|
||||
break;
|
||||
|
||||
case "timer_started":
|
||||
case "timer_updated":
|
||||
case "timer_tick":
|
||||
case "timer_expired":
|
||||
case "timer_cancelled":
|
||||
// Les événements de timer ne modifient pas le snapshot renderer
|
||||
// (le timer state est géré séparément)
|
||||
break;
|
||||
}
|
||||
|
||||
// Trigger reactivity
|
||||
snapshotState.snapshots.set(rendererId, snapshot);
|
||||
});
|
||||
|
||||
sseConnected = true;
|
||||
|
||||
@@ -334,8 +334,8 @@ impl ControlPoint {
|
||||
}
|
||||
|
||||
tick = tick.wrapping_add(1);
|
||||
// 500ms polling for smoother position updates and progress bar
|
||||
thread::sleep(Duration::from_millis(500));
|
||||
// 250ms polling for smoother UI updates and fluid progress bar
|
||||
thread::sleep(Duration::from_millis(250));
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user