From 1eca7df85dd28b6a2f5bdb3d0ef4fed688c79b4d Mon Sep 17 00:00:00 2001 From: Marcus Hanestad Date: Wed, 4 Jun 2025 13:15:39 +0200 Subject: [PATCH] rs-terminal: decode PlaybackUpdate for current version --- senders/terminal/src/fcastsession.rs | 28 +++++++++++++++++++++------- senders/terminal/src/main.rs | 2 +- senders/terminal/src/models/v3.rs | 4 ++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/senders/terminal/src/fcastsession.rs b/senders/terminal/src/fcastsession.rs index b83462d..c3a67ed 100644 --- a/senders/terminal/src/fcastsession.rs +++ b/senders/terminal/src/fcastsession.rs @@ -8,7 +8,7 @@ use std::{ use crate::{ models::{ - v2::{self, PlaybackUpdateMessage}, + v2, v3, PlaybackErrorMessage, VersionMessage, VolumeUpdateMessage, }, transport::Transport, @@ -303,12 +303,26 @@ impl<'a> FCastSession<'a> { match opcode { Opcode::PlaybackUpdate => { if let Some(body_str) = body { - if let Ok(playback_update_msg) = - serde_json::from_str::(body_str.as_str()) - { - println!("Received playback update {:?}", playback_update_msg); - } else { - println!("Received playback update with malformed body."); + match self.state { + SessionState::Connected(ProtoVersion::V2) => { + if let Ok(playback_update_msg) = + serde_json::from_str::(body_str.as_str()) + { + println!("Received playback update {:?}", playback_update_msg); + } else { + println!("Received playback update with malformed body."); + } + } + SessionState::Connected(ProtoVersion::V3) => { + if let Ok(playback_update_msg) = + serde_json::from_str::(body_str.as_str()) + { + println!("Received playback update {:?}", playback_update_msg); + } else { + println!("Received playback update with malformed body."); + } + } + _ => unreachable!(), } } else { println!("Received playback update with no body."); diff --git a/senders/terminal/src/main.rs b/senders/terminal/src/main.rs index 3f9042d..e5e7ace 100644 --- a/senders/terminal/src/main.rs +++ b/senders/terminal/src/main.rs @@ -63,7 +63,7 @@ fn run() -> Result<(), Box> { Arg::with_name("subscribe") .short('s') .long("subscribe") - .value_name("SUBSCRIPTIONS") + .value_name("EVENTS") .help("A comma separated list of events to subscribe to (e.g. MediaItemStart,KeyDown). \ Available events: [MediaItemStart, MediaItemEnd, MediaItemChange, KeyDown, KeyUp]") .required(false) diff --git a/senders/terminal/src/models/v3.rs b/senders/terminal/src/models/v3.rs index 10fe448..ea0b7a4 100644 --- a/senders/terminal/src/models/v3.rs +++ b/senders/terminal/src/models/v3.rs @@ -149,7 +149,7 @@ pub struct PlaylistContent { pub metadata: Option, } -#[derive(Serialize_repr, Debug)] +#[derive(Serialize_repr, Deserialize_repr, Debug)] #[repr(u8)] pub enum PlaybackState { Idle = 0, @@ -157,7 +157,7 @@ pub enum PlaybackState { Paused = 2, } -#[derive(Serialize, Debug)] +#[derive(Serialize, Deserialize, Debug)] pub struct PlaybackUpdateMessage { // The time the packet was generated (unix time milliseconds) pub generationTime: u64,