From d1bd0adf4f993d12b7c136d3f916309e2b57c430 Mon Sep 17 00:00:00 2001 From: chmanie Date: Fri, 2 Jun 2023 18:53:01 +0200 Subject: [PATCH] Add init function --- cbd-tui/src/main.rs | 26 +++++++++++++++++++++++--- cbd-tui/src/rpc.rs | 8 +++++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/cbd-tui/src/main.rs b/cbd-tui/src/main.rs index d283047..ca0bf07 100644 --- a/cbd-tui/src/main.rs +++ b/cbd-tui/src/main.rs @@ -2,8 +2,8 @@ mod rpc; use crabidy_core::proto::crabidy::{ crabidy_service_client::CrabidyServiceClient, - get_update_stream_response::Update as StreamUpdate, GetLibraryNodeRequest, LibraryNode, - PlayState, Queue, QueueTrack, Track, TrackPosition, + get_update_stream_response::Update as StreamUpdate, GetLibraryNodeRequest, + InitResponse as InitialData, LibraryNode, PlayState, Queue, QueueTrack, Track, TrackPosition, }; use crossterm::{ @@ -385,6 +385,7 @@ impl App { // FIXME: Rename this enum MessageToUi { + Init(InitialData), ReplaceLibraryNode(LibraryNode), Update(StreamUpdate), } @@ -449,6 +450,9 @@ async fn orchestrate<'a>( tx.send(MessageToUi::ReplaceLibraryNode(root_node.clone())); } + let init_data = rpc_client.init().await?; + tx.send_async(MessageToUi::Init(init_data)).await?; + loop { poll(&mut rpc_client, &rx, &tx).await.ok(); } @@ -489,6 +493,18 @@ fn run_ui(tx: Sender, rx: Receiver) { MessageToUi::ReplaceLibraryNode(node) => { app.library.update(node); } + MessageToUi::Init(init_data) => { + if let Some(queue) = init_data.queue { + app.queue.update(queue); + } + if let Some(track) = init_data.queue_track { + app.now_playing.update_track(track.track); + app.queue.update_position(track.queue_position as usize); + } + if let Some(ps) = PlayState::from_i32(init_data.play_state) { + app.now_playing.update_play_state(ps); + } + } MessageToUi::Update(update) => match update { StreamUpdate::Queue(queue) => { app.queue.update(queue); @@ -697,6 +713,10 @@ fn ui(f: &mut Frame, app: &mut App) { PlayState::Playing => "♫", _ => "", }; + let album_text = match &track.album { + Some(album) => album.title.to_string(), + None => "No album".to_string(), + }; vec![ Spans::from(Span::raw("")), Spans::from(Span::raw(play_text)), @@ -711,7 +731,7 @@ fn ui(f: &mut Frame, app: &mut App) { Style::default().add_modifier(Modifier::BOLD), ), ]), - Spans::from(Span::raw("Album missing")), + Spans::from(Span::raw(album_text)), ] } else { vec![ diff --git a/cbd-tui/src/rpc.rs b/cbd-tui/src/rpc.rs index cb152a3..c0914a1 100644 --- a/cbd-tui/src/rpc.rs +++ b/cbd-tui/src/rpc.rs @@ -2,7 +2,7 @@ use crabidy_core::proto::crabidy::{ crabidy_service_client::CrabidyServiceClient, get_update_stream_response::Update, GetLibraryNodeRequest, GetLibraryNodeResponse, GetUpdateStreamRequest, GetUpdateStreamResponse, LibraryNode, ReplaceRequest, SetCurrentRequest, SetCurrentResponse, TogglePlayRequest, - TogglePlayResponse, + TogglePlayResponse, InitRequest, InitResponse, }; use std::{ @@ -74,6 +74,12 @@ impl RpcClient { mem::replace(&mut self.update_stream, update_stream); } + pub async fn init(&mut self) -> Result> { + let init_request = Request::new(InitRequest {}); + let response = self.client.init(init_request).await?; + Ok(response.into_inner()) + } + pub async fn get_library_node( &mut self, uuid: &str,