fix chat reading

This commit is contained in:
MeexReay 2025-04-14 18:15:29 +03:00
parent fc339f46ce
commit 8c442de4fa
3 changed files with 21 additions and 14 deletions

View File

@ -8,16 +8,15 @@ rand = "0.9.0"
regex = "1.11.1"
colored = "3.0.0"
lazy_static = "1.5.0"
crossterm = { version = "0.29.0", optional = true }
clap = { version = "4.5.36", features = ["derive"] }
serde = { version = "1.0.219", features = ["serde_derive"] }
serde_yml = "0.0.12"
crossterm = { version = "0.29.0", optional = true }
homedir = { version = "0.3.4", optional = true }
clap = { version = "4.5.36", features = ["derive"] }
native-tls = { version = "0.2.14", optional = true }
[features]
default = ["ssl", "pretty", "homedir"]
ssl = ["dep:native-tls"]
pretty = ["dep:crossterm"]
homedir = ["dep:homedir"]

View File

@ -50,7 +50,9 @@ impl ChatStorage {
pub fn update(&self, max_length: usize, messages: Vec<String>, packet_size: usize) {
self.packet_size.store(packet_size, Ordering::SeqCst);
let mut messages = messages;
if messages.len() > max_length {
messages.drain(max_length..);
}
*self.messages.write().unwrap() = messages;
}

View File

@ -120,6 +120,13 @@ pub fn skip_null(stream: &mut impl Read) -> Result<Vec<u8>, Box<dyn Error>> {
}
}
pub fn remove_trailing_null(vec: &mut Vec<u8>) -> Result<(), Box<dyn Error>> {
while vec.ends_with(&[0]) {
vec.remove(vec.len()-1);
}
Ok(())
}
/// Read messages
///
/// max_messages - max messages in list
@ -141,15 +148,13 @@ pub fn read_messages(
let data = if start_null {
let mut data = skip_null(stream)?;
loop {
let mut buf = vec![0; 1];
stream.read_exact(&mut buf)?;
let ch = buf[0];
if ch == 0 {
break
}
data.push(ch);
}
let mut buf = vec![0; 10];
let len = stream.read(&mut buf)?;
buf.truncate(len);
remove_trailing_null(&mut buf);
data.append(&mut buf);
data
} else {
let mut data = vec![0; 10];
@ -180,7 +185,8 @@ pub fn read_messages(
let mut data = skip_null(stream)?;
while data.len() < to_read {
let mut buf = vec![0; to_read - data.len()];
stream.read_exact(&mut buf)?;
let len = stream.read(&mut buf)?;
buf.truncate(len);
data.append(&mut buf);
}
data