From 0001567b5537e8868ff6d9ee7bc52c7c2cf480c4 Mon Sep 17 00:00:00 2001 From: Alie Date: Fri, 26 Jan 2024 17:43:46 +0100 Subject: [PATCH] Refactor code and moved functionality to a funtion --- src/main.rs | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/src/main.rs b/src/main.rs index 759c032..35015c9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ use async_std; -use log; +use log::{self, info}; use mastodon_async::entities::visibility::Visibility; use mastodon_async::helpers::{cli, toml as masto_toml}; use mastodon_async::prelude::*; @@ -71,13 +71,10 @@ async fn main() -> DynResult<()> { if retry >= config.errors.retry { log::error!("Max ammount of retries reached on post_image"); log::info!("Reverting file changes"); - while let Err(err) = pop_last_line_of_file(&config.files.posted) { - log::warn!("Failed to revert, retrying: {}", err); - async_std::task::sleep(Duration::new(1, 0)).await; - } exit(1); } } + set_url_as_posted(&config, &url)?; let mut retry: u8 = 0; while let Err(err) = update_bio(&mastodon, &config).await { log::warn!("Cannot update bio, retry: {}, {}", retry, err); @@ -161,15 +158,6 @@ fn parse_config(filename: &str) -> DynResult { Ok(toml::from_str(&toml_file)?) //("Malformed config file, check the original one for reference") } -fn pop_last_line_of_file(filename: &str) -> DynResult<()> { - let binding = std::fs::read_to_string(filename)?; - let mut posted: Vec<_> = binding.lines().collect(); - posted.pop(); - std::fs::write(filename, posted.concat())?; - log::info!("Success reverting changes"); - Ok(()) -} - fn get_next_url(config: &Config) -> DynResult> { let binding = std::fs::read_to_string(&config.files.posted)?; //.expect("Posted file not found"); let posted = binding.lines().collect::>(); @@ -179,15 +167,20 @@ fn get_next_url(config: &Config) -> DynResult> { if urls.is_empty() { Ok(None) } else { - let mut file = std::fs::OpenOptions::new() - .write(true) - .append(true) // This is needed to append to file - .open(&config.files.posted)?; //.expect("Cannot open posted file"); // Maybe we should retry just in case - write!(file, "{}\n", urls[0])?; //.expect("Cannot write to posted file"); // maybe we should retry tbh Ok(Some(urls[0].to_string().clone())) } } +fn set_url_as_posted(config: &Config, url: &String) -> DynResult<()> { + let mut file = std::fs::OpenOptions::new() + .write(true) + .append(true) // This is needed to append to file + .open(&config.files.posted)?; //.expect("Cannot open posted file"); // Maybe we should retry just in case + write!(file, "{}\n", url)?; //.expect("Cannot write to posted file"); // maybe we should retry tbh + info!("Set url {} as posted", url); + Ok(()) +} + async fn post_image( account: &Mastodon, url: &String, @@ -328,17 +321,15 @@ mod tests { let response = account.get_status(&status.id).await.unwrap(); - account.delete_status(&status.id).await.unwrap(); - let attachment = &response.media_attachments[0]; + let attachment = &response.media_attachments[0]; - - let response = client - .get(attachment.url.clone().unwrap()) - .bearer_auth(dbg!(&account.data.token)) - .send() - .await - .unwrap(); + let response = client + .get(attachment.url.clone().unwrap()) + .bearer_auth(dbg!(&account.data.token)) + .send() + .await + .unwrap(); assert_eq!(response.status(), StatusCode::OK) }