improve dates & borrowing strings
This commit is contained in:
		
							parent
							
								
									45f5eeee57
								
							
						
					
					
						commit
						de57e2c316
					
				
					 2 changed files with 42 additions and 47 deletions
				
			
		|  | @ -102,7 +102,7 @@ pub fn interactive_check(config: KV) -> Result<(), Box<dyn Error>> { | |||
|                     if !todo.is_empty() { all_valid = false; } | ||||
|                     break; | ||||
|                 }, | ||||
|                 _ => { return Err("Wat.".into()); }, // shouldn't be able to happen (prompt already checks)
 | ||||
|                 _ => { unreachable!(); }, // (prompt already checks)
 | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  |  | |||
							
								
								
									
										87
									
								
								src/main.rs
									
										
									
									
									
								
							
							
						
						
									
										87
									
								
								src/main.rs
									
										
									
									
									
								
							|  | @ -36,7 +36,7 @@ use std::io::prelude::*; | |||
| use std::fs::File; | ||||
| // use std::future::Future;
 | ||||
| 
 | ||||
| use chrono::{Datelike, Local, NaiveDate, Weekday}; | ||||
| use chrono::{Datelike, Local, Months, NaiveDate, Weekday}; | ||||
| use clap::{Arg, Command}; | ||||
| use regex::Regex; | ||||
| use reqwest::Client; | ||||
|  | @ -113,43 +113,42 @@ async fn main() -> Result<(), Box<dyn Error>> { | |||
|     // config
 | ||||
|     let hedgedoc_server = &config["hedgedoc-server-url"]; | ||||
|     println!("[START]\nAktueller Zustand der DB:"); | ||||
|     config.dump_redacting(&["email-pass","matrix-pass"]).ok(); | ||||
|     config.dump_redacting(&["email-password","wiki-password","matrix-password"]).ok(); | ||||
| 
 | ||||
|     // Dienstage diesen Monat
 | ||||
|     let all_tuesdays: Vec<Option<NaiveDate>> = get_tuesdays(0); | ||||
|     let zweiter_dienstag: String = all_tuesdays[1].unwrap().to_string(); // z.B. 2024-07-09
 | ||||
|     let vierter_dienstag: String = all_tuesdays[3].unwrap().to_string(); // z.B. 2024-07-23
 | ||||
|     let all_tuesdays: Vec<NaiveDate> = get_tuesdays(0); | ||||
|     let zweiter_dienstag: String = all_tuesdays[1].to_string(); // z.B. 2024-07-09
 | ||||
|     let vierter_dienstag: String = all_tuesdays[3].to_string(); // z.B. 2024-07-23
 | ||||
| 
 | ||||
|     //Dienstage des nächsten Monats definieren
 | ||||
|     let all_tuesdays_next_month: Vec<Option<NaiveDate>> = get_tuesdays(1); | ||||
|     let zweiter_dienstag_nächster_monat: String = all_tuesdays_next_month[1].unwrap().to_string(); | ||||
|     let vierter_dienstag_nächster_monat: String = all_tuesdays_next_month[3].unwrap().to_string(); | ||||
|     let all_tuesdays_next_month: Vec<NaiveDate> = get_tuesdays(1); | ||||
|     let zweiter_dienstag_nächster_monat: String = all_tuesdays_next_month[1].to_string(); | ||||
|     let vierter_dienstag_nächster_monat: String = all_tuesdays_next_month[3].to_string(); | ||||
| 
 | ||||
|     // Daten, die später benutzt werden, definieren
 | ||||
|     let today= Local::now(); | ||||
|     let today_simple = NaiveDate::from_ymd_opt(today.year(), today.month(), today.day()).unwrap(); | ||||
|     let in_1_day: NaiveDate = NaiveDate::from_ymd_opt(today.year(), today.month(), today.day()).unwrap().succ_opt().unwrap(); | ||||
|     let in_2_days: NaiveDate = in_1_day.succ_opt().unwrap(); | ||||
|     let in_3_days: NaiveDate = in_2_days.succ_opt().unwrap(); | ||||
|     let yesterday: NaiveDate = NaiveDate::from_ymd_opt(today.year(), today.month(), today.day()).unwrap().pred_opt().unwrap(); | ||||
| 
 | ||||
|     let today_simple = today.date_naive(); | ||||
|     let yesterday = today_simple.pred_opt().unwrap(); | ||||
|     let in_1_day = today_simple.succ_opt().unwrap(); | ||||
|     let in_2_days = in_1_day.succ_opt().unwrap(); | ||||
|     let in_3_days = in_2_days.succ_opt().unwrap(); | ||||
| 
 | ||||
|     // Nächste Plena nachschauen:
 | ||||
| 
 | ||||
|     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() | ||||
|     let nächster_plenumtermin: &String = if all_tuesdays[1] >= yesterday { // Für das Pad rumschicken am nächsten Tag wird das Datum einen Tag nach Hinten gesetzt,
 | ||||
|         &zweiter_dienstag | ||||
|         } else { | ||||
|         vierter_dienstag.clone() | ||||
|         &vierter_dienstag | ||||
|     }; | ||||
|     let übernächster_plenumtermin = if all_tuesdays[1].unwrap() >= today_simple.pred_opt().unwrap() { // hier das Gleiche.
 | ||||
|         vierter_dienstag.clone() | ||||
|     let übernächster_plenumtermin = if all_tuesdays[1] >= yesterday { // hier das Gleiche.
 | ||||
|         &vierter_dienstag | ||||
|     } else { | ||||
|         zweiter_dienstag_nächster_monat.clone() | ||||
|         &zweiter_dienstag_nächster_monat | ||||
|     }; | ||||
|     let überübernächster_plenumtermin = if all_tuesdays[1].unwrap() >= today_simple.pred_opt().unwrap() { // hier das Gleiche.
 | ||||
|         zweiter_dienstag_nächster_monat.clone() | ||||
|     let überübernächster_plenumtermin = if all_tuesdays[1] >= yesterday { // hier das Gleiche.
 | ||||
|         &zweiter_dienstag_nächster_monat | ||||
|     } else { | ||||
|         vierter_dienstag_nächster_monat | ||||
|         &vierter_dienstag_nächster_monat | ||||
|     }; | ||||
| 
 | ||||
| 
 | ||||
|  | @ -244,29 +243,25 @@ async fn download_and_return_pad(pad_link: String) -> Result<String, Box<dyn std | |||
|     Ok(pad_content) | ||||
| } | ||||
| 
 | ||||
| fn get_tuesdays(month_offset: u32) -> Vec<Option<NaiveDate>>{ | ||||
|     // Jeden Donnerstag im Monat finden:
 | ||||
|     let today = Local::now(); // jetzige Zeit abrufen (z.B. 2024-07-17 15:36:31.660997700 +02:00)
 | ||||
|     let current_month = today.month(); // diesen Monat als Zahl (z.B. 7)
 | ||||
|     let current_year = today.year(); // dieses Jahr als Zahl (z.B. 2024)
 | ||||
|     let first_day: Option<NaiveDate> = NaiveDate::from_ymd_opt(current_year, current_month+month_offset, 1); // Erster Tag des Monats (z.B. 2024-07-01)
 | ||||
|     let last_day: Option<NaiveDate> = NaiveDate::from_ymd_opt(current_year, current_month+1+month_offset, 1).unwrap().pred_opt(); //Letzter Tag des Monats(z.B. 2024-07-31)
 | ||||
|     // - Vektor mit allen Tagen im Monat erstellen
 | ||||
|     let mut days_in_month_vec: Vec<Option<NaiveDate>> = Vec::new(); | ||||
|     let mut all_tuesdays: Vec<Option<NaiveDate>> = Vec::new(); | ||||
|     let mut current_day: Option<NaiveDate> = first_day; | ||||
|     while current_day <= last_day { | ||||
|         days_in_month_vec.push(current_day); | ||||
|         current_day = current_day.unwrap().succ_opt() | ||||
|     } | ||||
|     // - Alle bis auf Donnerstage raus
 | ||||
|     for element in days_in_month_vec { | ||||
|         match element.unwrap().weekday() { | ||||
|             Weekday::Tue => all_tuesdays.push(element), | ||||
|             _ => {} // Kein Dienstag,
 | ||||
| fn get_tuesdays(month_offset: i32) -> Vec<NaiveDate>{ | ||||
|     let date = Local::now(); | ||||
|     let date = match month_offset.signum() { | ||||
|         0  => Some(date), | ||||
|         1  => date.checked_add_months(Months::new(month_offset as u32)), | ||||
|         -1 => date.checked_sub_months(Months::new((-month_offset) as u32)), | ||||
|         _  => unreachable!(), | ||||
|     }.expect("(very) invalid month offset"); | ||||
|     let year = date.year(); | ||||
|     let month = date.month(); | ||||
|     let mut current_date = NaiveDate::from_ymd_opt(year, month, 1); | ||||
|     let mut dates = Vec::new(); | ||||
|     while let Some(date) = current_date { | ||||
|         if date.month() == month && date.weekday() == Weekday::Tue { | ||||
|             dates.push(date); | ||||
|         } | ||||
|         current_date = date.succ_opt(); | ||||
|     } | ||||
|     all_tuesdays | ||||
|     dates | ||||
| } | ||||
| 
 | ||||
| fn check_if_plenum(infrage_kommendes_plenum: String, date_to_check: NaiveDate) -> bool { | ||||
|  | @ -329,7 +324,7 @@ fn mail_versenden(inhalt: String, betreff: String) -> std::result::Result<String | |||
|     Ok(message_id) | ||||
| } | ||||
| 
 | ||||
| async fn generate_new_pad_for_following_date(übernächster_plenumtermin: String, überübernächster_plenumtermin: String, kv: &KV) -> Result<(), Box<dyn Error>> { | ||||
| async fn generate_new_pad_for_following_date(übernächster_plenumtermin: &String, überübernächster_plenumtermin: &String, kv: &KV) -> Result<(), Box<dyn Error>> { | ||||
|     let client = Client::new(); | ||||
| 
 | ||||
|     match create_new_pads::create_pad(&client, HEDGEDOC_SERVER_URL).await { | ||||
|  | @ -355,7 +350,7 @@ async fn generate_new_pad_for_following_date(übernächster_plenumtermin: String | |||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| fn replace_placeholders(template: &str, übernächster_plenumtermin: String, überübernächster_plenumtermin: String) -> Result<String, Box<dyn Error>> { | ||||
| fn replace_placeholders(template: &str, übernächster_plenumtermin: &str, überübernächster_plenumtermin: &str) -> Result<String, Box<dyn Error>> { | ||||
|     let re_datum = Regex::new(r"\{\{Datum\}\}")?; | ||||
|     let result = re_datum.replace_all(template, übernächster_plenumtermin); | ||||
|     let re_naechstes_plenum = Regex::new(r"\{\{naechstes-plenum\}\}")?; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 nobody
						nobody