From 723d7d62d85dbd1a7f40994ad708d117a8ddc244 Mon Sep 17 00:00:00 2001 From: Varga Marcell <128537619+marci1175@users.noreply.github.com> Date: Fri, 22 Dec 2023 22:47:15 +0100 Subject: [PATCH] szar --- src/app/backend.rs | 19 ++++++++++++++ src/app/ui/client.rs | 62 ++++++++++++++++++++++++++------------------ 2 files changed, 56 insertions(+), 25 deletions(-) diff --git a/src/app/backend.rs b/src/app/backend.rs index 602fbfb5..3a4f4ae3 100644 --- a/src/app/backend.rs +++ b/src/app/backend.rs @@ -18,6 +18,10 @@ use crate::app::input::Input; #[derive(serde::Deserialize, serde::Serialize)] #[serde(default)] pub struct TemplateApp { + //request tracking + #[serde(skip)] + pub requests: RequestList, + //audio playback #[serde(skip)] pub audio_playback: AudioPlayback, @@ -152,6 +156,9 @@ impl Default for TemplateApp { let (itx, irx) = mpsc::channel::(); let (audio_save_tx, audio_save_rx) = mpsc::channel::(); Self { + //request tracking + requests: RequestList::default(), + //audio playback audio_playback: AudioPlayback::default(), @@ -726,3 +733,15 @@ impl Default for AudioPlayback { } } } + +//Request list to keep track of performance, one request per file +#[derive(Debug, Clone, Copy)] +pub struct RequestList { + pub audio: bool, + pub image: bool, +} +impl Default for RequestList { + fn default() -> Self { + Self { audio: true, image: true } + } +} \ No newline at end of file diff --git a/src/app/ui/client.rs b/src/app/ui/client.rs index 42f52b8c..48593bd5 100644 --- a/src/app/ui/client.rs +++ b/src/app/ui/client.rs @@ -291,22 +291,39 @@ impl TemplateApp { true => { //if we already have the sound file ::: - ui.with_layout(Layout::left_to_right(Align::Center), |ui|{ - if ui.button("Play").clicked() { + ui.with_layout(Layout::top_down(Align::Center), |ui|{ + match self.audio_playback.sink.as_mut() { + Some(sink) => { + match sink.is_paused() { + true => { + if ui.button("Play").clicked() { + sink.play(); + }; + }, + false => { + if ui.button("Stop").clicked() { + sink.pause() + } + } + } + } + None => { + if ui.button("Play").clicked() { + let file = BufReader::new(File::open(PathBuf::from(format!("{}\\szeChat\\Client\\{}\\Audios\\{}", env!("APPDATA"), general_purpose::URL_SAFE_NO_PAD.encode(self.send_on_ip.clone()), audio.index))).unwrap()); + + let source = Decoder::new(file).unwrap(); + + self.audio_playback.sink = Some(Sink::try_new(&self.audio_playback.stream_handle).unwrap()); - let file = BufReader::new(File::open(PathBuf::from(format!("{}\\szeChat\\Client\\{}\\Audios\\{}", env!("APPDATA"), general_purpose::URL_SAFE_NO_PAD.encode(self.send_on_ip.clone()), audio.index))).unwrap()); - - let source = Decoder::new(file).unwrap(); - - //let _play = self.stream_handle.play_raw(source.convert_samples()); - - //set ui - - self.audio_playback.sink = Some(Sink::try_new(&self.audio_playback.stream_handle).unwrap()); + let sink = self.audio_playback.sink.as_mut().unwrap(); - self.audio_playback.sink.as_mut().unwrap().append(source); + sink.append(source); - }; + sink.play(); + }; + } + } + }); ui.label(&audio.file_name); @@ -318,12 +335,7 @@ impl TemplateApp { Sink.pause(); } - let unpause = ui.button("Unpause"); - if unpause.clicked() { - Sink.play(); - - - } + } }, @@ -331,7 +343,7 @@ impl TemplateApp { //check if we already have sound file //check if we are visible - if !ui.is_visible() { + if !ui.is_visible() || !self.requests.audio { return; } @@ -344,7 +356,7 @@ impl TemplateApp { let message = ClientMessage::construct_audio_request_msg(audio.index, passw, author, send_on_ip); - tokio::spawn(async move { + self.requests.audio = tokio::spawn(async move { match client::send_msg(message).await { Ok(ok) => { match sender.send(ok) { @@ -358,7 +370,7 @@ impl TemplateApp { println!("{err} ln 264") } } - }); + }).is_finished(); }, }; @@ -409,7 +421,7 @@ impl TemplateApp { Err(_err) => { //check if we are visible - if !ui.is_visible() { + if !ui.is_visible() || !self.requests.image { return; } @@ -422,7 +434,7 @@ impl TemplateApp { let message = ClientMessage::construct_image_request_msg(picture.index, passw, author, send_on_ip); - tokio::spawn(async move { + self.requests.image = tokio::spawn(async move { match client::send_msg(message).await { Ok(ok) => { match sender.send(ok) { @@ -436,7 +448,7 @@ impl TemplateApp { println!("{err} ln 264") } } - }); + }).is_finished(); }, };