first prototype
This commit is contained in:
parent
9c528e8e68
commit
36f6033320
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
/target
|
/target
|
||||||
.envrc
|
.envrc
|
||||||
|
.direnv
|
||||||
|
1368
Cargo.lock
generated
Normal file
1368
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -3,4 +3,13 @@ name = "vikunja-gatherer"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[lints.clippy]
|
||||||
|
pedantic = "warn"
|
||||||
|
nursery = "warn"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
chrono = "0.4.38"
|
||||||
|
markdown = "0.3.0"
|
||||||
|
regex = "1.11.0"
|
||||||
|
reqwest = { version = "0.12.8", features = ["blocking", "json"] }
|
||||||
|
serde = { version = "1.0.210", features = ["derive"] }
|
||||||
|
@ -24,7 +24,10 @@
|
|||||||
{
|
{
|
||||||
devShells.default = mkShell {
|
devShells.default = mkShell {
|
||||||
# 👇 we can just use `rustToolchain` here:
|
# 👇 we can just use `rustToolchain` here:
|
||||||
buildInputs = [ rustToolchain ];
|
buildInputs = [
|
||||||
|
rustToolchain
|
||||||
|
openssl
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
82
src/main.rs
82
src/main.rs
@ -1,3 +1,81 @@
|
|||||||
fn main() {
|
use std::{env, fs};
|
||||||
println!("Hello, world!");
|
|
||||||
|
use chrono::{Datelike, Utc};
|
||||||
|
use regex::Regex;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||||
|
struct Task {
|
||||||
|
title: String,
|
||||||
|
created: String,
|
||||||
|
description: String,
|
||||||
|
done: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let client = reqwest::blocking::Client::new();
|
||||||
|
// get all tasks
|
||||||
|
let response = client
|
||||||
|
.get("https://vikunja.luhbots-hannover.de/api/v1/tasks/all")
|
||||||
|
.header(
|
||||||
|
reqwest::header::AUTHORIZATION,
|
||||||
|
format!("Bearer {}", env::var("VIKUNJA_TOKEN").unwrap()),
|
||||||
|
)
|
||||||
|
.query(&[
|
||||||
|
// search for tasks containing "Teamtreffen"
|
||||||
|
("s", "Teamtreffen"),
|
||||||
|
// sort by creation data
|
||||||
|
("sort_by", "created"),
|
||||||
|
// sort in descending order (newest first)
|
||||||
|
("order_by", "desc"),
|
||||||
|
])
|
||||||
|
.send()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
// get the task for today from the returned tasks
|
||||||
|
let now = Utc::now();
|
||||||
|
let current_card_title = format!(
|
||||||
|
"Teamtreffen {:02}.{:02}.{}",
|
||||||
|
now.day() - 1,
|
||||||
|
now.month(),
|
||||||
|
now.year()
|
||||||
|
);
|
||||||
|
println!("searching for task with title {current_card_title:?}");
|
||||||
|
let task = response
|
||||||
|
.json::<Vec<Task>>()
|
||||||
|
.unwrap()
|
||||||
|
.into_iter()
|
||||||
|
.find(|task| task.title == current_card_title)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let re = Regex::new("<p>([^<]+)</p>").unwrap();
|
||||||
|
let points = re
|
||||||
|
.captures_iter(&task.description)
|
||||||
|
.map(|c| c.extract::<1>().1[0])
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let template = fs::read_to_string("../vorlage.md").unwrap();
|
||||||
|
|
||||||
|
let mut template = template.replace(
|
||||||
|
"dd.mm.yyyy",
|
||||||
|
format!("{:02}.{:02}.{}", now.day(), now.month(), now.year()).as_str(),
|
||||||
|
);
|
||||||
|
|
||||||
|
template.extend(
|
||||||
|
points
|
||||||
|
.iter()
|
||||||
|
.filter(|point| **point != "Rasender Report" && **point != "Was ging die Woche?")
|
||||||
|
.map(|point| format!("\n# {point}\n")),
|
||||||
|
);
|
||||||
|
|
||||||
|
fs::write(
|
||||||
|
format!(
|
||||||
|
"{:02}.{:02}.{:02}.md",
|
||||||
|
now.year() % 100,
|
||||||
|
now.month(),
|
||||||
|
now.day()
|
||||||
|
),
|
||||||
|
template,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user