commit 297c8a8b06542e26ef6ee160b7907aaffe2d7537
parent ae3f4b4fd99cac6a1ad83d056bcd7f3a40551cf8
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 2 Apr 2023 01:22:36 -0700
avoid doing a lot of clone
Diffstat:
1 file changed, 8 insertions(+), 12 deletions(-)
diff --git a/src/main.rs b/src/main.rs
@@ -646,37 +646,35 @@ impl LeChatPHPClient {
}
// Build messages vector. Tag deleted messages.
- let mut msgs_repl = Vec::new();
let mut old_msg_ptr = 0;
let mut new_msg_ptr = 0;
let mut i = 0;
while old_msg_ptr < messages.len() || new_msg_ptr < new_messages.len() {
- if let Some(old_msg) = messages.get(old_msg_ptr) {
+ if let Some(old_msg) = messages.get_mut(old_msg_ptr) {
if let Some(new_msg) = new_messages.get(new_msg_ptr) {
let new_parsed_dt = parse_date(&new_msg.date);
let parsed_dt = parse_date(&old_msg.date);
if new_parsed_dt > parsed_dt {
- msgs_repl.push(new_msg.clone());
+ messages.insert(old_msg_ptr, new_msg.clone());
+ old_msg_ptr += 1;
new_msg_ptr += 1;
} else if new_parsed_dt == parsed_dt {
- msgs_repl.push(new_msg.clone());
if old_msg.text.text() != new_msg.text.text() {
- msgs_repl.push(old_msg.clone());
+ messages.insert(old_msg_ptr, new_msg.clone());
+ old_msg_ptr += 1;
}
new_msg_ptr += 1;
old_msg_ptr += 1;
} else {
- let mut tmp = old_msg.clone();
- tmp.deleted = true;
- msgs_repl.push(tmp);
+ old_msg.deleted = true;
old_msg_ptr += 1;
}
} else {
- msgs_repl.push(old_msg.clone());
old_msg_ptr += 1;
}
} else if let Some(new_msg) = new_messages.get(new_msg_ptr) {
- msgs_repl.push(new_msg.clone());
+ messages.insert(old_msg_ptr, new_msg.clone());
+ old_msg_ptr += 1;
new_msg_ptr += 1;
}
i += 1;
@@ -689,8 +687,6 @@ impl LeChatPHPClient {
// This ensure that we redraw the messages on the screen right away.
// Otherwise, the screen would not redraw until a keyboard event occurs.
messages_updated_tx.send(true).unwrap();
- // Update "messages" with new value
- *messages = msgs_repl;
} else {
// Failed to get messages, probably need relogin
sig.lock().unwrap().signal(ExitSignal::NeedLogin);