commit 6046ad2d421c1a57a945c507a5adca14d9aebfad
parent 2c9ea4739cc4bfe285c3def648e77b336aa5e797
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Fri, 7 Apr 2023 14:47:57 -0700
simplify code
Diffstat:
| M | src/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 {