From 94680c95e13bcb4a83d2511abc2f5f8d7d2d7dc0 Mon Sep 17 00:00:00 2001 From: MeexReay Date: Sat, 19 Apr 2025 01:24:07 +0300 Subject: [PATCH] ask name fix and some refactor --- src/chat/ctx.rs | 24 +++++++++++++----------- src/chat/gui.rs | 8 ++++---- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/chat/ctx.rs b/src/chat/ctx.rs index 4fdc1f1..ac9a4a7 100644 --- a/src/chat/ctx.rs +++ b/src/chat/ctx.rs @@ -1,11 +1,13 @@ use std::sync::{atomic::{AtomicUsize, Ordering}, mpsc::Sender, Arc, RwLock}; +use rand::random; + use super::config::Config; pub struct Context { - pub registered: Arc>>, - pub config: Arc>, - pub sender: Arc>>>>, + pub registered: RwLock>, + pub config: RwLock, + pub sender: RwLock>>>, pub messages: RwLock>, pub packet_size: AtomicUsize, pub name: String @@ -14,12 +16,12 @@ pub struct Context { impl Context { pub fn new(config: &Config) -> Context { Context { - registered: Arc::new(RwLock::new(None)), - config: Arc::new(RwLock::new(config.clone())), - sender: Arc::new(RwLock::new(None)), + registered: RwLock::new(None), + config: RwLock::new(config.clone()), + sender: RwLock::new(None), messages: RwLock::new(Vec::new()), packet_size: AtomicUsize::default(), - name: config.name.clone().expect("not implemented"), // TODO: ask for name + name: config.name.clone().unwrap_or_else(|| format!("Anon#{:X}", random::())), } } @@ -35,7 +37,7 @@ impl Context { self.messages.read().unwrap().clone() } - pub fn update(&self, max_length: usize, messages: Vec, packet_size: usize) { + pub fn put_messages_packet(&self, max_length: usize, messages: Vec, packet_size: usize) { self.packet_size.store(packet_size, Ordering::SeqCst); let mut messages = messages; if messages.len() > max_length { @@ -44,12 +46,12 @@ impl Context { *self.messages.write().unwrap() = messages; } - pub fn append_and_store(&self, max_length: usize, messages: Vec, packet_size: usize) { + pub fn add_messages_packet(&self, max_length: usize, messages: Vec, packet_size: usize) { self.packet_size.store(packet_size, Ordering::SeqCst); - self.append(max_length, messages); + self.add_message(max_length, messages); } - pub fn append(&self, max_length: usize, messages: Vec) { + pub fn add_message(&self, max_length: usize, messages: Vec) { self.messages.write().unwrap().append(&mut messages.clone()); if self.messages.read().unwrap().len() > max_length { self.messages.write().unwrap().drain(max_length..); diff --git a/src/chat/gui.rs b/src/chat/gui.rs index fd0d4d0..34497ff 100644 --- a/src/chat/gui.rs +++ b/src/chat/gui.rs @@ -35,7 +35,7 @@ pub fn add_chat_message(ctx: Arc, message: String) { } pub fn print_message(ctx: Arc, message: String) -> Result<(), Box> { - ctx.append(ctx.config(|o| o.max_messages), vec![message.clone()]); + ctx.add_message(ctx.config(|o| o.max_messages), vec![message.clone()]); add_chat_message(ctx.clone(), message); Ok(()) } @@ -50,12 +50,12 @@ pub fn recv_tick(ctx: Arc) -> Result<(), Box> { ) { Ok(Some((messages, size))) => { if ctx.config(|o| o.chunked_enabled) { - ctx.append_and_store(ctx.config(|o| o.max_messages), messages.clone(), size); + ctx.add_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size); for msg in messages { add_chat_message(ctx.clone(), msg.clone()); } } else { - ctx.update(ctx.config(|o| o.max_messages), messages.clone(), size); + ctx.put_messages_packet(ctx.config(|o| o.max_messages), messages.clone(), size); for msg in messages { add_chat_message(ctx.clone(), msg.clone()); } @@ -63,7 +63,7 @@ pub fn recv_tick(ctx: Arc) -> Result<(), Box> { }, Err(e) => { let msg = format!("Read messages error: {}", e.to_string()).to_string(); - ctx.append(ctx.config(|o| o.max_messages), vec![msg.clone()]); + ctx.add_message(ctx.config(|o| o.max_messages), vec![msg.clone()]); add_chat_message(ctx.clone(), msg.clone()); } _ => {}