summaryrefslogtreecommitdiffstats
path: root/calendar/src/main.rs
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-04-12 14:25:56 +0200
committerLeonard Kugis <leonard@kug.is>2025-04-12 14:25:56 +0200
commitb0297b96b52042ed390092faa22b26ef516a259a (patch)
tree00b2f2ebd417218bce05a391091934c3a29ffebe /calendar/src/main.rs
parentbfc6151397b6a3d240687e6faba06175f5504770 (diff)
downloadscripts-b0297b96b52042ed390092faa22b26ef516a259a.tar.gz
calendar: Using config file
Diffstat (limited to 'calendar/src/main.rs')
-rw-r--r--calendar/src/main.rs31
1 files changed, 19 insertions, 12 deletions
diff --git a/calendar/src/main.rs b/calendar/src/main.rs
index 2b59c12..ea6fc6f 100644
--- a/calendar/src/main.rs
+++ b/calendar/src/main.rs
@@ -1,16 +1,21 @@
-use std::{fs, io::Write};
+use std::{fs, io::Write, path::PathBuf};
+use clap::Parser;
use serde::Deserialize;
use regex::Regex;
use tempfile::tempdir;
use reqwest::blocking::Client;
-#[derive(Deserialize)]
-struct Config {
- calendar: CalendarConfig,
+/// ICS zu CalDAV Uploader
+#[derive(Parser, Debug)]
+#[command(author, version, about, long_about = None)]
+struct Args {
+ /// Pfad zur Konfigurationsdatei (config.json)
+ #[arg(short, long, value_name = "FILE")]
+ config: PathBuf,
}
#[derive(Deserialize)]
-struct CalendarConfig {
+struct Config {
caldav_base_url: String,
caldav_username: String,
caldav_password: String,
@@ -24,15 +29,17 @@ struct CalendarEntry {
}
fn main() -> anyhow::Result<()> {
- let base_dir = "/home/leonard/Projects/scripts";
- let config_path = format!("{}/config.json", base_dir);
- let config_data = fs::read_to_string(&config_path)?;
+ let args = Args::parse();
+
+ let config_data = fs::read_to_string(&args.config)?;
let config: Config = serde_json::from_str(&config_data)?;
let tmp_dir = tempdir()?;
- let client = Client::new();
+ let client = Client::builder()
+ .timeout(std::time::Duration::from_secs(60))
+ .build()?;
- for cal in &config.calendar.calendars {
+ for cal in &config.calendars {
println!("INFO: Lade ICS von: {}", cal.ics);
let ics_path = tmp_dir.path().join(format!("{}.ics", cal.name));
let response = client.get(&cal.ics).send()?;
@@ -43,7 +50,7 @@ fn main() -> anyhow::Result<()> {
let ics_content = response.text()?;
fs::write(&ics_path, &ics_content)?;
- let caldav_url = format!("{}/{}", config.calendar.caldav_base_url.trim_end_matches('/'), cal.name);
+ let caldav_url = format!("{}/{}", config.caldav_base_url.trim_end_matches('/'), cal.name);
println!("INFO: Zerlege Datei: {:?}", ics_path);
let vevent_blocks = split_vevents(&ics_content);
@@ -65,7 +72,7 @@ fn main() -> anyhow::Result<()> {
let body = fs::read(&event_path)?;
let put_response = client
.put(&put_url)
- .basic_auth(&config.calendar.caldav_username, Some(&config.calendar.caldav_password))
+ .basic_auth(&config.caldav_username, Some(&config.caldav_password))
.header("Content-Type", "text/calendar; charset=utf-8")
.body(body)
.send()?;