refactor: ♻️ refactor and update dependencies

This commit is contained in:
Ahmet Kaan GÜMÜŞ 2024-04-14 23:48:14 +03:00
parent 73f624b14f
commit 0f31fd54ea
10 changed files with 107 additions and 83 deletions

View file

@ -7,7 +7,7 @@ edition = "2021"
[dependencies]
anyhow = "1.0.81"
brotli = "4.0.0"
brotli = "5.0.0"
cpal = { version = "0.15.3", features = ["wasm-bindgen"] }
dioxus = { version = "0.5.0", features = ["web"] }
futures-core = "0.3.30"

View file

@ -113,7 +113,7 @@ pub fn coin_status_renderer(server_address: String) -> Element {
}
None => {
is_loading.set(false);
coin_result.set(CoinStatus {status: Coin::Dead});
coin_result.set(CoinStatus { status: Coin::Dead });
}
}
}

View file

@ -1,3 +1,7 @@
pub mod components;
pub mod listening;
pub mod status;
pub mod streaming;
static BUFFER_LENGTH: usize = 1000000;
static BUFFER_LIMIT: usize = BUFFER_LENGTH / 100 * 90;

46
front/src/listening.rs Normal file
View file

@ -0,0 +1,46 @@
use std::{mem::MaybeUninit, sync::Arc, time::Duration};
use cpal::traits::{DeviceTrait, HostTrait, StreamTrait};
use dioxus::signals::Signal;
use ringbuf::{Consumer, SharedRb};
use crate::BUFFER_LIMIT;
pub async fn listen_podcast(
is_listening: Signal<bool>,
mut consumer: Consumer<f32, Arc<SharedRb<f32, Vec<MaybeUninit<f32>>>>>,
) {
log::info!("Attention! Show must start!");
let host = cpal::default_host();
let output_device = host.default_output_device().unwrap();
let config: cpal::StreamConfig = output_device.default_output_config().unwrap().into();
let output_data_fn = move |data: &mut [f32], _: &cpal::OutputCallbackInfo| {
if consumer.len() > BUFFER_LIMIT {
consumer.clear();
log::error!("Slow Consumer: DROPPED ALL Packets");
}
for sample in data {
*sample = match consumer.pop() {
Some(s) => s,
None => 0.0,
};
}
};
let output_stream = output_device
.build_output_stream(&config, output_data_fn, err_fn, None)
.unwrap();
output_stream.play().unwrap();
while is_listening() {
tokio_with_wasm::tokio::time::sleep(Duration::from_secs(1)).await;
}
output_stream.pause().unwrap();
log::info!("Attention! Time to turn home!");
}
fn err_fn(err: cpal::StreamError) {
eprintln!("Something Happened: {}", err);
}

View file

@ -77,20 +77,16 @@ pub async fn server_status_check(
}
pub async fn coin_status_check(server_address: &String) -> Option<CoinStatus> {
match reqwest::get(format!("{}{}", server_address, "/coin")).await {
Ok(response) => {
match response.json::<CoinStatus>().await {
Ok(coin_status)=> {
Some(coin_status)
}
Err(err_val) => {
log::error!("Error: Can't Deserialise -> {}", err_val);
None
}
Ok(response) => match response.json::<CoinStatus>().await {
Ok(coin_status) => Some(coin_status),
Err(err_val) => {
log::error!("Error: Can't Deserialise -> {}", err_val);
None
}
},
Err(err_val) => {
log::error!("Error: Response from Server -> {}", err_val);
None
},
}
}
}

View file

@ -1,24 +1,22 @@
use std::{io::Write, mem::MaybeUninit, sync::Arc, time::Duration};
use std::{io::Write, mem::MaybeUninit, sync::Arc};
use brotli::DecompressorWriter;
use cpal::traits::{DeviceTrait, HostTrait, StreamTrait};
use dioxus::{
prelude::spawn,
signals::{Signal, Writable},
};
use futures_util::{stream::SplitStream, SinkExt, StreamExt};
use ringbuf::{Consumer, HeapRb, Producer, SharedRb};
use ringbuf::{HeapRb, Producer, SharedRb};
use tokio_tungstenite_wasm::{Message, WebSocketStream};
static BUFFER_LENGTH: usize = 1000000;
static BUFFER_LIMIT: usize = BUFFER_LENGTH/100*90;
use crate::{listening::listen_podcast, BUFFER_LENGTH};
pub async fn start_listening(
mut is_maintaining: Signal<(bool, bool)>,
mut is_listening: Signal<bool>,
) {
//seperate record and stream, refactor
if is_listening() {
log::info!("Trying Sir");
let connect_addr = "ws://192.168.1.2:2424";
@ -61,10 +59,9 @@ pub async fn sound_stream(
while let Some(message_with_question) = stream_consumer.next().await {
if is_listening() {
//log::info!("{}", message_with_question.unwrap().len());
let mut data:Vec<u8> = vec![];
if let Message::Binary(message) = message_with_question.unwrap() {
let mut data: Vec<u8> = vec![];
if let Message::Binary(message) = message_with_question.unwrap() {
data = message;
}
@ -72,15 +69,17 @@ pub async fn sound_stream(
if let Err(err_val) = decompression_writer.write_all(&data) {
log::error!("Error: Decompression | {}", err_val);
}
let uncompressed_data =
match decompression_writer.into_inner() {
let uncompressed_data = match decompression_writer.into_inner() {
Ok(healty_packet) => healty_packet,
Err(unhealty_packet) => {log::warn!("Warning: Unhealty Packet | {}", unhealty_packet.len());unhealty_packet},
Err(unhealty_packet) => {
log::warn!("Warning: Unhealty Packet | {}", unhealty_packet.len());
unhealty_packet
}
};
let data = String::from_utf8(uncompressed_data).unwrap();
let mut datum_parsed:Vec<char> = vec![];
let mut data_parsed:Vec<String> = vec![];
let mut datum_parsed: Vec<char> = vec![];
let mut data_parsed: Vec<String> = vec![];
for char in data.chars() {
if char == '+' || char == '-' {
data_parsed.push(datum_parsed.iter().collect());
@ -100,7 +99,7 @@ pub async fn sound_stream(
Ok(sample) => sample,
Err(_) => 0.0,
};
if let Err(_) = producer.push(sample){}
if let Err(_) = producer.push(sample) {}
}
} else {
break;
@ -109,41 +108,3 @@ pub async fn sound_stream(
log::info!("Connection Lost Sir");
}
async fn listen_podcast(
is_listening: Signal<bool>,
mut consumer: Consumer<f32, Arc<SharedRb<f32, Vec<MaybeUninit<f32>>>>>,
) {
log::info!("Attention! Show must start!");
let host = cpal::default_host();
let output_device = host.default_output_device().unwrap();
let config: cpal::StreamConfig = output_device.default_output_config().unwrap().into();
let output_data_fn = move |data: &mut [f32], _: &cpal::OutputCallbackInfo| {
if consumer.len() > BUFFER_LIMIT {
consumer.clear();
log::error!("Slow Consumer: DROPPED ALL Packets");
}
for sample in data {
*sample = match consumer.pop() {
Some(s) => s,
None => 0.0,
};
}
};
let output_stream = output_device
.build_output_stream(&config, output_data_fn, err_fn, None)
.unwrap();
output_stream.play().unwrap();
while is_listening() {
tokio_with_wasm::tokio::time::sleep(Duration::from_secs(1)).await;
}
output_stream.pause().unwrap();
log::info!("Attention! Time to turn home!");
}
fn err_fn(err: cpal::StreamError) {
eprintln!("Something Happened: {}", err);
}