bhcli

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

commit 6046ad2d421c1a57a945c507a5adca14d9aebfad
parent 2c9ea4739cc4bfe285c3def648e77b336aa5e797
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Fri,  7 Apr 2023 14:47:57 -0700

simplify code

Diffstat:
Msrc/main.rs | 146++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 74 insertions(+), 72 deletions(-)

diff --git a/src/main.rs b/src/main.rs @@ -1376,6 +1376,12 @@ fn get_msgs( datetime_fmt: &str, messages: &Arc<Mutex<Vec<Message>>>) -> anyhow::Result<()> { + let parse_date = |date: &str| -> NaiveDateTime { + let now = Utc::now(); + let date_fmt = format!("%Y-{}", datetime_fmt); + NaiveDateTime::parse_from_str(format!("{}-{}", now.year(), date).as_str(), date_fmt.as_str()).unwrap() + }; + let (_stream, stream_handle) = OutputStream::try_default().unwrap(); let source = Decoder::new_mp3(Cursor::new(SOUND1)).unwrap(); @@ -1385,96 +1391,92 @@ fn get_msgs( let doc = Document::from(resp_text.as_str()); let mut should_notify = false; { + let new_messages = match extract_messages(&doc) { + Ok(messages) => messages, + Err(_) => { + // Failed to get messages, probably need re-login + sig.lock().unwrap().signal(&ExitSignal::NeedLogin); + return Ok(()); + } + }; let mut messages = messages.lock().unwrap(); - if let Ok(new_messages) = extract_messages(&doc) { - let parse_date = |date: &str| -> NaiveDateTime { - let now = Utc::now(); - let date_fmt = format!("%Y-{}", datetime_fmt); - NaiveDateTime::parse_from_str(format!("{}-{}", now.year(), date).as_str(), date_fmt.as_str()).unwrap() - }; + if let Some(last_known_msg) = messages.get(0) { + let msg = last_known_msg; + let parsed_dt = parse_date(&msg.date); + for new_msg in &new_messages { + let new_parsed_dt = parse_date(&new_msg.date); - if let Some(last_known_msg) = messages.get(0) { - let msg = last_known_msg; - let parsed_dt = parse_date(&msg.date); - for new_msg in &new_messages { - let new_parsed_dt = parse_date(&new_msg.date); + if parsed_dt > new_parsed_dt || (new_msg.date == msg.date && msg.text == new_msg.text) { + break; + } - if parsed_dt > new_parsed_dt || (new_msg.date == msg.date && msg.text == new_msg.text) { - break; + if let Some((from, to_opt, msg)) = get_message(&new_msg.text, &members_tag) { + // Process new messages + + // !bhcli filters + if msg == "!bhcli" && username == N0TR1V { + let msg = format!("@{} -> {}", from, BHCLI_BLOG_URL).to_owned(); + tx.send(PostType::Post(msg, None)).unwrap(); + } else if msg == "/logout" && from == STUXNET && username == N0TR1V { + log::error!("forced logout by {}", from); + sig.lock().unwrap().signal(&ExitSignal::Terminate); + return Ok(()); } - - if let Some((from, to_opt, msg)) = get_message(&new_msg.text, &members_tag) { - // Process new messages - - // !bhcli filters - if msg == "!bhcli" && username == N0TR1V { - let msg = format!("@{} -> {}", from, BHCLI_BLOG_URL).to_owned(); - tx.send(PostType::Post(msg, None)).unwrap(); - } else if msg == "/logout" && from == STUXNET && username == N0TR1V { - log::error!("forced logout by {}", from); - sig.lock().unwrap().signal(&ExitSignal::Terminate); - return Ok(()); - } - // Auto kick spammers - if username == N0TR1V { - if from != N0TR1V && from != FAGGOT { - if msg.contains(FAGGOT) && (msg.contains("pedo") || msg.contains("child")) { - let msg = "spam".to_owned(); - let username_to_kick = from.to_owned(); - tx.send(PostType::Kick(msg, username_to_kick)).unwrap(); - } + // Auto kick spammers + if username == N0TR1V { + if from != N0TR1V && from != FAGGOT { + if msg.contains(FAGGOT) && (msg.contains("pedo") || msg.contains("child")) { + let msg = "spam".to_owned(); + let username_to_kick = from.to_owned(); + tx.send(PostType::Kick(msg, username_to_kick)).unwrap(); } } - // Notify when tagged - if msg.contains(format!("@{}", &username).as_str()) { + } + // Notify when tagged + if msg.contains(format!("@{}", &username).as_str()) { + should_notify = true; + } + // Notify when PM is received + if let Some(to) = to_opt { + if to == username && msg != "!up" { should_notify = true; } - // Notify when PM is received - if let Some(to) = to_opt { - if to == username && msg != "!up" { - should_notify = true; - } - } } } } + } - // Build messages vector. Tag deleted messages. - let mut old_msg_ptr = 0; - for new_msg in new_messages.into_iter() { - loop { - if let Some(old_msg) = messages.get_mut(old_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 { - old_msg.deleted = true; - old_msg_ptr += 1; - continue; - } - if new_parsed_dt == parsed_dt { - if old_msg.text != new_msg.text { - messages.insert(old_msg_ptr, new_msg); - old_msg_ptr += 1; - } + // Build messages vector. Tag deleted messages. + let mut old_msg_ptr = 0; + for new_msg in new_messages.into_iter() { + loop { + if let Some(old_msg) = messages.get_mut(old_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 { + old_msg.deleted = true; + old_msg_ptr += 1; + continue; + } + if new_parsed_dt == parsed_dt { + if old_msg.text != new_msg.text { + messages.insert(old_msg_ptr, new_msg); old_msg_ptr += 1; - break; } + old_msg_ptr += 1; + break; } - messages.insert(old_msg_ptr, new_msg); - old_msg_ptr += 1; - break; } + messages.insert(old_msg_ptr, new_msg); + old_msg_ptr += 1; + break; } - - // Notify new messages has arrived. - // 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(); - } else { - // Failed to get messages, probably need re-login - sig.lock().unwrap().signal(&ExitSignal::NeedLogin); - return Ok(()); } + + // Notify new messages has arrived. + // 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(); } let muted = { *is_muted.lock().unwrap() }; if should_notify && !muted {