added new pad generator
This commit is contained in:
parent
e2bd4780a2
commit
7e91eae81b
|
@ -17,6 +17,7 @@ lettre = "0.11.7"
|
|||
rand = "0.9.0-alpha.1"
|
||||
rusqlite = "0.31.0"
|
||||
uuid = { version = "1.10.0", features = ["v4"] }
|
||||
log = "0.4.22"
|
||||
#mail-core = "0.6.2"
|
||||
#mail-headers = "0.6.6"
|
||||
#mail-internals = "0.2.3"
|
||||
|
|
59
src/create_new_pads.rs
Normal file
59
src/create_new_pads.rs
Normal file
|
@ -0,0 +1,59 @@
|
|||
use reqwest::Client;
|
||||
use std::error::Error;
|
||||
|
||||
pub async fn create_pad(client: &Client, hedgedoc_url: &str) -> Result<String, Box<dyn Error>> {
|
||||
let res = client.get(format!("{}/new", hedgedoc_url)).send().await?;
|
||||
|
||||
if res.status().is_success() {
|
||||
let pad_url = res.url().to_string();
|
||||
Ok(pad_url)
|
||||
} else {
|
||||
Err(format!("Failed to create pad: {} - {}", res.status(), res.text().await?).into())
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn import_note(client: &Client, content: String, note_id: Option<&str>, hedgedoc_url: &str) -> Result<String, Box<dyn Error>> {
|
||||
let post_url = match note_id {
|
||||
Some(id) => format!("{}/new/{}", hedgedoc_url, id),
|
||||
None => format!("{}/new", hedgedoc_url),
|
||||
};
|
||||
|
||||
let content_parsed: String = content.clone().to_string();
|
||||
|
||||
println!("Content Parsed:");
|
||||
println!("{}", content_parsed);
|
||||
let res = client.post(&post_url)
|
||||
.header("Content-Type", "text/markdown")
|
||||
.body(content_parsed)
|
||||
.send()
|
||||
.await?;
|
||||
|
||||
if res.status().is_success() {
|
||||
let final_url = res.url().to_string();
|
||||
Ok(final_url)
|
||||
} else {
|
||||
Err(format!("Failed to import note: {} - {}", res.status(), res.text().await?).into())
|
||||
}
|
||||
}
|
||||
/*
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn Error>> {
|
||||
let client = Client::new();
|
||||
|
||||
match create_pad(&client).await {
|
||||
Ok(pad_url) => {
|
||||
println!("Pad created successfully at URL: {}", pad_url);
|
||||
|
||||
let pad_id = pad_url.trim_start_matches(&format!("{}/", HEDGEDOC_URL));
|
||||
match import_note(&client, TEMPLATE_CONTENT, Some(pad_id)).await {
|
||||
Ok(_) => println!("Pad updated successfully with template content."),
|
||||
Err(e) => println!("Failed to update pad: {}", e),
|
||||
}
|
||||
}
|
||||
Err(e) => println!("Failed to create pad: {}", e),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
*/
|
70
src/main.rs
70
src/main.rs
|
@ -19,25 +19,34 @@ Pad-ins-Wiki-und-versenden-Skript
|
|||
• Neue Wiki-Seite erstellen und dort das umgewandelte Pad hochladen
|
||||
*/
|
||||
|
||||
// Import other .rs files as modules
|
||||
mod key_value;
|
||||
use key_value::KeyValueStore as KV;
|
||||
|
||||
mod create_new_pads;
|
||||
pub mod variables_and_settings;
|
||||
|
||||
use chrono::{Datelike, Local, NaiveDate, Weekday};
|
||||
use regex::{Regex};
|
||||
use uuid::Uuid;
|
||||
use std::process::Command;
|
||||
use headers::ContentType;
|
||||
use reqwest::Client;
|
||||
use std::error::Error;
|
||||
use std::future::Future;
|
||||
|
||||
// use std::process::Command;
|
||||
// use headers::ContentType;
|
||||
|
||||
// MAIL START
|
||||
use lettre::{Message, SmtpTransport, Transport};
|
||||
use lettre::message::{header, SinglePart};
|
||||
use lettre::message::header::MessageId;
|
||||
use lettre::transport::smtp::authentication::Credentials;
|
||||
use log::error;
|
||||
// MAIL END
|
||||
|
||||
use rand::{Rng, thread_rng};
|
||||
use rand::distributions::Alphanumeric;
|
||||
const HEDGEDOC_SERVER_URL: &str = variables_and_settings::HEDGEDOC_SERVER_URL;
|
||||
const PLENUM_TEMPLATE_URL: &str = variables_and_settings::PLENUM_TEMPLATE_URL;
|
||||
const FALLBACK_TEMPLATE: &str = variables_and_settings::FALLBACK_TEMPLATE;
|
||||
|
||||
|
||||
fn kv_defaults (kv: KV) {
|
||||
kv.default("template-url", "https://md.berlin.ccc.de/plenum-template");
|
||||
|
@ -70,15 +79,15 @@ async fn main() {
|
|||
|
||||
// Nächste Plena nachschauen:
|
||||
|
||||
let nächster_plenumtermin = if all_tuesdays[1].unwrap() >= today_simple.pred_opt().unwrap() { // Für das Pad rumschicken am nächsten Tag wird das Datum einen Tag nach Hinten gesetzt,
|
||||
&zweiter_dienstag
|
||||
let nächster_plenumtermin: String = if all_tuesdays[1].unwrap() >= today_simple.pred_opt().unwrap() { // Für das Pad rumschicken am nächsten Tag wird das Datum einen Tag nach Hinten gesetzt,
|
||||
zweiter_dienstag.clone()
|
||||
} else {
|
||||
&vierter_dienstag
|
||||
vierter_dienstag.clone()
|
||||
};
|
||||
let übernächster_plenumtermin = if all_tuesdays[1].unwrap() >= today_simple.pred_opt().unwrap() { // hier das Gleiche.
|
||||
&vierter_dienstag
|
||||
vierter_dienstag.clone()
|
||||
} else {
|
||||
&zweiter_dienstag_nächster_monat
|
||||
zweiter_dienstag_nächster_monat.clone()
|
||||
};
|
||||
// Der Code muss nur für vor dem 2. und vor dem 4. Dienstag gebaut werden, weil im nächsten Monat der Code frühestens 7 Tage vor dem Plenum wieder passt.
|
||||
|
||||
|
@ -123,8 +132,7 @@ async fn main() {
|
|||
println!("message id: {}", message_id)
|
||||
}
|
||||
// END ANKÜNDIGUNGSSCRIPT
|
||||
let datum = String::from("15.10.24");
|
||||
generate_new_pad_for_following_date(datum);
|
||||
generate_new_pad_for_following_date(nächster_plenumtermin, übernächster_plenumtermin).await.expect("Fehler! Plenumspad konnte nicht generiert werden!");
|
||||
|
||||
|
||||
}
|
||||
|
@ -217,12 +225,36 @@ fn mail_versenden(inhalt: String, betreff: String) -> std::result::Result<String
|
|||
Ok(message_id)
|
||||
}
|
||||
|
||||
fn generate_new_pad_for_following_date(datum: String) {
|
||||
let rand_string: String = thread_rng()
|
||||
.sample_iter(&Alphanumeric)
|
||||
.take(22)
|
||||
.map(char::from)
|
||||
.collect();
|
||||
async fn generate_new_pad_for_following_date(nächster_plenumtermin: String, übernächster_plenumtermin: String) -> Result<(), Box<dyn Error>> {
|
||||
let client = Client::new();
|
||||
|
||||
println!("{}", rand_string)
|
||||
match create_new_pads::create_pad(&client, HEDGEDOC_SERVER_URL).await {
|
||||
Ok(pad_url) => {
|
||||
println!("Pad created successfully at URL: {}", pad_url);
|
||||
|
||||
// Get the most recent plenum template and replace the placeholders:
|
||||
let template_from_pad = download_and_return_pad(PLENUM_TEMPLATE_URL.to_string()).await; // Download Pad
|
||||
let template_content: String = template_from_pad.unwrap_or_else(|error| FALLBACK_TEMPLATE.to_string()); // If Download wasn't successful, use offline Template
|
||||
let template_modified: String = replace_placeholders(&template_content, nächster_plenumtermin, übernächster_plenumtermin).unwrap_or_else(|error |template_content); // Try regex, if not successful use without regex
|
||||
|
||||
let pad_id: &str = pad_url.trim_start_matches(&format!("{}/", HEDGEDOC_SERVER_URL));
|
||||
match create_new_pads::import_note(&client, template_modified, Some(pad_id), HEDGEDOC_SERVER_URL).await {
|
||||
Ok(_) => println!("Pad updated successfully with template content."),
|
||||
Err(e) => println!("Failed to update pad: {}", e),
|
||||
}
|
||||
}
|
||||
Err(e) => println!("Failed to create pad: {}", e),
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn replace_placeholders(template: &str, nächster_plenumtermin: String, übernächster_plenumtermin: String) -> Result<String, Box<dyn Error>> {
|
||||
let re_datum = Regex::new(r"\{\{Datum\}\}")?;
|
||||
let re_naechstes_plenum = Regex::new(r"\{\{naechstes-plenum\}\}")?;
|
||||
|
||||
let result = re_datum.replace_all(template, nächster_plenumtermin);
|
||||
let result = re_naechstes_plenum.replace_all(&result, übernächster_plenumtermin);
|
||||
|
||||
Ok(result.to_string())
|
||||
}
|
17
src/variables_and_settings.rs
Normal file
17
src/variables_and_settings.rs
Normal file
|
@ -0,0 +1,17 @@
|
|||
pub const FALLBACK_TEMPLATE: &str = r#"
|
||||
# Welcome to HedgeDoc
|
||||
|
||||
This is a template pad.
|
||||
|
||||
## Section 1
|
||||
|
||||
- Item 1
|
||||
- Item 2
|
||||
|
||||
## Section 2
|
||||
|
||||
Add more content here...
|
||||
"#;
|
||||
|
||||
pub const PLENUM_TEMPLATE_URL: &str = "https://md.berlin.ccc.de/plenum-template/download";
|
||||
pub const HEDGEDOC_SERVER_URL: &str = "https://md.berlin.ccc.de";
|
Loading…
Reference in a new issue