feature(gui): add needed function for communication between gui and core

This commit is contained in:
Patryk Hegenberg 2024-05-16 07:43:11 +02:00
parent 113e1cfe53
commit f1e48f6d12

View file

@ -23,6 +23,7 @@ use std::{
time::Duration, time::Duration,
}; };
// use tokio::sync::mpsc; // use tokio::sync::mpsc;
use tokio::sync::mpsc;
use tokio::{io::AsyncReadExt, task::JoinHandle, time::sleep}; use tokio::{io::AsyncReadExt, task::JoinHandle, time::sleep};
use tokio_tungstenite::tungstenite::{protocol::Message as WebSocketMessage, Error}; use tokio_tungstenite::tungstenite::{protocol::Message as WebSocketMessage, Error};
use tracing::{debug, error}; use tracing::{debug, error};
@ -48,21 +49,6 @@ struct Context {
task: Option<JoinHandle<()>>, task: Option<JoinHandle<()>>,
} }
// pub struct ProgressSender {
// tx: mpsc::Sender<String>,
// }
//
// impl ProgressSender {
// pub fn new() -> (Self, mpsc::Receiver<String>) {
// let (tx, rx) = mpsc::channel(100);
// (Self { tx }, rx)
// }
//
// pub async fn send(&self, message: String) -> Result<(), mpsc::error::SendError<String>> {
// self.tx.send(message).await
// }
// }
//
fn on_create_room( fn on_create_room(
context: &Context, context: &Context,
id: String, id: String,
@ -158,8 +144,16 @@ fn on_leave_room(context: &mut Context, _: usize) -> Status {
Status::Continue() Status::Continue()
} }
async fn send_progress(
progress_tx: &mpsc::Sender<String>,
progress_message: String,
) -> Result<(), mpsc::error::SendError<String>> {
progress_tx.send(progress_message).await
}
fn on_progress(context: &Context, progress: ProgressPacket) -> Status { fn on_progress(context: &Context, progress: ProgressPacket) -> Status {
// let prog_sender = ProgressSender::new(); // let prog_sender = ProgressSender::new();
let (progress_tx, _) = mpsc::channel(100);
if context.shared_key.is_none() { if context.shared_key.is_none() {
return Status::Err("Invalid progress packet: no shared key established".into()); return Status::Err("Invalid progress packet: no shared key established".into());
} }
@ -169,9 +163,18 @@ fn on_progress(context: &Context, progress: ProgressPacket) -> Status {
None => return Status::Err("Invalid index in progress packet.".into()), None => return Status::Err("Invalid index in progress packet.".into()),
}; };
let progress_message = format!("\rTransferring '{}': {}%", file.name, progress.progress);
print!("\rTransferring '{}': {}%", file.name, progress.progress); print!("\rTransferring '{}': {}%", file.name, progress.progress);
stdout().flush().unwrap(); stdout().flush().unwrap();
let send_result = tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap()
.block_on(send_progress(&progress_tx, progress_message));
if let Err(e) = send_result {
eprintln!("Fehler beim Senden der Fortschrittsnachricht: {}", e);
}
// let progress_message = format!("Transferring '{}': {}%", file.name, progress.progress); // let progress_message = format!("Transferring '{}': {}%", file.name, progress.progress);
// print!("\r{}", progress_message); // print!("\r{}", progress_message);
// stdout().flush().unwrap(); // stdout().flush().unwrap();