thread::sleep blocking fix + better print system
This commit is contained in:
parent
19c41eff6b
commit
a17de20b2b
2 changed files with 26 additions and 20 deletions
|
@ -3,7 +3,6 @@ use std::{
|
||||||
fs::{self, OpenOptions},
|
fs::{self, OpenOptions},
|
||||||
io::Write,
|
io::Write,
|
||||||
path::Path,
|
path::Path,
|
||||||
thread::sleep,
|
|
||||||
time,
|
time,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -17,6 +16,7 @@ use lemmy_db_schema::{
|
||||||
ListingType,
|
ListingType,
|
||||||
};
|
};
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
|
use tokio::time::sleep;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
use crate::CLIENT;
|
use crate::CLIENT;
|
||||||
|
@ -161,7 +161,7 @@ impl Config {
|
||||||
|
|
||||||
post_queue.push((new_post, prev_data));
|
post_queue.push((new_post, prev_data));
|
||||||
}
|
}
|
||||||
sleep(time::Duration::from_millis(100)); // Should prevent dos-ing J-Novel servers
|
sleep(time::Duration::from_millis(100)).await; // Should prevent dos-ing J-Novel servers
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
42
src/main.rs
42
src/main.rs
|
@ -16,10 +16,11 @@ use std::{
|
||||||
atomic::{AtomicBool, Ordering},
|
atomic::{AtomicBool, Ordering},
|
||||||
Arc,
|
Arc,
|
||||||
},
|
},
|
||||||
thread::{self, sleep},
|
thread::{self},
|
||||||
time::{self, Duration},
|
time::{self, Duration}, vec,
|
||||||
};
|
};
|
||||||
use tokio::sync::Mutex;
|
use tokio::sync::Mutex;
|
||||||
|
use tokio::time::sleep;
|
||||||
|
|
||||||
mod config;
|
mod config;
|
||||||
|
|
||||||
|
@ -40,6 +41,7 @@ struct Bot {
|
||||||
community_ids: CommunitiesVector,
|
community_ids: CommunitiesVector,
|
||||||
auth: Sensitive<String>,
|
auth: Sensitive<String>,
|
||||||
start_time: NaiveDateTime,
|
start_time: NaiveDateTime,
|
||||||
|
message_queue: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Bot {
|
impl Bot {
|
||||||
|
@ -51,6 +53,7 @@ impl Bot {
|
||||||
community_ids: CommunitiesVector::new(),
|
community_ids: CommunitiesVector::new(),
|
||||||
auth: Sensitive::new("".to_string()),
|
auth: Sensitive::new("".to_string()),
|
||||||
start_time: Utc::now().naive_local(),
|
start_time: Utc::now().naive_local(),
|
||||||
|
message_queue: vec![],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +80,7 @@ impl Bot {
|
||||||
self.auth = jwt.clone();
|
self.auth = jwt.clone();
|
||||||
return Ok(jwt);
|
return Ok(jwt);
|
||||||
} else {
|
} else {
|
||||||
println!("Error Code: {:?}", res.status());
|
self.message_queue.push(format!("Error Code: {:?}", res.status()));
|
||||||
return Err(Box::new(res.error_for_status().unwrap_err()));
|
return Err(Box::new(res.error_for_status().unwrap_err()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -119,7 +122,7 @@ impl Bot {
|
||||||
let _ = self.pin(remove_community_pin);
|
let _ = self.pin(remove_community_pin);
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
println!("Unable to unpin old post, please do so manually");
|
self.message_queue.push(format!("Unable to unpin old post, please do so manually"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,7 +160,7 @@ impl Bot {
|
||||||
|
|
||||||
match self.pin(remove_local_pin).await {
|
match self.pin(remove_local_pin).await {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => println!("Error Unpinning Post: {:#?}", e),
|
Err(e) => self.message_queue.push(format!("Error Unpinning Post: {:#?}", e)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -180,7 +183,7 @@ impl Bot {
|
||||||
|
|
||||||
match self.pin(pin_new_local).await {
|
match self.pin(pin_new_local).await {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => println!("Error Pinning Post: {:#?}", e),
|
Err(e) => self.message_queue.push(format!("Error Pinning Post: {:#?}", e)),
|
||||||
};
|
};
|
||||||
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -201,32 +204,32 @@ impl Bot {
|
||||||
|
|
||||||
#[warn(unused_results)]
|
#[warn(unused_results)]
|
||||||
pub(crate) async fn run_once(&mut self, prev_time: &mut NaiveDateTime) -> Result<(), Box<dyn Error>> {
|
pub(crate) async fn run_once(&mut self, prev_time: &mut NaiveDateTime) -> Result<(), Box<dyn Error>> {
|
||||||
println!("{:#<1$}", "", 30);
|
self.message_queue.push(format!("{:#<1$}", "", 30));
|
||||||
self.start_time = Utc::now().naive_local();
|
self.start_time = Utc::now().naive_local();
|
||||||
|
|
||||||
if self.start_time - *prev_time > chrono::Duration::seconds(6) {
|
if self.start_time - *prev_time > chrono::Duration::seconds(6) {
|
||||||
// Prod should use hours, add command line switch later and read duration from config
|
// Prod should use hours, add command line switch later and read duration from config
|
||||||
println!("Reloading Config");
|
self.message_queue.push(format!("Reloading Config"));
|
||||||
*prev_time = self.start_time;
|
*prev_time = self.start_time;
|
||||||
self.config.load();
|
self.config.load();
|
||||||
self.community_ids.load(&self.auth, &self.config.instance).await?;
|
self.community_ids.load(&self.auth, &self.config.instance).await?;
|
||||||
println!("Done!");
|
self.message_queue.push(format!("Done!"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the polling process
|
// Start the polling process
|
||||||
// Get all feed URLs (use cache)
|
// Get all feed URLs (use cache)
|
||||||
println!("Checking Feeds");
|
self.message_queue.push(format!("Checking Feeds"));
|
||||||
let post_queue: Vec<(CreatePost, (Option<usize>, usize, String))> = self
|
let post_queue: Vec<(CreatePost, (Option<usize>, usize, String))> = self
|
||||||
.config
|
.config
|
||||||
.check_feeds(&mut self.post_history, &self.community_ids, &self.auth).await?;
|
.check_feeds(&mut self.post_history, &self.community_ids, &self.auth).await?;
|
||||||
println!("Done!");
|
self.message_queue.push(format!("Done!"));
|
||||||
|
|
||||||
|
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < post_queue.len() {
|
while i < post_queue.len() {
|
||||||
let (post, (prev_idx, feed_id, feed_title)) = &post_queue[i];
|
let (post, (prev_idx, feed_id, feed_title)) = &post_queue[i];
|
||||||
|
|
||||||
println!("Posting: {}", post.name);
|
self.message_queue.push(format!("Posting: {}", post.name));
|
||||||
|
|
||||||
let post_data = self.post(post.clone()).await?;
|
let post_data = self.post(post.clone()).await?;
|
||||||
|
|
||||||
|
@ -256,21 +259,21 @@ impl Bot {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) async fn idle(&self) {
|
pub(crate) async fn idle(&mut self) {
|
||||||
let mut sleep_duration = chrono::Duration::seconds(30);
|
let mut sleep_duration = chrono::Duration::seconds(30);
|
||||||
if Utc::now().naive_local() - self.start_time > sleep_duration {
|
if Utc::now().naive_local() - self.start_time > sleep_duration {
|
||||||
sleep_duration = chrono::Duration::seconds(60);
|
sleep_duration = chrono::Duration::seconds(60);
|
||||||
}
|
}
|
||||||
|
|
||||||
while Utc::now().naive_local() - self.start_time < sleep_duration {
|
while Utc::now().naive_local() - self.start_time < sleep_duration {
|
||||||
sleep(time::Duration::from_secs(1));
|
sleep(time::Duration::from_millis(100)).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
match reqwest::get(
|
match reqwest::get(
|
||||||
"https://status.neshweb.net/api/push/7s1CjPPzrV?status=up&msg=OK&ping=",
|
"https://status.neshweb.net/api/push/7s1CjPPzrV?status=up&msg=OK&ping=",
|
||||||
).await {
|
).await {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(err) => println!("{}", err),
|
Err(err) => self.message_queue.push(format!("{}", err)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,7 +315,7 @@ async fn run_bot(bot: Arc<Mutex<Bot>>) {
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
this.idle().await;
|
this.idle().await;
|
||||||
println!("Debug A"); // DEBUG
|
this.message_queue = vec![];
|
||||||
match this.run_once(&mut old).await {
|
match this.run_once(&mut old).await {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => panic!("Crashed due to Error: {:#?}", e),
|
Err(e) => panic!("Crashed due to Error: {:#?}", e),
|
||||||
|
@ -326,7 +329,7 @@ async fn run_bot(bot: Arc<Mutex<Bot>>) {
|
||||||
async fn print_info(shutdown: Arc<AtomicBool>, bot: Arc<Mutex<Bot>>) {
|
async fn print_info(shutdown: Arc<AtomicBool>, bot: Arc<Mutex<Bot>>) {
|
||||||
while !shutdown.load(Ordering::Relaxed) {
|
while !shutdown.load(Ordering::Relaxed) {
|
||||||
let bot: tokio::sync::MutexGuard<'_, Bot> = bot.lock().await;
|
let bot: tokio::sync::MutexGuard<'_, Bot> = bot.lock().await;
|
||||||
thread::sleep(Duration::from_millis(500));
|
sleep(Duration::from_millis(500)).await;
|
||||||
|
|
||||||
print!("\x1B[2J\x1B[1;1H");
|
print!("\x1B[2J\x1B[1;1H");
|
||||||
println!(
|
println!(
|
||||||
|
@ -341,6 +344,9 @@ async fn print_info(shutdown: Arc<AtomicBool>, bot: Arc<Mutex<Bot>>) {
|
||||||
print!("{} ", post.title);
|
print!("{} ", post.title);
|
||||||
print!("{:<1$}| ", "", 60 - post.title.len());
|
print!("{:<1$}| ", "", 60 - post.title.len());
|
||||||
println!("{}", post.last_post_url);
|
println!("{}", post.last_post_url);
|
||||||
|
});
|
||||||
|
bot.message_queue.iter().for_each(|message| {
|
||||||
|
println!("{}", message);
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -367,7 +373,7 @@ async fn main() {
|
||||||
|
|
||||||
println!("Bot crashed due to unknown Error, restarting thread after wait...");
|
println!("Bot crashed due to unknown Error, restarting thread after wait...");
|
||||||
|
|
||||||
sleep(Duration::from_secs(30));
|
sleep(Duration::from_secs(30)).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue