bhcli

"Strange's fork of n0tr1v's bhcli (onion)"
git clone https://git.dasho.dev/Strange/bhcli.git
Log | Files | Refs | README

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:
Msrc/main.rs | 20++++++++------------
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);