proper error handling for mediawiki edits

This commit is contained in:
murmeldin 2024-12-12 14:06:09 +01:00
parent 7023e9445f
commit 81d7282e8a

View file

@ -1,5 +1,6 @@
use std::cell::OnceCell;
use std::error::Error;
use std::f64::consts::E;
use chrono::{Datelike, NaiveDate, Utc};
use colored::Colorize;
@ -75,13 +76,13 @@ impl std::fmt::Debug for Mediawiki {
pub enum ValidRequestTypes {
Get,
Post,
PostForEditing
PostForEditing,
}
pub enum ValidPageEdits {
WithPotentiallyOverriding,
WithoutOverriding,
ModifyPlenumPageAfterwards_WithoutOverriding
ModifyPlenumPageAfterwards_WithoutOverriding,
}
impl Mediawiki {
@ -223,7 +224,6 @@ impl Mediawiki {
resp
}
/// Creates a completely new wiki page with page_content and page_title as inputs
pub fn new_wiki_page(
&self, page_title: &str, page_content: &str, update_main_page: ValidPageEdits,
@ -253,9 +253,9 @@ impl Mediawiki {
("title", page_title),
("text", page_content),
("token", self.csrf_token.get().unwrap()),
("bot", "true")
("bot", "true"),
])
}
},
ValidPageEdits::ModifyPlenumPageAfterwards_WithoutOverriding => {
// This means we *CREATE* a *new Page* and always prevent overwriting
Box::from([
@ -267,7 +267,7 @@ impl Mediawiki {
("createonly", "true"), // Prevent overwriting existing pages
("bot", "true"),
])
}
},
ValidPageEdits::WithoutOverriding => {
// This means we *CREATE* a *new Page* and always prevent overwriting
Box::from([
@ -279,7 +279,7 @@ impl Mediawiki {
("createonly", "true"), // Prevent overwriting existing pages
("bot", "true"),
])
}
},
};
verboseln!("Current page title: {page_title}");
@ -294,11 +294,19 @@ impl Mediawiki {
let response_result = serde_json::from_str::<serde_json::Value>(&request_result);
let response = response_result.unwrap_or_else(|e| {
print!("Error while creating new wiki page:\n{}", e.to_string().cyan());
return serde_json::from_str("\"(error)\"").unwrap()
return serde_json::from_str("\"(error)\"").unwrap();
});
verboseln!("pos2");
// Check if the page creation was successful
if let Some(edit) = response.get("edit") {
if let Some(error) = response.get("error") {
if let Some(info) = error.get("info") {
if info == "The page you tried to create has been created already." {
verboseln!("The page you tried to create has been created already. Continuing...")
} else {
println!("There was an error while editing the wiki: {}", info.to_string().yellow())
}
}
} else if let Some(edit) = response.get("edit") {
verboseln!("pos3");
if edit.get("result").and_then(|r| r.as_str()) == Some("Success") {
verboseln!("Successfully created wiki page: {}", page_title);
@ -318,9 +326,9 @@ impl Mediawiki {
verboseln!("updating main page...");
self.update_plenum_page(page_title)?
},
_ => ()
_ => (),
};
return Ok(page_title.to_string())
return Ok(page_title.to_string());
}
/// This function is responsible for updating the main plenum page:
@ -339,7 +347,6 @@ impl Mediawiki {
// check first if the script has been run before and if the link already exists
if !page_content.contains(&new_page_title_to_link_to) {
// check if the current year heading pattern exists
if !page_content.contains(&year_heading_pattern) {
// If not, add a new year heading pattern
@ -375,7 +382,11 @@ impl Mediawiki {
verboseln!("{}", "The bot appears to have been run before and a duplicate link to the new plenum pad was avoided.".yellow())
}
// refresh page
self.new_wiki_page(&self.plenum_main_page_name, &page_content, ValidPageEdits::WithPotentiallyOverriding)?;
self.new_wiki_page(
&self.plenum_main_page_name,
&page_content,
ValidPageEdits::WithPotentiallyOverriding,
)?;
Ok(())
}
/// This function downloads and returns the contents of a wiki page when given the page's title (e.g. `page_title = Plenum/13._August_2024`)
@ -512,7 +523,11 @@ pub fn pad_ins_wiki(
let page_title = create_page_title(date);
let full_page_title = format!("{}/{}", wiki.plenum_main_page_name, page_title);
wiki.new_wiki_page(&full_page_title, &pad_converted, ValidPageEdits::ModifyPlenumPageAfterwards_WithoutOverriding)?;
wiki.new_wiki_page(
&full_page_title,
&pad_converted,
ValidPageEdits::ModifyPlenumPageAfterwards_WithoutOverriding,
)?;
verboseln!("Finished successfully with wiki");
Ok(())