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" regex = "1.11.1"
colored = "3.0.0" colored = "3.0.0"
lazy_static = "1.5.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 = { version = "1.0.219", features = ["serde_derive"] }
serde_yml = "0.0.12" serde_yml = "0.0.12"
crossterm = { version = "0.29.0", optional = true }
homedir = { version = "0.3.4", optional = true } homedir = { version = "0.3.4", optional = true }
clap = { version = "4.5.36", features = ["derive"] }
native-tls = { version = "0.2.14", optional = true } native-tls = { version = "0.2.14", optional = true }
[features] [features]
default = ["ssl", "pretty", "homedir"] default = ["ssl", "pretty", "homedir"]
ssl = ["dep:native-tls"] ssl = ["dep:native-tls"]
pretty = ["dep:crossterm"] pretty = ["dep:crossterm"]
homedir = ["dep:homedir"] homedir = ["dep:homedir"]

View File

@ -50,7 +50,9 @@ impl ChatStorage {
pub fn update(&self, max_length: usize, messages: Vec<String>, packet_size: usize) { pub fn update(&self, max_length: usize, messages: Vec<String>, packet_size: usize) {
self.packet_size.store(packet_size, Ordering::SeqCst); self.packet_size.store(packet_size, Ordering::SeqCst);
let mut messages = messages; let mut messages = messages;
messages.drain(max_length..); if messages.len() > max_length {
messages.drain(max_length..);
}
*self.messages.write().unwrap() = messages; *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 /// Read messages
/// ///
/// max_messages - max messages in list /// max_messages - max messages in list
@ -141,15 +148,13 @@ pub fn read_messages(
let data = if start_null { let data = if start_null {
let mut data = skip_null(stream)?; let mut data = skip_null(stream)?;
loop { let mut buf = vec![0; 10];
let mut buf = vec![0; 1]; let len = stream.read(&mut buf)?;
stream.read_exact(&mut buf)?; buf.truncate(len);
let ch = buf[0];
if ch == 0 { remove_trailing_null(&mut buf);
break data.append(&mut buf);
}
data.push(ch);
}
data data
} else { } else {
let mut data = vec![0; 10]; let mut data = vec![0; 10];
@ -180,7 +185,8 @@ pub fn read_messages(
let mut data = skip_null(stream)?; let mut data = skip_null(stream)?;
while data.len() < to_read { while data.len() < to_read {
let mut buf = vec![0; to_read - data.len()]; 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.append(&mut buf);
} }
data data