commit 6ecb5bd86d62f727dd1a3dbe473e2a47a76ac368 from: witcher date: Sun Mar 6 22:01:43 2022 UTC send_posts prototype commit - d85ed18bc6ad9e2739516ed24ab4c199372afe7c commit + 6ecb5bd86d62f727dd1a3dbe473e2a47a76ac368 blob - c8ac3cd8601f38e70158d4179be3b92664d9ca54 blob + a6192d027c537dc5e9101155d88e06da46dcca96 --- Cargo.lock +++ Cargo.lock @@ -796,6 +796,7 @@ dependencies = [ "dotenv", "reqwest", "rss", + "toml", ] [[package]] @@ -995,6 +996,15 @@ dependencies = [ ] [[package]] +name = "toml" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +dependencies = [ + "serde", +] + +[[package]] name = "tower-service" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" blob - 2f8d72c87940a2bef0ba4e74760e846b48b2cfef blob + 2a39fbf4e2d5888183b069a767d473a8f820ef2f --- Cargo.toml +++ Cargo.toml @@ -14,3 +14,4 @@ anyhow = "1.0" reqwest = { version = "0.11", features = ["blocking"] } clap = "3" chrono = "0.4" +toml = "0.5.8" blob - 53178f50ba7c7590f521840d543ed9b8a972d356 blob + f8cb16808bbc45b077cad3d517b5999db06d6a7f --- src/db.rs +++ src/db.rs @@ -16,7 +16,7 @@ pub fn establish_connection() -> anyhow::Result anyhow::Result { +pub fn insert_item(conn: &SqliteConnection, item: &Item) -> anyhow::Result { let time = item .pub_date() .map(|date| DateTime::parse_from_rfc2822(date).unwrap().timestamp()); blob - 910e92a48e67397392a69654b75432283ff12699 blob + b58971e2a060714f23f888914f01c231a22e39d7 --- src/main.rs +++ src/main.rs @@ -9,14 +9,15 @@ pub mod models; pub mod rss; pub mod schema; +use self::diesel::prelude::*; +use schema::posts::dsl::*; use std::fs::File; use std::io::BufRead; use std::io::BufReader; +use std::io::Read; +use toml::Value; fn main() -> anyhow::Result<()> { - use self::diesel::prelude::*; - use schema::posts::dsl::*; - let app = clap::build_app(); let matches = app.get_matches(); @@ -32,7 +33,7 @@ fn main() -> anyhow::Result<()> { for u in urls { let new = rss::fetch_new(u)?; for i in new.items() { - let _ = db::insert_post(&conn, i)?; + let _ = db::insert_item(&conn, i)?; } } @@ -42,13 +43,34 @@ fn main() -> anyhow::Result<()> { .order(pub_date.desc()) .load::(&conn)?; - dbg!(results); + send_posts(results)?; Ok(()) } -fn send_posts(posts: &Vec) { - // TODO: store smtp values (username, password, smtp server) and create smtp client to send - // with - for post in posts {} +fn send_posts(items: Vec) -> anyhow::Result<()> { + let config_file = "/tmp/rss-email.toml"; + let mut string = String::new(); + File::open(config_file) + .unwrap() + .read_to_string(&mut string) + .unwrap(); + + let value = (&string).parse::().unwrap(); + let smtp = value.get("smtp").unwrap(); + let smtp_user = smtp.get("smtp_user").unwrap().as_str().unwrap(); + let smtp_pw = smtp.get("smtp_password").unwrap().as_str().unwrap(); + let smtp_port = smtp.get("smtp_port").unwrap().as_integer().unwrap(); + let smtp_server = smtp.get("smtp_server").unwrap().as_str().unwrap(); + let to = value.get("to").unwrap().as_str().unwrap(); + let from = value.get("from").unwrap().as_str().unwrap(); + + dbg!(smtp_user, smtp_pw, smtp_port, smtp_server, to, from); + + for mut post in items { + // TODO: send via smtp, write sent field to database + post.sent = true; + } + + Ok(()) }