summaryrefslogtreecommitdiffstats
path: root/calendar
diff options
context:
space:
mode:
Diffstat (limited to 'calendar')
-rw-r--r--calendar/Cargo.toml5
-rw-r--r--calendar/src/main.rs31
2 files changed, 22 insertions, 14 deletions
diff --git a/calendar/Cargo.toml b/calendar/Cargo.toml
index 1ab2d69..f7e3c8e 100644
--- a/calendar/Cargo.toml
+++ b/calendar/Cargo.toml
@@ -4,9 +4,10 @@ version = "0.1.0"
edition = "2021"
[dependencies]
+clap = { version = "4.4", features = ["derive"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
-reqwest = { version = "0.11", features = ["blocking", "json"] }
regex = "1.10"
tempfile = "3.8"
-anyhow = "1.0" \ No newline at end of file
+reqwest = { version = "0.11", features = ["blocking", "json"] }
+anyhow = "1.0"
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()?;